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

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

GKI поддерживает ветки ядра Pixel.
Устройство Двоичный путь в дереве AOSP Филиалы репозитория Ядро ГКИ
Pixel 9 Pro Fold (комета) устройство/google/comet-kernels/6.1 Android-gs-comet-6.1-android15-qpr1 андроид15-6.1
Пиксель 9 (сегодня)
Pixel 9 Pro (кайман)
Pixel 9 Pro XL (Комодо)
устройство/google/caimito-kernels/6.1 Android-gs-caimito-6.1-android15-qpr1 андроид15-6.1
Пиксель 8а (акита) устройство/google/akita-kernels/5.15 Android-gs-akita-5.15-android15-qpr1 андроид15-5.15
Пиксель 8 (сиба)
Pixel 8 Pro (хаски)
устройство/google/shusky-kernels/5.15 android-gs-shusky-5.15-android15-qpr1 андроид15-5.15
Пиксель Фолд (Феликс) устройство/google/felix-kernels/5.10 android-gs-felix-5.10-android15-qpr1 андроид15-5.10
Пиксельный планшет (тангорпро) устройство/google/tangorpro-kernels/5.10 Android-gs-tangorpro-5.10-android15-qpr1 андроид15-5.10
Пиксель 7а (рысь) устройство/google/lynx-kernels/5.10 Android-gs-lynx-5.10-android15-qpr1 андроид15-5.10
Пиксель 7 (пантера)
Pixel 7 Pro (гепард)
устройство/google/pantah-kernels/5.10 Android-gs-pantah-5.10-android15-qpr1 андроид15-5.10
Пиксель 6а (блюджей) устройство/google/bluejay-kernels/5.10 Android-GS-bluejay-5.10-android15-qpr1 андроид15-5.10
Пиксель 6 (иволга)
Pixel 6 Pro (ворон)
устройство/google/raviole-kernels/5.10 android-gs-raviole-5.10-android15-qpr1 андроид15-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.12 ) БП11.241025.006 (12620009) Да
android-gs-raviole-6.1-android15-qpr2-beta андроид14-6.1 БП11.241025.006 (12620009) Да
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, установленной на устройстве. Есть несколько вариантов обновления vendor_ramdisk- DEVICE .img . Используйте вариант (1), если вы используете Android 15 QPR2 (BP11.241025.006) или более позднюю версию. В противном случае используйте вариант (2).

  • Вариант 1) Обновите только биты виртуального диска DTB и DLKM разделаvendor_boot.

    Начиная с версии fastboot 35.0.2-12583183 , вы можете напрямую прошивать виртуальный диск DTB и DLKM в vendor_boot . Загрузите и извлеките sdk-repo- HOST_OS -platform-tools-12583183.zip из артефактов v35.0.2-12583183 в среду вашего хост-компьютера для дальнейшего использования.

    Следуйте инструкциям по прошивке DTB vendor_boot:dlkm в образах ядра .

  • Вариант 2) Извлечь образ виртуального диска поставщика из заводского образа 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
      

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

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

Для 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 . В большинстве случаев DEVICE должно быть кодовым именем, совпадающим с кодовым именем, используемым в столбце «Двоичный путь в дереве AOSP» таблицы «Ветви ядра пикселей, поддерживаемые GKI» . Это может быть кодовое имя одного устройства, например «akita» (Pixel 8a), или кодовое имя, обозначающее группу связанных устройств с общим ядром, например «caimito», что означает Pixel 9 (токай), Pixel 9 Pro (кайман) и Pixel 9 Pro XL (комодо). Для android14 и более ранних версий используйте build_slider.sh для Pixel 6 и Pixel 6 Pro и build_cloudripper.sh для Pixel 7 и Pixel 7 Pro.

Например, чтобы собрать ядро ​​для 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/6 Pro/6a, если вы пропустили загрузку vendor_ramdisk в разделе «Обновление виртуального диска поставщика» , используйте следующую команду для обновления виртуального диска DTB и DLKM вместо прошивки vendor_boot.img :

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

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