Tworzenie jąder Pixel

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 Pixela 6 i nowszych urządzeń. Dzieje się tak, ponieważ Pixel 5 i starsze urządzenia wymagają zaktualizowania modułów jądra na partycji vendor, co zależy od wersji platformy Android na tych urządzeniach. Tabela Gałęzie jądra Pixela obsługujące GKI zawiera gałąź manifestu repozytorium jądra dla każdego urządzenia Pixel obsługującego GKI. W przypadku gałęzi manifestu jądra Pixela 5 i starszych urządzeń zapoznaj się z sekcją Starsze jądra Pixela.

które zawierają zarówno jądro GKI, jak i sterowniki Pixela.
Obsługiwane gałęzie jądra Pixela w 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 fabrycznie urządzenia Pixel 6 i 6 Pro są obsługiwane na potrzeby rozwoju GKI tylko w przypadku gałęzi wspólnego jądra Androida wymienionych w tabeli Obsługiwane kombinacje platformy i jądra Androida na urządzeniach Pixel 6 i 6 Pro. Ze względu na różnice w interfejsie UAPI dostawców między warstwami HAL 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 6 Pro
Pixel Kernel Manifest Branch Gałąź GKI Kompilacja platformy Android
gs-android-gs-raviole-mainline android-mainline android-latest-release
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 urządzeniach Pixel 6 i nowszych:

**Ilustracja 1.** Schemat aktualizacji jądra

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

  1. Otwórz stronę flash.android.com.
  2. Wybierz kompilację Androida na podstawie obsługiwanych kombinacji platformy Android i jądra.
  3. Wybierz następujące opcje:
    • Wyczyść pamięć urządzenia
    • Wymuś flashowanie wszystkich partycji
    • Wyłączanie weryfikacji
  4. Aby wgrać oprogramowanie na urządzenie, naciśnij przycisk Zainstaluj kompilację.

**Ilustracja 2.** Przykład stacji błyskawicznej

Pobieranie i kompilowanie jądra

Synchronizowanie repozytorium jądra

Aby pobrać kod źródłowy jądra, uruchom te polecenia: Informacje o telefonie PixelKERNEL_MANIFEST_BRANCH znajdziesz w tabeli Obsługiwane kombinacje platformy Android i jądra w przypadku Pixela 6 i 6 Pro.

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

Aktualizowanie dysku RAM dostawcy

Zaktualizuj plik vendor_ramdisk-DEVICE.img w repozytorium jądra, aby pasował do kompilacji platformy Android wgranej na urządzenie. Plik vendor_ramdisk-DEVICE.img możesz zaktualizować na kilka sposobów. Jeśli używasz Androida 15 QPR2 (BP11.241025.006) lub nowszego, skorzystaj z opcji (1). W przeciwnym razie użyj opcji (2).

  • Opcja 1. Zaktualizuj tylko bity DTB i DLKM ramdysku partycji vendor_boot

    Od wersji fastboot 35.0.2-12583183 możesz bezpośrednio flashować dysk RAM DTB i DLKM na partycji vendor_boot. Pobierz i wyodrębnij sdk-repo-HOST_OS-platform-tools-12583183.zipartefaktów v35.0.2-12583183 do środowiska na komputerze hosta, aby móc z nich korzystać.

    Postępuj zgodnie z instrukcjami, aby wgrać DTB i vendor_boot:dlkm w sekcji Wgraj obrazy jądra.

  • Opcja 2. Wyodrębnij obraz ramdysku dostawcy z obrazu fabrycznego Pixela.

    1. Pobierz obsługiwany obraz fabryczny dla swojego urządzenia ze strony https://developers.google.com/android/images.

    2. Wyodrębnij vendor_boot.img:

      W tych poleceniach używamy jako przykładu Pixela 6 Pro w wersji AP1A.240505.004. 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 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
      
    4. Skopiuj 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 (Kleaf)

W Androidzie 13 skrypt build.sh został zastąpiony nowym systemem kompilacji jądra o nazwie Kleaf. W przypadku urządzeń z Androidem android13-5.15 lub nowszym jądro powinno być zbudowane przy użyciu Kleaf.

Dla wygody możesz uruchomić skrypt build_DEVICE.sh znajdujący się na stronie KERNEL_REPO_ROOT. W większości przypadków DEVICE musi być nazwą kodową, która może być nazwą kodową jednego urządzenia, np. „akita” (Pixel 8a), lub nazwą kodową reprezentującą grupę powiązanych urządzeń, które mają wspólne jądro, np. „caimito”, co oznacza Pixel 9 (tokay), Pixel 9 Pro (caiman) i Pixel 9 Pro XL (komodo). W przypadku wersji android14 i starszych używaj 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 w gałęzi android-gs-raviole-5.10-android14, uruchom to polecenie:

build_slider.sh

Domyślnie w przypadku gałęzi jądra produkcyjnego skrypty build_DEVICE.sh używają wstępnie skompilowanego jądra GKI, aby przyspieszyć proces kompilacji. Jeśli chcesz zmodyfikować podstawowy kernel, ustaw zmienną środowiskową BUILD_AOSP_KERNEL=1, aby skompilować kernel z lokalnych źródeł. Gałęzie jądra deweloperskiego domyślnie tworzą jądro bezpośrednio ze źródła.

Więcej informacji o systemie kompilacji jądra i sposobie dostosowywania kompilacji znajdziesz w artykule Kleaf – kompilowanie jąder Androida za pomocą Bazela.

Wgraj obrazy jądra

Uwaga: jeśli nie wyłączysz weryfikacji, musisz to zrobić przed wgraniem niestandardowego jądra. Aby to zrobić, użyj tego polecenia:
fastboot oem disable-verification
OSTRZEŻENIE: jeśli wgrywasz niestandardowe jądro na kompilację platformy, może być konieczne wyczyszczenie urządzenia, jeśli z nowym jądrem wiąże się obniżenie poziomu aktualizacji zabezpieczeń. Ten proces spowoduje usunięcie wszystkich danych osobowych. Przed wymazaniem danych utwórz ich kopię zapasową.
fastboot -w

Aby wgrać obrazy jądra, uruchom polecenie fastboot flash dla każdej partycji jądra wymienionej dla Twojego urządzenia. W przypadku partycji dynamicznych przed rozpoczęciem flashowania 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 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 dla Pixela 6 na 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, 6 Pro lub 6a zaktualizowano vendor_ramdisk w sekcji Aktualizacja dysku RAM 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
wersja 5.10 out/mixed/dist
wersja 5.15 i nowsze out/DEVICE/dist
Uwaga: jeśli masz klucz sprzętowy z interfejsem szeregowym i chcesz włączyć dzienniki szeregowe, użyj tego polecenia:
fastboot oem uart enable
fastboot oem uart config 3000000
Przykładowe polecenie nawiązania połączenia z hosta:
screen -fn /dev/ttyUSB* 3000000

Przywracanie obrazów fabrycznych

Aby przywrócić urządzenie do obrazów fabrycznych, możesz użyć strony flash.android.com.

Starsze kernele Pixela

W tabeli starszych gałęzi jądra Pixela znajdziesz gałęzie repozytorium jądra dla Pixela 5 i starszych urządzeń. Są to urządzenia nieobsługujące GKI.

Starsze gałęzie jądra 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 (płomień)
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 (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