Tworzenie jąder Pixel

W tym przewodniku znajdziesz szczegółowe instrukcje dotyczące 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ń. Wynika to z tego, że Pixel 5 i starsze urządzenia wymagają aktualizacji modułów jądra w partycji vendor, która jest zależna od kompilacji platformy Android na tych urządzeniach. Tabela gałęzi jądra Pixela obsługiwanych przez GKI zawiera gałąź manifestu repozytorium jądra dla każdego urządzenia Pixel obsługiwanego przez GKI. Gałęzie manifestu jądra Pixela 5 i starszych urządzeń znajdziesz w sekcji Starsze jądra Pixela.

Pixel 6 i Pixel 6 Pro są też obsługiwane w głównym jądrze Linuxa i mogą uruchamiać się w wierszu poleceń urządzenia tylko z użyciem sterowników z głównego jądra. Więcej informacji znajdziesz w artykule Kompilowanie i flashowanie głównego jądra Pixela.

Kompilowanie i flashowanie jąder Pixela GKI

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

Gałęzie jądra Pixela obsługiwane przez 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 przez producenta urządzenia Pixel 6 i 6 Pro są obsługiwane tylko na potrzeby programowania GKI w gałęziach jądra Android Common, które są uwzględnione w tabeli Obsługiwane kombinacje platformy Android i jądra na Pixelu 6 i Pixelu 6 Pro. Ze względu na różnice w UAPI dostawcy między HAL-ami 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 Pixelu 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 Pixelu 6 i nowszych urządzeniach:

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

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

  1. Otwórz stronę flash.android.com.
  2. Wybierz kompilację Androida na podstawie obsługiwanych kombinacji platformy Android i jądra.
    • W przypadku android-latest-release wybierz „Powrót do wersji publicznej”, Canary lub Beta.
  3. Wybierz te opcje:
    • Wyczyść urządzenie
    • Wymuś flashowanie wszystkich partycji
    • Wyłącz weryfikację
  4. Aby flashować urządzenie, naciśnij przycisk Zainstaluj kompilację.

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

Synchronizowanie repozytorium jądra

Aby pobrać kod źródłowy jądra, uruchom te polecenia. Gałąź KERNEL_MANIFEST_BRANCH Pixela znajdziesz w tabeli Obsługiwane kombinacje platformy Android i jądra na Pixelu 6 i Pixelu 6 Pro.KERNEL_MANIFEST_BRANCH

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

Aktualizowanie ramdysku dostawcy

Zaktualizuj plik vendor_ramdisk-DEVICE.img w repozytorium jądra, aby pasował do kompilacji platformy Android, która jest flashowana na urządzeniu. Istnieje kilka sposobów aktualizacji pliku vendor_ramdisk-DEVICE.img. Jeśli używasz Androida 15 QPR2 (BP11.241025.006) lub nowszego, użyj opcji 1. W przeciwnym razie użyj opcji 2.

  • Opcja 1. Aktualizowanie tylko bitów DTB i DLKM ramdysku partycji vendor_boot

    Od wersji fastboot 35.0.2-12583183 możesz bezpośrednio flashować DTB i DLKM ramdysk na partycji vendor_boot. Aby użyć 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 flashowania DTB i vendor_boot:dlkm w sekcji Flashowanie obrazów jądra.

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

    1. Pobierz obsługiwany obraz fabryczny na swoje urządzenie ze strony https://developers.google.com/android/images.

    2. Wyodrębnij plik vendor_boot.img:

      W tych poleceniach jako przykład używamy Pixela 6 Pro 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 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 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 android13-5.15 i nowszymi, jądro należy kompilować za pomocą Kleaf.

Dla wygody możesz uruchomić build_DEVICE.sh skrypt, który znajduje się w KERNEL_REPO_ROOT. W większości przypadków DEVICE musi być kryptonimem, który może być kryptonimem jednego urządzenia, np. „akita” (Pixel 8a), lub kryptonimem reprezentującym grupę powiązanych urządzeń, które mają wspólne jądro systemu (operacyjnego), np. „caimito”, która oznacza Pixela 9 (tokay), Pixela 9 Pro (caiman) i Pixela 9 Pro XL (komodo). W przypadku android14 i starszych wersji użyj skryptu build_slider.sh w przypadku Pixela 6 i Pixela 6 Pro oraz skryptu build_cloudripper.sh w przypadku Pixela 7 i Pixela 7 Pro.

Aby na przykład skompilować jądro Pixela 6 w gałęzi android-gs-raviole-5.10-android14, uruchom to polecenie:

build_slider.sh

Domyślnie w gałęziach jądra produkcyjnego skrypty build_DEVICE.sh używają wstępnie skompilowanego jądra GKI aby przyspieszyć proces kompilacji. Jeśli chcesz zmodyfikować jądro główne, ustaw zmienną środowiskową BUILD_AOSP_KERNEL=1, aby skompilować jądro ze źródeł lokalnych. Gałęzie jądra programistycznego domyślnie kompilują źródło jądra.

Więcej informacji o systemie kompilacji jądra i o tym, jak dostosować kompilację, znajdziesz w artykule Kleaf – kompilowanie jąder Androida za pomocą Bazela.

Flashowanie obrazów jądra

Uwaga: jeśli nie wyłączysz weryfikacji, musisz to zrobić przed flashowaniem niestandardowego jądra. Aby to zrobić, użyj tego polecenia:
fastboot oem disable-verification
OSTRZEŻENIE: jeśli flashujesz niestandardowe jądro na kompilacji platformy, może być konieczne wyczyszczenie urządzenia, jeśli nowemu jądru towarzyszy obniżenie poziomu poprawek zabezpieczeń (SPL). Ten proces spowoduje usunięcie wszystkich danych osobowych. Przed wyczyszczeniem urządzenia utwórz kopię zapasową danych.
fastboot -w

Aby flashować obrazy jądra, uruchom polecenie fastboot flash dla każdej partycji jądra wymienionej w przypadku Twojego urządzenia. W przypadku partycji dynamicznych przed flashowaniem 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 (partycja dynamiczna)
system_dlkm (partycja dynamiczna)

Oto polecenia flashowania Pixela 6 w gałęzi 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 i Pixela 6a zaktualizujesz vendor_ramdisk w Aktualizowanie ramdysku 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
v5.10 out/mixed/dist
v5.15 i nowsze out/DEVICE/dist
Uwaga: jeśli masz klucz sprzętowy do portu szeregowego i chcesz włączyć logi szeregowe, użyj tego polecenia:
fastboot oem uart enable
fastboot oem uart config 3000000
Przykładowe polecenie 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ć flash.android.com.

Kompilowanie i flashowanie głównego jądra Pixela

Ponieważ Pixel 6 i Pixel 6 Pro są obsługiwane w głównym jądrze Linuxa, możesz użyć gałęzi android-mainline tylko ze sterownikami z głównego jądra, aby uruchomić wiersz poleceń urządzenia na potrzeby programowania jądra. W tej sekcji znajdziesz instrukcje synchronizowania, kompilowania i flashowania jądra Pixela 6 i Pixela 6 Pro z gałęzi android-mainline.

Aby rozpocząć, wykonaj te czynności.

  1. Przygotuj urządzenie, wykonując czynności opisane w sekcji Przygotowywanie urządzenia Pixel.
  2. Zsynchronizuj gałąź manifestu jądra common-android-mainline , wykonując czynności opisane w sekcji Synchronizowanie repozytorium jądra.
  3. Konfiguracja docelowa kompilacji Kleaf jest zdefiniowana w ścieżce KERNEL_REPO_ROOT/devices/google/raviole. Aby skompilować docelową kompilację 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 podczas flashowania niestandardowego jądra na obrazach fabrycznych Androida. Więcej informacji znajdziesz w uwagach w sekcji Flashowanie obrazów jądra.

  5. W trybie fastboot uruchom te polecenia, aby flashować 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ń powłoki urządzenia, możesz ponownie uruchomić urządzenie w trybie przywracania (Recovery Mode), uruchamiając to 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 jądra Pixela

Tabela gałęzi starszych jąder Pixela zawiera gałęzie repozytorium jądra dla Pixela 5 i starszych urządzeń. Są to urządzenia nieobsługiwane przez GKI.

Gałęzie starszych jąder 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 (flame)
Pixel 4 XL (coral)
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