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 kompilacji 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. Informacje o gałęziach manifestu jądra Pixela 5 i starszych urządzeń znajdziesz w sekcji Starsze jądra Pixela.

Telefony Pixel 6 i Pixel 6 Pro są też obsługiwane w głównym jądrze systemu Linux i mogą uruchamiać się do wiersza poleceń urządzenia tylko przy użyciu sterowników z głównego jądra. Więcej informacji znajdziesz w artykule Kompilowanie i flashowanie jądra Pixela z upstreamu.

które zawierają zarówno jądro GKI, jak i sterowniki Pixela.

Kompilowanie i flashowanie jąder GKI Pixel

W tej sekcji znajdziesz instrukcje synchronizacji, kompilacji i flashowania gałęzi jądra obsługiwanych przez GKI. W tabeli poniżej znajdziesz mapowanie obsługiwanych urządzeń Pixel i odpowiednich gałęzi repozytorium jądra produkcyjnego.

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 jądra Android Common wymienionych w tabeli Obsługiwane kombinacje platformy Android i jądra na urządzeniach Pixel 6 i Pixel 6 Pro. Ze względu na różnice w interfejsie UAPI dostawcy 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 w przypadku Pixela 6 i Pixela 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 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 i jądra Androida.
    • W przypadku android-latest-release wybierz „Wróć do wersji publicznej”, Canary lub Beta.
  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

Synchronizowanie repozytorium jądra

Aby pobrać kod źródłowy jądra, uruchom te polecenia: W tabeli Obsługiwane kombinacje platformy Android i jądra systemu na telefonach Pixel 6 i Pixel 6 Pro znajdziesz informacje o telefonie Pixel KERNEL_MANIFEST_BRANCH.

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. Opcji (1) używaj, jeśli masz Androida 15 QPR2 (BP11.241025.006) lub nowszego. 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. Aby korzystać z 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, 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 jako przykładu użyto 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

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 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 (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, Pixela 6 Pro lub Pixela 6a zaktualizowano vendor_ramdisk w sekcji Aktualizacja ramdysku dostawcy, do zaktualizowania partycji vendor_boot użyj tego polecenia:

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 łą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.

Kompilowanie i flashowanie jądra Pixela z wersji upstream

Ponieważ Pixel 6 i Pixel 6 Pro są obsługiwane w głównym jądrze systemu Linux, możesz używać android-mainline tylko ze sterownikami głównymi, aby uruchomić powłokę urządzenia na potrzeby tworzenia jądra. W tej sekcji znajdziesz instrukcje synchronizacji, kompilacji i flashowania jądra Pixela 6 i Pixela 6 Pro z android-mainline.

Aby rozpocząć, wykonaj kolejne czynności.

  1. Przygotuj urządzenie, wykonując czynności opisane w sekcji Przygotowywanie Pixela.
  2. Zsynchronizuj gałąź manifestu jądra common-android-mainline, wykonując czynności opisane w artykule Synchronizowanie repozytorium jądra.
  3. Konfiguracja docelowa kompilacji Kleaf jest zdefiniowana w ścieżce KERNEL_REPO_ROOT/devices/google/raviole. Aby skompilować środowisko docelowe raviole_upstream, uruchom polecenie Kleaf:

    tools/bazel run //devices/google/raviole:raviole_upstream_dist
    
  4. Podobnie jak w przypadku jąder produkcyjnych, wyłącz weryfikację i wyczyść urządzenie, gdy wgrywasz niestandardowe jądro na obrazy fabryczne Androida. Więcej informacji znajdziesz w uwagach w sekcji Flash the kernel images (Flashowanie obrazów jądra).

  5. W trybie fastboot uruchom te polecenia, aby wgrać 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.img
    
  6. Aby uzyskać dostęp do wiersza poleceń urządzenia, możesz uruchomić je ponownie w trybie odzyskiwania, wpisując polecenie:

    fastboot reboot recovery
    

    Otwórz powłokę urządzenia, uruchamiając polecenie adb shell. Dostęp do roota można też uzyskać, uruchamiając polecenie adb root.

Starsze kernele Pixela

W tabeli Legacy Pixel kernel branches 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