Tworzenie jąder Pixel

W tym przewodniku znajdziesz 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. W przypadku gałęzi manifestu jądra w Pixelu 5 i starszych należy zapoznać się z sekcją Starsze jądra Pixela.

GKI obsługiwane gałęzie jądra Pixela
Urządzenie Gałęzie repozytorium GKI Kernel
Pixel 9a (tegu) android-gs-tegu-6.1-android16 android16-6.1
Pixel 9 Pro Fold (kometa) android-gs-comet-6.1-android16 android16-6.1
Pixel 9 (Tokay)
Pixel 9 Pro (Caiman)
Pixel 9 Pro XL (Komodo)
android-gs-caimito-6.1-android16 android16-6.1
Pixel 8a (akita) android-gs-akita-6.1-android16 android16-6.1
Pixel 8 (Shiba)
Pixel 8 Pro (Husky)
android-gs-shusky-6.1-android16 android16-6.1
Pixel Fold (felix) android-gs-felix-6.1-android16 android16-6.1
Pixel Tablet (tangorpro) android-gs-tangorpro-6.1-android16 android16-6.1
Pixel 7a (lynx) android-gs-lynx-6.1-android16 android16-6.1
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
android-gs-pantah-6.1-android16 android16-6.1
Pixel 6a (niebieski) android-gs-bluejay-6.1-android16 android16-6.1
Pixel 6 (pomarańczowy)
Pixel 6 Pro (czarny)
android-gs-raviole-6.1-android16 android16-6.1

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 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
gs-android-gs-raviole-mainline android-mainline (6.12) BP11.241025.006 (12620009)
android-gs-raviole-6.1-android15-qpr2-beta android14-6.1 BP11.241025.006 (12620009)
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150)

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 wersję Androida na podstawie obsługiwanych kombinacji platformy i jądra Androida.
  3. Wybierz te opcje:
    • Wyczyść pamięć urządzenia
    • Wymuś flashowanie wszystkich partycji
    • Wyłączanie weryfikacji
  4. Aby przeflashować urządzenie, naciśnij przycisk Zainstaluj wersję.

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

Pobieranie i kompilowanie jądra

Synchronizowanie 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 w Pixelu 6/6 Pro, aby dowiedzieć się, czy Twój telefon PixelKERNEL_MANIFEST_BRANCH spełnia wymagania.

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 kompilacji platformy Android, która jest flashowana na urządzeniu. Plik vendor_ramdisk-DEVICE.img można zaktualizować na kilka sposobów. Użyj opcji 1, jeśli używasz Androida 15 QPR2 (BP11.241025.006) lub nowszego. W przeciwnym razie użyj opcji 2.

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

    Począwszy od wersji fastboot 35.0.2-12583183 możesz bezpośrednio flashować obraz DTB i DLKM na partycji vendor_boot. Pobierz i wyodrębnij plik sdk-repo-HOST_OS-platform-tools-12583183.zip z elementów 35.0.2-12583183, aby użyć go w środowisku maszyny hosta.

    Aby zaflashować DTB i vendor_boot:dlkm, postępuj zgodnie z instrukcjami podanymi w artykule Flashowanie obrazów jądra.

  • Opcja 2. Wyodrębnij obraz dostawcy z obrazu Pixel factory.

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

    2. 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
      
    3. Rozpakuj plik vendor_boot.img, aby uzyskać plik ramdisk dostawcy.

        KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
            --out vendor_boot_out
      
    4. 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 (niebieski) 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 android13-5.15 lub nowszą wersją jądra należy użyć Kleaf.

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ą 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ń 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 należy użyć wartości build_slider.sh w przypadku Pixela 6 i Pixela 6 Pro oraz wartości 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 w gałęziach produkcyjnych jądra skrypty build_DEVICE.sh używają gotowego 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. Gałęzie rozwojowe jądra kompilują jądro bezpośrednio ze źródła domyślnie.

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 chcesz zainstalować niestandardowe jądro na platformie, może być konieczne wyczyszczenie urządzenia, jeśli nowe jądro jest starsze pod względem 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ć komputer 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)

Jeśli w przypadku Pixela 6/6 Pro/6a pominięto pobieranie pliku vendor_ramdisk w sekcji Aktualizowanie pliku ramdisk dostawcy, zamiast flashowania obrazu vendor_boot.img użyj tego polecenia, aby zaktualizować plik ramdisk DTB i DLKM:

fastboot flash  --dtb out/DEVICE/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img

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 do portu szeregowego i chcesz włączyć dzienniki szeregowe, użyj tego polecenia:
fastboot oem uart enable
fastboot oem uart config 3000000
Przykładowe polecenie do połączenia z hosta:
screen -fn /dev/ttyUSB* 3000000

Przywracanie obrazów fabrycznych

Aby przywrócić urządzenie do ustawień fabrycznych, wejdź na stronę flash.android.com.

Starsze jądra Pixel

Poniżej znajdziesz tabelę z odpowiednimi gałęziami repozytorium jądra, która zawiera gałęzie repozytorium jądra dla urządzeń Pixel 5 i starszych. Te urządzenia nie obsługują 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 (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