Zbuduj jądra Pixela

Ten przewodnik zawiera instrukcje krok po kroku dotyczące pobierania, kompilowania i flashowania niestandardowego jądra Pixela na potrzeby programowania. Dzięki GKI możliwa jest teraz aktualizacja jądra niezależnie od wersji platformy Android. Te kroki dotyczą tylko urządzeń Pixel 6 i nowszych. Dzieje się tak, ponieważ urządzenia Pixel 5 i starsze wymagają aktualizacji modułów jądra na partycji vendor , co zależy od wersji platformy Android dla tych urządzeń. Tabela rozgałęzień jądra pikseli obsługiwanych przez GKI zawiera gałąź manifestu repozytorium jądra dla każdego urządzenia Pixel obsługiwanego przez GKI. Aby zapoznać się z gałęziami manifestu jądra Pixela 5 i wcześniejszych wersji, zapoznaj się z sekcją Starsze jądra pikseli .

GKI obsługiwało gałęzie jądra Pixel
Urządzenie Ścieżka binarna w drzewie AOSP Gałęzie repozytorium Jądro GKI
Piksel 8 (shiba)
Pixel 8 Pro (husky)
urządzenie/google/shusky-kernel android-gs-shusky-5.15-android14-d1 Android14-5.15
Składanie pikseli (Felix) urządzenie/google/felix-kernel android-gs-felix-5.10-android14 android13-5.10
Tablet pikselowy (tangorpro) urządzenie/google/tangorpro-kernel android-gs-tangorpro-5.10-android14 android13-5.10
Pixel 7a (ryś) urządzenie/google/lynx-kernel android-gs-lynx-5.10-android14 android13-5.10
Pixel 7 (pantera)
Pixel 7 Pro (gepard)
urządzenie/google/pantah-kernel android-gs-pantah-5.10-android14 Android13-5.10
Piksel 6a (Bluejay) urządzenie/google/bluejay-kernel android-gs-bluejay-5.10-android14 android13-5.10
Pixel 6 (wilga)
Pixel 6 Pro (kruk)
urządzenie/google/raviole-kernel android-gs-raviole-5.10-android14 android13-5.10

Oprócz fabrycznie obsługiwanych jąder urządzenia Pixel 6 i 6 Pro są obsługiwane na potrzeby programowania GKI tylko w gałęziach jądra Android Common uwzględnionych w tabeli Obsługiwane platformy Android i kombinacje jądra Pixel 6/6 Pro . Ze względu na różnice w interfejsie UAPI dostawców między pakietami HAL i sterownikami jądra Pixel dla platformy Android, tabela zawiera obsługiwane kombinacje kompilacji.

Obsługiwane kombinacje platformy i jądra Androida Pixel 6/6 Pro
Oddział manifestu jądra pikseli Oddział GKI Kompilacja platformy Android aosp-main support?
gs-android-gs-raviole-mainline Android-mainline ( znacznik v6.7 ) UP1A.231005.007.A1 (10762838) Tak
android14-gs-pixel-6.1 Android14-6.1 UP1A.231005.007.A1 (10762838) Tak
gs-android13-gs-raviole-5.15 Android13-5.15 TQ1A.230205.002 (9471150) NIE

Przygotuj urządzenie Pixel

Poniższy schemat opisuje proces aktualizacji jądra na urządzeniach Pixel 6 i nowszych:

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

Zflashuj urządzenie za pomocą witryny flash.android.com

  1. Przejdź do witryny flash.android.com
  2. Wybierz wersję Androida w oparciu o obsługiwane kombinacje platformy Android i jądra .
  3. Wybierz następujące opcje:
    • Wyczyść urządzenie
    • Wymuś flashowanie wszystkich partycji
    • Wyłącz weryfikację
  4. Naciśnij przycisk Zainstaluj kompilację , aby sflashować urządzenie.

**Rysunek 2.** Przykład Flash Station

Pobierz i skompiluj jądro

Zsynchronizuj repozytorium jądra

Uruchom następujące polecenia, aby pobrać kod źródłowy jądra. Zapoznaj się z tabelą obsługiwanych platform Android i kombinacji jądra Pixel 6/6 Pro dla Pixel KERNEL_MANIFEST_BRANCH .

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

Zaktualizuj ramdysk dostawcy

Zaktualizuj plik vendor_ramdisk- DEVICE .img w repozytorium jądra, aby był zgodny z wersją platformy Android wgraną na urządzeniu. Istnieje kilka opcji, które możesz zastosować.

Opcja 1) Wyodrębnij obraz dysku RAM dostawcy z obrazu fabrycznego Pixela .
  1. Pobierz obsługiwany obraz fabryczny swojego urządzenia ze strony https://developers.google.com/android/images.

  2. Wyodrębnij plik vendor_boot.img :

    • Poniższe polecenia wykorzystują przykład Pixel 6 Pro UP1A.231005.007.a1 . Zastąp nazwę pliku zip nazwą pliku pobranego obrazu fabrycznego.
      unzip raven-up1a.231005.007.a1-factory-5d927f3e.zip
    
      cd raven-up1a.231005.007.a1
    
      unzip image-raven-up1a.231005.007.a1.zip vendor_boot.img
    
  3. Rozpakuj plik vendor_boot.img aby uzyskać ramdysk dostawcy.

      KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
          --out vendor_boot_out
    
  4. Skopiuj wyodrębniony plik ramdisk_ do repozytorium jądra Pixel.

    Urządzenie DEVICE_RAMDISK_PATH
    Pixel 6 (wilga)
    Pixel 6 Pro (kruk)
    prebuilts/boot-artifacts/ramdisks/vendor_ramdisk- oriole.img
    Piksel 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 lokalnie zbudowanego repozytorium platformy Android.
Urządzenie DEVICE_RAMDISK_PATH
Pixel 6 (wilga)
Pixel 6 Pro (kruk)
prebuilts/boot-artifacts/ramdisks/vendor_ramdisk- oriole.img
Piksel 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

Skompiluj jądro (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 android13-5.15 i nowszych, jądro powinno zostać zbudowane przy użyciu Kleafa.

W przypadku Pixela 6 i 6 Pro z jądrem android14 i nowszym uruchom polecenie kompilacji Kleaf:

tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist

W przypadku Pixela 6 i 6 Pro z jądrem android13-5.15 uruchom polecenie kompilacji 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 znajdujący się w KERNEL_REPO_ROOT . Na przykład, aby zbudować jądro dla Pixela 6 w gałęzi android-gs-raviole-5.10-android14 , uruchom komendę:

build_slider.sh

Domyślnie skrypty build_ DEVICE .sh korzystają z prekompilowanego jądra GKI, aby przyspieszyć proces kompilacji. Jeśli chcesz zmodyfikować jądro rdzenia, ustaw zmienną środowiskową BUILD_AOSP_KERNEL=1 aby zamiast tego zbudować jądro ze źródeł lokalnych.

Więcej szczegółów na temat systemu kompilacji jądra i sposobów dostosowywania kompilacji można znaleźć w dokumentacji Kleafa .

Flashuj obrazy jądra

Uwaga: Jeśli nie wyłączyłeś weryfikacji, musisz to zrobić przed flashowaniem niestandardowego jądra. Oto polecenie, aby to zrobić:
fastboot oem disable-verification
OSTRZEŻENIE: Jeśli flashujesz 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 poprawki zabezpieczeń (SPL). Ten proces usuwa wszystkie Twoje dane osobowe. Przed wyczyszczeniem pamiętaj o utworzeniu kopii zapasowej danych.
fastboot -w

Aby sflashować obrazy jądra, uruchom polecenie fastboot flash dla każdej partycji jądra wymienionej dla twojego urządzenia. W przypadku partycji dynamicznych przed flashowaniem należy ponownie uruchomić komputer w trybie fastbootd .

Urządzenie Partycje jądra
Pixel 6 (wilga)
Pixel 6 Pro (kruk)
Piksel 6a (Bluejay)
uruchomić
dtbo
sprzedawca_boot
sprzedawca_dlkm (partycja dynamiczna)
Piksel 8 (shiba)
Pixel 8 Pro (husky)
Składanie pikseli (Felix)
Tablet pikselowy (tangorpro)
Pixel 7a (ryś)
Pixel 7 (pantera)
Pixel 7 Pro (gepard)
uruchomić
dtbo
dostawca_kernel_boot
sprzedawca_dlkm (partycja dynamiczna)
system_dlkm (partycja dynamiczna)

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 vendor_boot out/slider/dist/vendor_boot.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img

Obrazy jądra można znaleźć 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 posiadasz klucz sprzętowy szeregowy i chcesz włączyć dzienniki szeregowe, poleceniem jest:
fastboot oem uart enable
fastboot oem uart config 3000000
Przykładowe polecenie umożliwiające połączenie z hosta:
screen -fn /dev/ttyUSB* 3000000

Przywróć obrazy fabryczne

Aby przywrócić urządzenie do stanu fabrycznego, możesz skorzystać z witryny flash.android.com .

Starsze jądra Pixela

Dla porównania, tabela rozgałęzień jądra starszego Pixela zawiera gałęzie repozytorium jądra dla urządzeń Pixel 5 i wcześniejszych. Są to urządzenia nieobsługiwane przez GKI.

Starsze gałęzie jądra Pixela
Urządzenie Ścieżka binarna w drzewie AOSP Gałęzie repozytorium
Pixel 5a (barbet)
Pixel 4a (5G) (jeżyna)
Piksel 5 (czerwony)
urządzenie/google/jądro-redbull android-msm-redbull-4.19-android14
Pixel 4a (samogłów) urządzenie/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Piksel 4 (płomień)
Pixel 4 XL (koralowy)
urządzenie/google/koral-jądro android-msm-coral-4.14-android13
Pixel 3a (żart)
Pixel 3a XL (bonito)
urządzenie/google/bonito-jądro android-msm-bonito-4.9-android12L
Piksel 3 (niebieska linia)
Pixel 3 XL (kreskowanie)
urządzenie/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Pixel 2 (walleye)
Pixel 2 XL (taimen)
urządzenie/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Piksel (żaglica)
Pixel XL (marlin)
urządzenie/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2