Сборка ядер пикселей

В этом руководстве представлены пошаговые инструкции о том, как загрузить, скомпилировать и прошить собственное ядро ​​Pixel для разработки. Благодаря GKI теперь можно обновлять ядро ​​независимо от сборки платформы Android. Эти шаги применимы только для устройств Pixel 6 и более поздних версий. Это связано с тем, что устройства Pixel 5 и более ранние версии требуют обновления модулей ядра в разделе vendor , который зависит от сборки платформы Android для этих устройств. Таблица ветвей ядра пикселей, поддерживаемых GKI, включает ветку манифеста репозитория ядра для каждого устройства Pixel, поддерживаемого GKI. Информацию о ветвях манифеста ядра Pixel 5 и более ранних версий см. в разделе « Ядра устаревших пикселей» .

GKI поддерживает ветки ядра Pixel.
Устройство Двоичный путь в дереве AOSP Филиалы репозитория Ядро ГКИ
Pixel 9 Pro Fold (комета) устройство/google/comet-kernel android-gs-comet-6.1-android14-qpr3-d1 андроид14-6.1
Пиксель 9 (сегодня)
Pixel 9 Pro (кайман)
Pixel 9 Pro XL (Комодо)
устройство/google/caimito-kernel Android-gs-caimito-6.1-android14-qpr3-d1 андроид14-6.1
Пиксель 8а (акита) устройство/Google/akita-kernel Android-gs-akita-5.15-android14-qpr3 андроид14-5.15
Пиксель 8 (сиба)
Pixel 8 Pro (хаски)
устройство/Google/шуски-ядро android-gs-shusky-5.15-android14-qpr3 андроид14-5.15
Пиксель Фолд (Феликс) устройство/google/felix-kernel android-gs-felix-5.10-android14-qpr3 андроид13-5.10
Пиксельный планшет (тангорпро) устройство/google/tangorpro-kernel Android-gs-tangorpro-5.10-android14-qpr3 андроид13-5.10
Пиксель 7а (рысь) устройство/google/lynx-kernel Android-gs-lynx-5.10-android14-qpr3 андроид13-5.10
Пиксель 7 (пантера)
Pixel 7 Pro (гепард)
устройство/google/pantah-kernel Android-gs-pantah-5.10-android14-qpr3 андроид13-5.10
Пиксель 6а (блюджей) устройство/Google/bluejay-kernel Android-GS-bluejay-5.10-android14-qpr3 андроид13-5.10
Пиксель 6 (иволга)
Pixel 6 Pro (ворон)
устройство/google/raviole-kernel android-gs-raviole-5.10-android14-qpr3 андроид13-5.10

Помимо ядер, поддерживаемых заводом-изготовителем, устройства Pixel 6 и 6 Pro поддерживаются для целей разработки GKI только в общих ветвях ядра Android, включенных в таблицу поддерживаемых платформ Android Pixel 6/6 Pro и комбинаций ядер . Из-за различий в UAPI поставщиков между HAL платформы Android и драйверами ядра Pixel в таблице представлены поддерживаемые комбинации сборок.

Поддерживаемые комбинации платформ Android и ядер Pixel 6/6 Pro
Ветка манифеста ядра пикселя Филиал ГКИ Сборка платформы Android aosp-main поддержка?
gs-android-gs-raviole-mainline Android-основная линия ( v6.8 ) АП1А.240505.004 (11583682) Да
android14-gs-pixel-6.1 андроид14-6.1 АП1А.240505.004 (11583682) Да
gs-android13-gs-равиоль-5.15 андроид13-5.15 TQ1A.230205.002 (9471150) Нет

Подготовьте устройство Pixel

В следующей блок-схеме описан процесс обновления ядра на устройствах Pixel 6 и более поздних версий:

**Рис. 1.** Блок-схема обновления ядра

Прошить устройство с помощью flash.android.com.

  1. Перейдите на flash.android.com.
  2. Выберите сборку Android на основе поддерживаемых комбинаций платформы Android и ядра .
  3. Выберите следующие параметры:
    • Очистить устройство
    • Принудительная прошивка всех разделов
    • Отключить проверку
  4. Нажмите кнопку Установить сборку, чтобы прошить устройство.

**Рисунок 2.** Пример Flash Station

Загрузите и скомпилируйте ядро

Синхронизировать репозиторий ядра

Выполните следующие команды, чтобы загрузить исходный код ядра. См. таблицу поддерживаемых платформ Android Pixel 6/6 Pro и комбинаций ядер для Pixel KERNEL_MANIFEST_BRANCH .

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

Обновите виртуальный диск поставщика

Обновите vendor_ramdisk- DEVICE .img в репозитории ядра, чтобы он соответствовал сборке платформы Android, установленной на устройстве. Есть несколько вариантов, которым вы можете следовать.

Вариант 1) Извлечь образ виртуального диска поставщика из заводского образа Pixel .
  1. Загрузите поддерживаемый заводской образ для вашего устройства с https://developers.google.com/android/images .

  2. Извлеките vendor_boot.img :

    • В следующих командах в качестве примера используется Pixel 6 Pro AP1A.240505.004 . Замените имя zip-файла именем загруженного вами заводского образа.
      unzip raven-ap1a.240505.004-factory-9d783215.zip
    
      cd raven-ap1a.240505.004
    
      unzip image-raven-ap1a.240505.004.zip vendor_boot.img
    
  3. Распакуйте vendor_boot.img , чтобы получить виртуальный диск поставщика.

      KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
          --out vendor_boot_out
    
  4. Скопируйте извлеченный vendor-ramdisk-by-name/ramdisk_ в репозиторий ядра Pixel.

    Устройство DEVICE_RAMDISK_PATH
    Пиксель 6 (иволга)
    Pixel 6 Pro (ворон)
    пребилды/boot-artifacts/ramdisks/vendor_ramdisk- oriole.img
    Пиксель 6а (блюджей) Private/devices/google/bluejay/vendor_ramdisk- bluejay.img
      cp vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \
          KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
    
Вариант 2) Скопируйте vendor_ramdisk из локального репозитория платформы Android.
Устройство DEVICE_RAMDISK_PATH
Пиксель 6 (иволга)
Pixel 6 Pro (ворон)
пребилды/boot-artifacts/ramdisks/vendor_ramdisk- oriole.img
Пиксель 6а (блюджей) 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

Скомпилировать ядро ​​(Kleaf)

В Android 13 скрипт build.sh был заменен новой системой сборки ядра под названием Kleaf . Для устройств, использующих android13-5.15 и более поздние версии, ядро ​​должно быть собрано с использованием Kleaf.

Для Pixel 6 и 6 Pro с ядром android14 и более поздних версий запустите команду сборки Kleaf:

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

Для Pixel 6 и 6 Pro с ядрами android13-5.15 запустите команду сборки Kleaf:

tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist

Для всех остальных ядер Pixel запустите скрипт build_ DEVICE.sh расположенный в KERNEL_REPO_ROOT . Например, чтобы собрать ядро ​​для Pixel 6 на ветке android-gs-raviole-5.10-android14 , вам нужно выполнить команду:

build_slider.sh

По умолчанию сценарии build_ DEVICE .sh используют предварительно созданное ядро ​​GKI для ускорения процесса сборки. Если вы хотите изменить ядро ​​ядра, установите переменную среды BUILD_AOSP_KERNEL=1 чтобы вместо этого собрать ядро ​​из локальных источников.

Более подробную информацию о системе сборки ядра и о том, как настроить сборку, можно найти в документе Kleaf — Создание ядер Android с помощью Bazel .

Прошить образы ядра

Примечание. Если вы не отключили проверку, это необходимо сделать перед прошивкой кастомного ядра. Вот команда для этого:
fastboot oem disable-verification
ВНИМАНИЕ: Если вы прошиваете собственное ядро ​​поверх сборки платформы, вам может потребоваться стереть данные с устройства, если с новым ядром связано понижение уровня исправлений безопасности (SPL). Этот процесс удаляет все ваши личные данные. Обязательно сделайте резервную копию данных перед удалением.
fastboot -w

Чтобы прошить образы ядра, запустите команду fastboot flash для каждого раздела ядра, указанного для вашего устройства. Для динамических разделов перед прошивкой необходимо перезагрузиться в режим fastbootd .

Устройство Разделы ядра
Пиксель 6 (иволга)
Pixel 6 Pro (ворон)
Пиксель 6а (блюджей)
ботинок
дтбо
vendor_boot
vendor_dlkm (динамический раздел)
Пиксель 8 (сиба)
Pixel 8 Pro (хаски)
Пиксель Фолд (Феликс)
Пиксельный планшет (тангорпро)
Пиксель 7а (рысь)
Пиксель 7 (пантера)
Pixel 7 Pro (гепард)
ботинок
дтбо
vendor_kernel_boot
vendor_dlkm (динамический раздел)
system_dlkm (динамический раздел)

Вот команды прошивки для Pixel 6 на 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

Образы ядра можно найти в DIST_DIR .

Ветка ядра DIST_DIR
v5.10 out/mixed/dist
v5.15 и более поздние версии out/ DEVICE /dist
Примечание. Если у вас есть последовательный ключ и вы хотите включить последовательные журналы, введите команду:
fastboot oem uart enable
fastboot oem uart config 3000000
Пример команды для подключения с хоста:
screen -fn /dev/ttyUSB* 3000000

Восстановить заводские образы

Чтобы восстановить заводские образы вашего устройства, вы можете использовать flash.android.com .

Устаревшие ядра пикселей

Для справки: таблица ветвей ядра устаревшей версии Pixel содержит ветки репозитория ядра для устройств Pixel 5 и более ранних версий. Это устройства, не поддерживающие GKI.

Устаревшие ветки ядра Pixel
Устройство Двоичный путь в дереве AOSP Филиалы репозитория
Пиксель 5а (барбет)
Pixel 4a (5G) (ежевика)
Пиксель 5 (красный плавник)
устройство/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Пиксель 4а (рыба-солнечник) устройство/google/sunfish-kernel Android-MSM-Sunfish-4.14-android13-qpr3
Пиксель 4 (пламя)
Pixel 4 XL (коралловый)
устройство/Google/коралловое ядро Android-MSM-коралл-4.14-android13
Пиксель 3а (Сарго)
Pixel 3a XL (бонито)
устройство/google/bonito-kernel Android-MSM-Bonito-4.9-android12L
Пиксель 3 (синяя линия)
Pixel 3 XL (штриховка)
устройство/google/crosshatch-kernel Android-MSM-crosshatch-4.9-android12
Пиксель 2 (судак)
Pixel 2 XL (таймень)
устройство/google/wahoo-kernel Android-MSM-Wahoo-4.4-android10-qpr3
Пиксель (парусник)
Пиксель XL (марлин)
устройство/google/marlin-kernel Android-MSM-Marlin-3.18-pie-qpr2