Ten przewodnik zawiera szczegółowe instrukcje 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 urządzeń Pixel 6 i nowszych. Dzieje się tak, ponieważ na Pixelu 5 i starszych urządzeniach trzeba zaktualizować moduły jądra na partycji vendor
, która zależy od wersji platformy Android na tych urządzeniach. Tabela gałęzi jądra Pixela obsługiwanych przez GKI zawiera gałąź pliku manifestu repozytorium jądra dla każdego urządzenia Pixel obsługiwanego przez GKI. W przypadku gałęzi manifestu jądra dla Pixela 5 i starszych należy zapoznać się z sekcją Starsze jądra Pixela.
GKI obsługiwane gałęzie jądra Pixela
Urządzenie | Ścieżka pliku binarnego w drzewie AOSP | Gałęzie repozytorium | Kernel GKI |
---|---|---|---|
Pixel 9 Pro Fold (kometa) | device/google/comet-kernels/6.1 | android-gs-comet-6.1-android15-qpr1 | android15-6.1 |
Pixel 9 (Tokay) Pixel 9 Pro (Caiman) Pixel 9 Pro XL (Komodo) |
device/google/caimito-kernels/6.1 | android-gs-caimito-6.1-android15-qpr1 | android15-6.1 |
Pixel 8a (Akita) | device/google/akita-kernels/5.15 | android-gs-akita-5.15-android15-qpr1 | android15-5.15 |
Pixel 8 (Shiba) Pixel 8 Pro (Husky) |
device/google/shusky-kernels/5.15 | android-gs-shusky-5.15-android15-qpr1 | android15-5.15 |
Pixel Fold (felix) | device/google/felix-kernels/5.10 | android-gs-felix-5.10-android15-qpr1 | android15-5.10 |
Pixel Tablet (tangorpro) | device/google/tangorpro-kernels/5.10 | android-gs-tangorpro-5.10-android15-qpr1 | android15-5.10 |
Pixel 7a (lynx) | device/google/lynx-kernels/5.10 | android-gs-lynx-5.10-android15-qpr1 | android15-5.10 |
Pixel 7 (panther) Pixel 7 Pro (cheetah) |
device/google/pantah-kernels/5.10 | android-gs-pantah-5.10-android15-qpr1 | android15-5.10 |
Pixel 6a (bluejay) | device/google/bluejay-kernels/5.10 | android-gs-bluejay-5.10-android15-qpr1 | android15-5.10 |
Pixel 6 (pomarańczowy) Pixel 6 Pro (czarny) |
device/google/raviole-kernels/5.10 | android-gs-raviole-5.10-android15-qpr1 | android15-5.10 |
Oprócz jąder obsługiwanych fabrycznie urządzenia Pixel 6 i 6 Pro są obsługiwane do celów związanych z rozwojem GKI tylko w odgałęziach jądra Android Common wymienionych w tabeli Obsługiwane kombinacje platformy i jądra Androida na Pixelu 6/6 Pro. Ze względu na różnice w użytkowniku UAPI między interfejsami HAL platformy Android a sterownikami jądra Pixela w tabeli podano obsługiwane kombinacje kompilacji.
Obsługiwane kombinacje platformy Android i jądra na Pixelu 6/6 Pro
Gałąź manifestu jądra Pixela | GKI Branch | Kompilacja platformy Android | aosp-main – pomoc |
---|---|---|---|
gs-android-gs-raviole-mainline | android-mainline (wersja 6.8) | AP1A.240505.004 (11583682) | Tak |
android14-gs-pixel-6.1 | android14-6.1 | AP1A.240505.004 (11583682) | Tak |
gs-android13-gs-raviole-5.15 | android13-5.15 | TQ1A.230205.002 (9471150) | Nie |
Przygotuj urządzenie Pixel
Ten schemat przepływu danych opisuje proces aktualizacji jądra na urządzeniach Pixel 6 i nowszych:
Flashowanie urządzenia za pomocą witryny flash.android.com
- Otwórz stronę flash.android.com.
- Wybierz wersję Androida na podstawie obsługiwanych kombinacji platformy i jądra Androida.
- Wybierz te opcje:
- Wyczyść pamięć urządzenia
- Wymuś flashowanie wszystkich partycji
- Wyłączanie weryfikacji
- Aby zaflashować urządzenie, naciśnij przycisk Zainstaluj wersję.
Pobieranie i kompilowanie jądra
Synchronizowanie repozytorium jądra
Aby pobrać kod źródłowy jądra, uruchom te polecenia. Zapoznaj się z tabelą Wspierane kombinacje platformy Android i jądra na Pixelu 6/6 Pro, aby dowiedzieć się, jakie wersje Androida i jądra są obsługiwane na urządzeniuKERNEL_MANIFEST_BRANCH.
repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags
Aktualizowanie pamięci RAM dostawcy
Zaktualizuj plik vendor_ramdisk-DEVICE.img
w repozytorium jądra, aby pasował do wersji platformy Android, która jest flashowana na urządzeniu. Masz kilka opcji do wyboru.
Opcja 1. Wyodrębnij obraz dostawcy z obrazu Pixel factory.
Pobierz obsługiwany obraz fabryczny dla swojego urządzenia na stronie https://developers.google.com/android/images.
Wyodrębnij
vendor_boot.img
:- W podanych niżej poleceniach jako przykład użyto telefonu Pixel 6 Pro AP1A.240505.004. Zastąp nazwę pliku zip nazwą pliku pobranego obrazu fabrycznego.
unzip raven-ap1a.240505.004-factory-9d783215.zip
cd raven-ap1a.240505.004
unzip image-raven-ap1a.240505.004.zip vendor_boot.img
Rozpakuj plik
vendor_boot.img
, aby uzyskać dysk RAM dostawcy.KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \ --out vendor_boot_out
Skopiuj wyekstrahowany plik
vendor-ramdisk-by-name/ramdisk_
do repozytorium jądra Pixela.Urządzenie DEVICE_RAMDISK_PATH Pixel 6 (pomarańczowy)
Pixel 6 Pro (czarny)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
Opcja 2. Skopiuj vendor_ramdisk
z repozytorium platformy Androida utworzonego lokalnie.
Urządzenie | DEVICE_RAMDISK_PATH |
---|---|
Pixel 6 (pomarańczowy) Pixel 6 Pro (czarny) |
prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img |
Pixel 6a (bluejay) | private/devices/google/bluejay/vendor_ramdisk-bluejay.img |
cp ANDROID_ROOT/out/target/product/DEVICE/vendor_ramdisk-debug.img \
KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH/vendor_ramdisk-DEVICE.img
Kompilowanie jądra (Kleaf)
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
lub nowszą wersją jądra należy użyć Kleaf.
W przypadku Pixela 6 i 6 Pro z jądrem android14
lub nowszym uruchom komendę kompilacji Kleaf:
tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist
W przypadku Pixela 6 i Pixela 6 Pro z jądrem android13-5.15
uruchom komendę kompilowania Kleaf:
tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist
W przypadku wszystkich innych jąder Pixela uruchom skrypt build_DEVICE.sh
, który znajdziesz na stronie KERNEL_REPO_ROOT
. W większości przypadków DEVICE
musi być nazwą kodu, która jest zgodna z nazwą kodu użytą w kolumnie Ścieżka binarna w drzewie AOSP w tabeli GKI obsługiwane gałęzie jądra Pixela. Może to być nazwa kodowa jednego urządzenia, np. „akita” (Pixel 8a), lub nazwa kodowa, która reprezentuje grupę powiązanych urządzeń z tym samym jądrem, np. „caimito”, co oznacza Pixel 9 (tokay), Pixel 9 Pro (caiman) i Pixel 9 Pro XL (komodo). W przypadku wersji android14
i starszych na Pixelu 6 i Pixelu 6 Pro użyj wartości build_slider.sh
, a na Pixelu 7 i Pixelu 7 Pro – wartości build_cloudripper.sh
.
Aby na przykład utworzyć jądro dla Pixela 6 na gałęzi android-gs-raviole-5.10-android14
, uruchom to polecenie:
build_slider.sh
Domyślnie skrypty build_DEVICE.sh
używają wstępnie skompilowanego jądra GKI, aby przyspieszyć proces kompilacji. Jeśli chcesz zmodyfikować jądro jądra, ustaw zmienną środowiskową BUILD_AOSP_KERNEL=1
, aby skompilować jądro z źródeł lokalnych.
Więcej informacji o systemie kompilacji jądra i o dostosowywaniu kompilacji znajdziesz w artykule Kleaf – kompilowanie jąder Androida za pomocą Bazel.
Flashowanie obrazów jądra
Uwaga: jeśli nie wyłączysz weryfikacji, musisz to zrobić przed zainstalowaniem niestandardowego jądra. Oto polecenie:fastboot oem disable-verification
OSTRZEŻENIE: jeśli flashujesz niestandardowe jądro na platformie, może być konieczne wyczyszczenie urządzenia, jeśli nowe jądro powoduje obniżenie poziomu poprawek zabezpieczeń (SPL). Ten proces spowoduje usunięcie wszystkich danych osobowych. Przed wyczyszczeniem pamięci utwórz kopię zapasową danych.fastboot -w
Aby zaflashować obrazy jądra, uruchom polecenie fastboot flash
dla każdej partycji jądra wymienionej dla Twojego urządzenia. W przypadku partycji dynamicznych przed zapisaniem danych 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 vendor_dlkm (dynamic partition) |
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 (dynamic partition) system_dlkm (dynamic partition) |
Oto polecenia flashowania na Pixelu 6 w wersji android-mainline
:
fastboot flash boot out/slider/dist/boot.img
fastboot flash dtbo out/slider/dist/dtbo.img
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img
Obrazy jądra znajdziesz w DIST_DIR.
Gałąź jądra | DIST_DIR |
---|---|
5.10 | out/mixed/dist |
Wersja 5.15 i nowsze | out/DEVICE/dist |
Uwaga: jeśli masz klucz USB i chcesz włączyć dzienniki szeregowe, wykonaj to polecenie:Przykładowe polecenie do połączenia z hosta: fastboot oem uart enable
fastboot oem uart config 3000000
screen -fn /dev/ttyUSB* 3000000
Przywracanie obrazów fabrycznych
Aby przywrócić urządzenie do ustawień fabrycznych, możesz użyć strony flash.android.com.
Starsze jądra Pixel
W tabeli starsze gałęzie jądra Pixela podano gałęzie repozytorium jądra dla Pixela 5 i starszych urządzeń. Te urządzenia nie obsługują GKI.
Starsze gałęzie jądra Pixel
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 (czerwony) Pixel 4 XL (koralowy) |
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 (niebieska linia) Pixel 3 XL (kratka) |
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 |