Tworzenie jąder Pixela

Ten przewodnik zawiera szczegółowe instrukcje pobierania, skompilowania i flashowania niestandardowego jądra Pixela na potrzeby programowania. Dzięki GKI można teraz aktualizować jądro niezależnie od kompilacji platformy Androida. Te instrukcje dotyczą tylko urządzeń Pixel 6 i nowszych. Dzieje się tak, ponieważ Pixel 5 i starsze urządzenia wymagają aktualizacji modułów jądra na partycji vendor, co zależy od kompilacji platformy Android. Tabela Obsługiwane gałęzie jądra Pixela zawiera gałąź manifestu repozytorium jądra dla każdego urządzenia Pixel obsługiwanego przez GKI. Informacje o gałęziach pliku manifestu Pixela 5 i starszych wersji jądra znajdziesz w sekcji Starsze elementy jądra.

Gałęzie jądra Pixela obsługiwane przez GKI
Urządzenie Ścieżka pliku binarnego w drzewie AOSP Gałęzie repozytorium Jądro GKI
Pixel 8a (akita) device/google/akita-kernel, android-gs-akita-5.15-android14-qpr3 Android14–5.15
Pixel 8 (shiba)
Pixel 8 Pro (husky)
device/google/shusky-kernel, android-gs-shusky-5.15-android14-qpr3 Android14–5.15
Pixel Fold (felix) device/google/felix-kernel, android-gs-felix-5.10-android14-qpr3 Android13–5.10
Pixel Tablet (Tangorpro) device/google/tangorpro-kernel, android-gs-tangorpro-5.10-android14-qpr3 Android13–5.10
Pixel 7a (lynx) device/google/lynx-kernel, android-gs-lynx-5.10-android14-qpr3 Android13–5.10
Pixel 7 (panther)
Pixel 7 Pro (gepard)
device/google/pantah-kernel, android-gs-pantah-5.10-android14-qpr3 Android13–5.10
Pixel 6a (bluejay) urządzenie/google/bluejay-kernel android-gs-bluejay-5.10-android14-qpr3 Android13–5.10
Pixel 6 (oryginalny)
Pixel 6 Pro (kruk)
urządzenie/google/raviole-kernel android-gs-raviole-5.10-android14-qpr3 Android13–5.10

Urządzenia Pixel 6 i 6 Pro obsługują nie tylko jądra obsługiwane przez fabrykę, ale też urządzenia Pixel 6 i 6 Pro do celów programistycznych GKI tylko w gałęziach jądra systemu Android Common uwzględnionych w tabeli Obsługiwane platformy Androida i kombinacje jądra systemu Pixel 6/6 Pro. Ze względu na różnice w interfejsie UAPI dostawców między HAL platformy Android a sterownikami jądra systemu Pixel w tabeli znajdziesz obsługiwane kombinacje kompilacji.

Obsługiwane kombinacje platformy Androida i jądra systemu Pixel 6 lub 6 Pro
Gałąź pliku manifestu jądra Pixela Gałąź GKI Kompilacja platformy Androida Pomoc aosp-main?
gs-android-gs-raviole-mainline android-mainline (wersja 6.8) AP1A.240505.004 (11583682) Tak
android14-gs-pixel-6.1 android 14 w wersji 6.1 AP1A.240505.004 (11583682) Tak
gs-android13-gs-raviole-5.15 android 13–5.15 TQ1A.230205.002 (9471150) Nie

Przygotuj urządzenie Pixel

Ten schemat blokowy opisuje proces aktualizowania jądra na urządzeniach Pixel 6 i nowszych:

**Rysunek 1.** Schemat blokowy aktualizacji jądra systemu

Przeprowadź flashowanie urządzenia, korzystając z flash.android.com

  1. Wejdź na flash.android.com.
  2. Wybierz kompilację Androida na podstawie obsługiwanej platformy Androida i kombinacji jądra.
  3. Wybierz te opcje:
    • Wyczyść pamięć urządzenia
    • Wymuś użycie partycji we wszystkich partycjach
    • Wyłącz weryfikację
  4. Naciśnij przycisk Zainstaluj kompilację, aby uruchomić urządzenie.

**Rysunek 2.** Przykład stacji świetlnej

Pobieranie i skompilowanie jądra

Synchronizacja repozytorium jądra

Uruchom następujące polecenia, aby pobrać kod źródłowy jądra. Zapoznaj się z tabelą Obsługiwana platforma Androida i kombinacje jądra systemu Pixel 6/6 Pro dla telefonu Pixel KERNEL_MANIFEST_BRANCH.

repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags

Aktualizowanie dysku ramdisk dostawcy

Zaktualizuj plik vendor_ramdisk-DEVICE.img w repozytorium jądra, aby pasował do kompilacji platformy Androida wyświetlanej na urządzeniu. Masz do wyboru kilka opcji.

Opcja 1. Wyodrębnij obraz Ramdisk dostawcy z fabrycznego obrazu Pixela.
  1. Pobierz obsługiwany obraz fabryczny urządzenia ze strony https://developers.google.com/android/images.

  2. Rozpakuj vendor_boot.img:

    • W poniższych poleceniach użyto jako przykładu AP1A.240505.004 telefonu Pixel 6 Pro. Zastąp nazwę pliku ZIP nazwą 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
    
  3. Rozpakuj pakiet vendor_boot.img, aby uzyskać plik pamięci RAM dostawcy.

      KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
          --out vendor_boot_out
    
  4. Skopiuj wyodrębniony plik vendor-ramdisk-by-name/ramdisk_ do repozytorium jądra Pixela.

    Urządzenie DEVICE_RAMDISK_PATH
    Pixel 6 (oryginalny)
    Pixel 6 Pro (kruk)
    kompilowane/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 lokalnego repozytorium platformy Androida.
Urządzenie DEVICE_RAMDISK_PATH
Pixel 6 (oryginalny)
Pixel 6 Pro (kruk)
kompilowane/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ń korzystających z wersji android13-5.15 i nowszych jądro należy utworzyć za pomocą narzędzia Kleaf.

W przypadku Pixela 6 i 6 Pro z jądrem android14 i nowszych uruchom polecenie kompilacji Kleaf:

tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist

W przypadku telefonów Pixel 6 i 6 Pro z jądrami android13-5.15 uruchom polecenie kompilacji Kleaf:

tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist

W przypadku pozostałych jąder systemu Pixel uruchom skrypt build_DEVICE.sh znajdujący się w lokalizacji KERNEL_REPO_ROOT. Aby na przykład utworzyć jądro Pixela 6 w gałęzi android-gs-raviole-5.10-android14, uruchom polecenie:

build_slider.sh

Domyślnie skrypty build_DEVICE.sh korzystają z gotowego jądra GKI, aby przyspieszyć proces kompilacji. Jeśli chcesz zmodyfikować rdzeń jądra, ustaw zmienną środowiskową BUILD_AOSP_KERNEL=1, aby utworzyć ją ze źródeł lokalnych.

Więcej informacji na temat systemu kompilacji jądra i dostosowywania kompilacji znajdziesz w artykule Kleaf – kompilowanie rdzeni Androida przy użyciu Bazel.

Wgrywanie obrazów jądra systemu

Uwaga: jeśli weryfikacja nie została wyłączona, musisz ją wyłączyć przed zainstalowaniem niestandardowego jądra. Oto polecenie, które pozwala to zrobić:
fastboot oem disable-verification
OSTRZEŻENIE: jeśli kompilujesz kompilację platformy z użyciem niestandardowego jądra, a z nowym jądrem jest powiązana aktualizacja poziomu zabezpieczeń (SPL), konieczne może być czyszczenie urządzenia. Ten proces spowoduje usunięcie wszystkich Twoich danych osobistych. Nie zapomnij utworzyć kopii zapasowej danych przed wyczyszczeniem pamięci.
fastboot -w

Aby zmodyfikować obrazy jądra, uruchom polecenie fastboot flash dla każdej partycji jądra wymienionej na urządzeniu. W przypadku partycji dynamicznych musisz uruchomić ponownie w trybie fastbootd, zanim będzie można rozpocząć aktualizację.

Urządzenie Partycje jądra systemu
Pixel 6 (oriole)
Pixel 6 Pro (kruk)
Pixel 6a (bluejay)
rozruch
dtbo
vendor_boot
vendor_dlkm (partycja dynamiczna)
Pixel 8 (shiba)
Pixel 8 Pro (husky)
Pixel Fold (felix)
Pixel Tablet (tangorpro)
Pixel 7a (lynx)
Pixel 7 (panther)
Pixel 7 Pro (gepard)
rozruch
dtbo
vendor_kernel_boot
vendor_dlkm (dynamic sama partycja)
system_dlkm (partycja dynamiczna)

Oto polecenia dotyczące migania na Pixelu 6 na urządzeniu 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
wersja 5.10 out/mixed/dist
wersja 5.15 i nowsze out/DEVICE/dist
Uwaga: jeśli masz port szeregowy i chcesz włączyć logi szeregowe, polecenie będzie wyglądać tak:
fastboot oem uart enable
fastboot oem uart config 3000000
Przykładowe polecenie do łączenia się z hosta:
screen -fn /dev/ttyUSB* 3000000

Przywróć obrazy fabryczne

Aby przywrócić na urządzeniu obrazy fabryczne, możesz użyć flash.android.com.

Starsze jądra systemu Pixel

W tabeli starsze gałęzie jądra znajdziesz gałęzie repozytorium jądra dla urządzeń Pixel 5 i starszych. Urządzenia nie obsługują interfejsu GKI.

Gałęzie jądra starszej wersji Pixela
Urządzenie Ścieżka pliku binarnego w drzewie AOSP Gałęzie repozytorium
Pixel 5a (barbet)
Pixel 4a (5G) (bramble)
Pixel 5 (czerwony)
device/google/redbull-kernel, android-msm-redbull-4.19-android14-qpr3,
Pixel 4a (słońca) urządzenie/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (płomień)
Pixel 4 XL (koralowy)
urządzenie/google/jądro-koralu android-msm-koralowy-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 (krzyżowe)
urządzenie/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Pixel 2 (walleye)
Pixel 2 XL (taimen)
urządzenie/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3,
Pixel (żaglica)
Pixel XL (marlin)
device/google/marlin-kernel, android-msm-marlin-3.18-piec-qpr2