W tym przewodniku znajdziesz szczegółowe instrukcje dotyczące pobierania, kompilowania i flashowania niestandardowego jądra Pixela na potrzeby programowania. Dzięki GKI można teraz aktualizować jądro niezależnie od kompilacji platformy Android. Te czynności dotyczą tylko Pixela 6 i nowszych urządzeń. Wynika to z tego, że Pixel 5 i starsze urządzenia wymagają aktualizacji modułów jądra w partycji vendor, która jest zależna od kompilacji platformy Android na tych urządzeniach. Tabela gałęzi jądra Pixela obsługiwanych przez GKI zawiera
gałąź manifestu repozytorium jądra dla każdego urządzenia Pixel obsługiwanego przez GKI. Gałęzie manifestu jądra Pixela 5 i starszych urządzeń znajdziesz w sekcji
Starsze jądra Pixela.
Pixel 6 i Pixel 6 Pro są też obsługiwane w głównym jądrze Linuxa i mogą uruchamiać się w wierszu poleceń urządzenia tylko z użyciem sterowników z głównego jądra. Więcej informacji znajdziesz w artykule Kompilowanie i flashowanie głównego jądra Pixela.
Kompilowanie i flashowanie jąder Pixela GKI
W tej sekcji znajdziesz instrukcje synchronizowania, kompilowania i flashowania gałęzi jądra obsługiwanych przez GKI. W tabeli poniżej znajdziesz mapowanie obsługiwanych urządzeń Pixel i ich gałęzi repozytorium jądra produkcyjnego.
Gałęzie jądra Pixela obsługiwane przez GKI
| Urządzenie | Gałęzie repozytorium | Jądro GKI |
|---|---|---|
| Pixel 9a (tegu) | android-gs-tegu-6.1-android16 | android14-6.1 |
| Pixel 9 Pro Fold (comet) | android-gs-comet-6.1-android16 | android14-6.1 |
| Pixel 9 (tokay) Pixel 9 Pro (caiman) Pixel 9 Pro XL (komodo) |
android-gs-caimito-6.1-android16 | android14-6.1 |
| Pixel 8a (akita) | android-gs-akita-6.1-android16 | android14-6.1 |
| Pixel 8 (shiba) Pixel 8 Pro (husky) |
android-gs-shusky-6.1-android16 | android14-6.1 |
| Pixel Fold (felix) | android-gs-felix-6.1-android16 | android14-6.1 |
| Pixel Tablet (tangorpro) | android-gs-tangorpro-6.1-android16 | android14-6.1 |
| Pixel 7a (lynx) | android-gs-lynx-6.1-android16 | android14-6.1 |
| Pixel 7 (panther) Pixel 7 Pro (cheetah) |
android-gs-pantah-6.1-android16 | android14-6.1 |
| Pixel 6a (bluejay) | android-gs-bluejay-6.1-android16 | android14-6.1 |
| Pixel 6 (oriole) Pixel 6 Pro (raven) |
android-gs-raviole-6.1-android16 | android14-6.1 |
Oprócz jąder obsługiwanych przez producenta urządzenia Pixel 6 i 6 Pro są obsługiwane tylko na potrzeby programowania GKI w gałęziach jądra Android Common, które są uwzględnione w tabeli Obsługiwane kombinacje platformy Android i jądra na Pixelu 6 i Pixelu 6 Pro. Ze względu na różnice w UAPI dostawcy między HAL-ami platformy Android a sterownikami jądra Pixela tabela zawiera obsługiwane kombinacje kompilacji.
Obsługiwane kombinacje platformy Android i jądra na Pixelu 6 i Pixelu 6 Pro
| Gałąź manifestu jądra Pixela | Gałąź GKI | Kompilacja platformy Android |
|---|---|---|
| gs-android-gs-raviole-mainline | android-mainline | android-latest-release |
| gs-android16-6.12-gs101 | android16-6.12 | android-latest-release |
| gs-android13-gs-raviole-5.15 | android13-5.15 | TQ1A.230205.002 (9471150) |
Przygotuj urządzenie Pixel
Poniższy schemat blokowy przedstawia proces aktualizacji jądra na Pixelu 6 i nowszych urządzeniach:
Flashowanie urządzenia za pomocą flash.android.com
- Otwórz stronę flash.android.com.
- Wybierz kompilację Androida na podstawie obsługiwanych kombinacji platformy Android i jądra.
- W przypadku
android-latest-releasewybierz „Powrót do wersji publicznej”, Canary lub Beta.
- W przypadku
- Wybierz te opcje:
- Wyczyść urządzenie
- Wymuś flashowanie wszystkich partycji
- Wyłącz weryfikację
- Aby flashować urządzenie, naciśnij przycisk Zainstaluj kompilację.
Synchronizowanie repozytorium jądra
Aby pobrać kod źródłowy jądra, uruchom te polecenia. Gałąź KERNEL_MANIFEST_BRANCH Pixela znajdziesz w tabeli Obsługiwane kombinacje platformy Android i jądra na Pixelu 6 i Pixelu 6 Pro.KERNEL_MANIFEST_BRANCH
repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags
Aktualizowanie ramdysku dostawcy
Zaktualizuj plik vendor_ramdisk-DEVICE.img w
repozytorium jądra, aby pasował do kompilacji platformy Android, która jest flashowana na
urządzeniu. Istnieje kilka sposobów aktualizacji pliku vendor_ramdisk-DEVICE.img. Jeśli używasz Androida 15 QPR2 (BP11.241025.006) lub nowszego, użyj opcji 1. W przeciwnym razie użyj opcji 2.
Opcja 1. Aktualizowanie tylko bitów DTB i DLKM ramdysku partycji vendor_boot
Od wersji fastboot 35.0.2-12583183 możesz bezpośrednio flashować DTB i DLKM ramdysk na partycji
vendor_boot. Aby użyć tej opcji, uaktualnij narzędzia platformy Android do wersji 36.0.0 lub nowszej. Aby to zrobić, uruchom to polecenie:$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools"Postępuj zgodnie z instrukcjami flashowania DTB i
vendor_boot:dlkmw sekcji Flashowanie obrazów jądra.Opcja 2. Wyodrębnianie obrazu ramdysku dostawcy z obrazu fabrycznego Pixela
Pobierz obsługiwany obraz fabryczny na swoje urządzenie ze strony https://developers.google.com/android/images.
Wyodrębnij plik
vendor_boot.img:W tych poleceniach jako przykład używamy Pixela 6 Pro AP1A.240505.004. Zastąp nazwę pliku zip nazwą pobranego obrazu fabrycznego.
unzip raven-ap1a.240505.004-factory-9d783215.zipcd raven-ap1a.240505.004unzip image-raven-ap1a.240505.004.zip vendor_boot.imgRozpakuj plik
vendor_boot.img, aby uzyskać ramdysk dostawcy.KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \ --out vendor_boot_outSkopiuj wyodrębniony plik
vendor-ramdisk-by-name/ramdisk_do repozytorium jądra Pixela.Urządzenie DEVICE_RAMDISK_PATH Pixel 6 (oriole)
Pixel 6 Pro (raven)prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img Pixel 6a (bluejay) private/devices/google/bluejay/vendor_ramdisk-bluejay.img cp vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \ KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
Kompilowanie jądra
W Androidzie 13 skrypt build.sh został zastąpiony nowym systemem kompilacji jądra
o nazwie Kleaf. W przypadku urządzeń z android13-5.15 i nowszymi, jądro należy kompilować za pomocą Kleaf.
Dla wygody możesz uruchomić build_DEVICE.sh
skrypt, który znajduje się w KERNEL_REPO_ROOT. W większości przypadków DEVICE musi być kryptonimem, który może być kryptonimem jednego urządzenia, np. „akita” (Pixel 8a), lub kryptonimem reprezentującym grupę powiązanych urządzeń, które mają wspólne jądro systemu (operacyjnego), np. „caimito”, która oznacza Pixela 9 (tokay), Pixela 9 Pro (caiman) i Pixela 9 Pro XL (komodo). W przypadku android14 i starszych wersji użyj skryptu build_slider.sh w przypadku Pixela
6 i Pixela 6 Pro oraz skryptu build_cloudripper.sh w przypadku Pixela 7 i Pixela 7 Pro.
Aby na przykład skompilować jądro Pixela 6 w gałęzi android-gs-raviole-5.10-android14, uruchom to polecenie:
build_slider.sh
Domyślnie w gałęziach jądra produkcyjnego skrypty
build_DEVICE.sh używają wstępnie skompilowanego jądra GKI
aby przyspieszyć proces kompilacji. Jeśli chcesz zmodyfikować jądro główne, ustaw zmienną środowiskową BUILD_AOSP_KERNEL=1, aby skompilować jądro ze źródeł lokalnych. Gałęzie jądra programistycznego domyślnie kompilują źródło jądra.
Więcej informacji o systemie kompilacji jądra i o tym, jak dostosować kompilację, znajdziesz w artykule Kleaf – kompilowanie jąder Androida za pomocą Bazela.
Flashowanie obrazów jądra
Uwaga: jeśli nie wyłączysz weryfikacji, musisz to zrobić przed flashowaniem niestandardowego jądra. Aby to zrobić, użyj tego polecenia:fastboot oem disable-verification
OSTRZEŻENIE: jeśli flashujesz niestandardowe jądro na kompilacji platformy, może być konieczne wyczyszczenie urządzenia, jeśli nowemu jądru towarzyszy obniżenie poziomu poprawek zabezpieczeń (SPL). Ten proces spowoduje usunięcie wszystkich danych osobowych. Przed wyczyszczeniem urządzenia utwórz kopię zapasową danych.fastboot -w
Aby flashować obrazy jądra, uruchom polecenie fastboot flash dla każdej partycji jądra wymienionej w przypadku Twojego urządzenia. W przypadku partycji dynamicznych przed flashowaniem musisz ponownie uruchomić urządzenie w trybie fastbootd.
| Urządzenie | Partycje jądra |
|---|---|
| Pixel 6 (oriole) Pixel 6 Pro (raven) Pixel 6a (bluejay) |
boot dtbo vendor_boot lub vendor_boot:dlkm vendor_dlkm (partycja dynamiczna) |
| Pixel 9 (tegu) Pixel 9 Pro Fold (comet) Pixel 9 (tokay) Pixel 9 Pro (caiman) Pixel 9 Pro XL (komodo) Pixel 8 (shiba) Pixel 8 Pro (husky) Pixel Fold (felix) Pixel Tablet (tangorpro) Pixel 7a (lynx) Pixel 7 (panther) Pixel 7 Pro (cheetah) |
boot dtbo vendor_kernel_boot vendor_dlkm (partycja dynamiczna) system_dlkm (partycja dynamiczna) |
Oto polecenia flashowania Pixela 6 w gałęzi android-mainline:
fastboot flash boot out/slider/dist/boot.img
fastboot flash dtbo out/slider/dist/dtbo.img
fastboot flash --dtb out/slider/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img
Jeśli w przypadku Pixela 6, Pixela 6 Pro i Pixela 6a zaktualizujesz vendor_ramdisk w
Aktualizowanie ramdysku dostawcy, użyj tego polecenia, aby zaktualizować partycję vendor_boot:
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
Obrazy jądra znajdziesz w DIST_DIR.
| Gałąź jądra | DIST_DIR |
|---|---|
| v5.10 | out/mixed/dist |
| v5.15 i nowsze | out/DEVICE/dist |
Uwaga: jeśli masz klucz sprzętowy do portu szeregowego i chcesz włączyć logi szeregowe, użyj tego polecenia:Przykładowe polecenie połączenia z hosta: fastboot oem uart enablefastboot oem uart config 3000000screen -fn /dev/ttyUSB* 3000000
Przywracanie obrazów fabrycznych
Aby przywrócić urządzenie do obrazów fabrycznych, możesz użyć flash.android.com.
Kompilowanie i flashowanie głównego jądra Pixela
Ponieważ Pixel 6 i Pixel 6 Pro są obsługiwane w głównym jądrze Linuxa, możesz użyć gałęzi android-mainline tylko ze sterownikami z głównego jądra, aby uruchomić wiersz poleceń urządzenia na potrzeby programowania jądra. W tej sekcji znajdziesz instrukcje synchronizowania, kompilowania i flashowania jądra Pixela 6 i Pixela 6 Pro z gałęzi android-mainline.
Aby rozpocząć, wykonaj te czynności.
- Przygotuj urządzenie, wykonując czynności opisane w sekcji Przygotowywanie urządzenia Pixel.
- Zsynchronizuj gałąź manifestu jądra
common-android-mainline, wykonując czynności opisane w sekcji Synchronizowanie repozytorium jądra. Konfiguracja docelowa kompilacji Kleaf jest zdefiniowana w ścieżce
KERNEL_REPO_ROOT/devices/google/raviole. Aby skompilować docelową kompilacjęraviole_upstream, uruchom polecenie Kleaf:tools/bazel run //devices/google/raviole:raviole_upstream_distPodobnie jak w przypadku jąder produkcyjnych, wyłącz weryfikację i wyczyść urządzenie podczas flashowania niestandardowego jądra na obrazach fabrycznych Androida. Więcej informacji znajdziesz w uwagach w sekcji Flashowanie obrazów jądra.
W trybie fastboot uruchom te polecenia, aby flashować obrazy jądra:
fastboot flash boot out/raviole_upstream/dist/boot.img fastboot flash dtbo out/raviole_upstream/dist/dtbo.img fastboot flash --dtb out/raviole_upstream/dist/dtb.img \ vendor_boot:dlkm out/raviole_upstream/dist/initramfs.imgAby uzyskać dostęp do wiersza poleceń powłoki urządzenia, możesz ponownie uruchomić urządzenie w trybie przywracania (Recovery Mode), uruchamiając to polecenie:
fastboot reboot recoveryOtwórz powłokę urządzenia, uruchamiając polecenie
adb shell. Dostęp do roota można też uzyskać, uruchamiając polecenieadb root.
Starsze jądra Pixela
Tabela gałęzi starszych jąder Pixela zawiera gałęzie repozytorium jądra dla Pixela 5 i starszych urządzeń. Są to urządzenia nieobsługiwane przez GKI.
Gałęzie starszych jąder Pixela
| Urządzenie | Ścieżka pliku binarnego w drzewie AOSP | Gałęzie repozytorium |
|---|---|---|
| Pixel 5a (barbet) Pixel 4a (5G) (bramble) Pixel 5 (redfin) |
device/google/redbull-kernel | android-msm-redbull-4.19-android14-qpr3 |
| Pixel 4a (sunfish) | device/google/sunfish-kernel | android-msm-sunfish-4.14-android13-qpr3 |
| Pixel 4 (flame) Pixel 4 XL (coral) |
device/google/coral-kernel | android-msm-coral-4.14-android13 |
| Pixel 3a (sargo) Pixel 3a XL (bonito) |
device/google/bonito-kernel | android-msm-bonito-4.9-android12L |
| Pixel 3 (blueline) Pixel 3 XL (crosshatch) |
device/google/crosshatch-kernel | android-msm-crosshatch-4.9-android12 |
| Pixel 2 (walleye) Pixel 2 XL (taimen) |
device/google/wahoo-kernel | android-msm-wahoo-4.4-android10-qpr3 |
| Pixel (sailfish) Pixel XL (marlin) |
device/google/marlin-kernel | android-msm-marlin-3.18-pie-qpr2 |