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

GKI obsługiwane gałęzie jądra Pixela
Urządzenie Ścieżka pliku binarnego w drzewie AOSP Gałęzie repozytorium GKI Kernel
Pixel 9 Pro Fold (kometa) device/google/comet-kernels/6.1 android-gs-comet-6.1-android15-qpr1 android15-6.1
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
device/google/caimito-kernels/6.1 android-gs-caimito-6.1-android15-qpr1 android15-6.1
Pixel 8a (akita) device/google/akita-kernels/5.15 android-gs-akita-5.15-android15-qpr1 android15-5.15
Pixel 8 (Shiba)
Pixel 8 Pro (Husky)
device/google/shusky-kernels/5.15 android-gs-shusky-5.15-android15-qpr1 android15-5.15
Pixel Fold (felix) device/google/felix-kernels/5.10 android-gs-felix-5.10-android15-qpr1 android15-5.10
Pixel Tablet (tangorpro) device/google/tangorpro-kernels/5.10 android-gs-tangorpro-5.10-android15-qpr1 android15-5.10
Pixel 7a (lynx) device/google/lynx-kernels/5.10 android-gs-lynx-5.10-android15-qpr1 android15-5.10
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
device/google/pantah-kernels/5.10 android-gs-pantah-5.10-android15-qpr1 android15-5.10
Pixel 6a (bluejay) device/google/bluejay-kernels/5.10 android-gs-bluejay-5.10-android15-qpr1 android15-5.10
Pixel 6 (pomarańczowy)
Pixel 6 Pro (czarny)
device/google/raviole-kernels/5.10 android-gs-raviole-5.10-android15-qpr1 android15-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 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 Androida aosp-main – pomoc
gs-android-gs-raviole-mainline android-mainline (6.12) BP11.241025.006 (12620009) Tak
android-gs-raviole-6.1-android15-qpr2-beta android14-6.1 BP11.241025.006 (12620009) 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 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 zaflashować 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 na Pixelu 6/6 Pro, aby dowiedzieć się, jakie wersje systemu Android i jądra są obsługiwane na urządzeniu PixelKERNEL_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. 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 v35.0.2-12583183 do środowiska maszyny hosta, aby go użyć.

    Aby zaflashować DTB i vendor_boot:dlkm, wykonaj instrukcje podane w artykule Flashowanie obrazów jądra.

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

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

    2. Wyodrębnij vendor_boot.img:

      W podanych niżej poleceniach użyto jako przykładu 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ć dysk RAM 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 (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 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ą kodu, która jest zgodna z nazwą kodu użytą w kolumnie Ścieżka binarna w drzewie AOSP w tabeli GKI obsługiwane gałęzie jądra Pixela. Może to być nazwa kodowa jednego urządzenia, np. „akita” (Pixel 8a), lub nazwa kodowa, która reprezentuje 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 na Pixelu 6 i Pixelu 6 Pro użyj wartości build_slider.sh, a na Pixelu 7 i Pixelu 7 Pro – wartości build_cloudripper.sh.

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ą wstępnie skompilowanego 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 jądra przeznaczone do rozwoju budują domyślnie źródło jądra.

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 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
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 do flashowania Pixela 6 na 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 i chcesz włączyć dzienniki szeregowe, wykonaj to polecenie:
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, możesz użyć strony flash.android.com.

Starsze jądra Pixel

Poniżej znajdziesz tabelę z odpowiednimi gałęziami repozytorium jądra, które są dostępne na Pixelu 5 i starszych urządzeniach. Te urządzenia nie obsługują GKI.

Starsze gałęzie jądra Pixel
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