Tworzenie jąder Pixela

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ż Pixel 5 i starsze urządzenia wymagają aktualizacji modułów 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. 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 9 Pro Fold (kometa) device/google/comet-kernel, android-gs-comet-6.1-android14-qpr3-d1 Android 14–6.1
Pixel 9 (Tokay)
Pixel 9 Pro (Caiman)
Pixel 9 Pro XL (Komodo)
device/google/caimito-kernel, android-gs-caimito-6.1-android14-qpr3-d1 Android 14–6.1
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 (pomarańczowy)
Pixel 6 Pro (czarny)
urządzenie/google/raviole-kernel android-gs-raviole-5.10-android14-qpr3 Android13–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 Android i jądra dla Pixela 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 Android i jądra na Pixelu 6/6 Pro
Gałąź manifestu jądra Pixela Gałąź GKI Kompilacja platformy Androida aosp-main – pomoc?
gs-android-gs-raviole-mainline android-mainline (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 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:

**Rysunek 1.** Schemat przepływu aktualizacji jądra

Flashowanie urządzenia za pomocą witryny flash.android.com

  1. Otwórz stronę 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łączanie weryfikacji
  4. Naciśnij przycisk Zainstaluj kompilację, aby uruchomić urządzenie.

**Rysunek 2.** Przykład stacji błyskowej

Pobieranie i skompilowanie jądra

Synchronizacja repozytorium jądra

Aby pobrać kod źródłowy jądra, uruchom te polecenia. Zapoznaj się z tabelą Obsługiwane kombinacje platformy Android i jądra na Pixelu 6/6 Pro, aby dowiedzieć się, jakie wersje systemu Android 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 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 (pomarańczowy)
    Pixel 6 Pro (czarny)
    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 (pomarańczowy)
Pixel 6 Pro (czarny)
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 lub nowszym uruchom komendę 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ę pod adresem KERNEL_REPO_ROOT. W większości przypadków DEVICE musi być nazwą kodu odpowiadającą nazwie kodu użytej w kolumnie Binary Path in AOSP Tree (Ścieżka binarna w drzewie AOSP) w gałęziach jądra systemu Pixel obsługiwanego przez GKI. Może to być nazwa kodowa urządzenia, np. „akita” (Pixel 8a), lub nazwa kodowa reprezentująca grupę powiązanych urządzeń mających wspólne jądro, np. „caimito” (Pixel 9 (Tokay), Pixel 9 Pro (kajman) i Pixel 9 Pro XL (komodo). W przypadku wersji android14 i wcześniejszych użyj build_slider.sh w przypadku Pixela 6 i Pixela 6 Pro oraz build_cloudripper.sh w przypadku Pixela 7 i Pixela 7 Pro.

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 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 – kompilacja 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 chcesz zainstalować 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 systemu
Pixel 6 (oriole)
Pixel 6 Pro (raven)
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 szeregową wtyczkę i chcesz włączyć logi szeregowe, użyj polecenia:
fastboot oem uart enable
fastboot oem uart config 3000000
Przykładowe polecenie do połączenia z hosta:
screen -fn /dev/ttyUSB* 3000000

Przywróć obrazy fabryczne

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 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) device/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (czerwony)
Pixel 4 XL (koralowy)
device/google/coral-kernel 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 (kratka)
urządzenie/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 (żaglica)
Pixel XL (marlin)
device/google/marlin-kernel android-msm-marlin-3.18-piec-qpr2