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

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

Поддерживаемые GKI ветви ядра Pixel
Устройство Ветви репозитория Ядро GKI
Пиксель 9а (тегу) android-gs-tegu-6.1-android16 андроид14-6.1
Pixel 9 Pro Fold (комета) android-gs-comet-6.1-android16 андроид14-6.1
Pixel 9 (токей)
Pixel 9 Pro (кайман)
Pixel 9 Pro XL (Комодо)
Android-GS-caimito-6.1-android16 андроид14-6.1
Pixel 8a (акита) android-gs-akita-6.1-android16 андроид14-6.1
Pixel 8 (шиба)
Pixel 8 Pro (хаски)
android-gs-shusky-6.1-android16 андроид14-6.1
Pixel Fold (Феликс) android-gs-felix-6.1-android16 андроид14-6.1
Pixel Tablet (tangorpro) android-gs-tangorpro-6.1-android16 андроид14-6.1
Пиксель 7а (рысь) android-gs-lynx-6.1-android16 андроид14-6.1
Pixel 7 (пантера)
Pixel 7 Pro (гепард)
Android-GS-Pantah-6.1-android16 андроид14-6.1
Pixel 6a (голубая сойка) android-gs-bluejay-6.1-android16 андроид14-6.1
Pixel 6 (Иволга)
Pixel 6 Pro (ворон)
Android-GS-равиоле-6.1-android16 андроид14-6.1

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

Поддерживаемые комбинации платформ Android и ядер Pixel 6/6 Pro
Ветка манифеста ядра пикселя Филиал ГКИ Сборка платформы Android
gs-android-gs-raviole-mainline android-mainline android-latest-release
android16-6.12-gs101 андроид16-6.12 android-latest-release
gs-android13-gs-raviole-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.** Пример станции вспышки

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

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

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

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

Обновите ramdisk поставщика

Обновите файл vendor_ramdisk- DEVICE .img в репозитории ядра, чтобы он соответствовал сборке платформы Android, установленной на устройстве. Существует несколько вариантов обновления файла vendor_ramdisk- DEVICE .img . Используйте вариант (1), если вы используете Android 15 QPR2 (BP11.241025.006) или более позднюю версию. В противном случае используйте вариант (2).

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

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

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

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

        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
      Pixel 6 (Иволга)
      Pixel 6 Pro (ворон)
      prebuilts/boot-artifacts/ramdisks/vendor_ramdisk -oriole.img
      Pixel 6a (голубая сойка) 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.

Для удобства вы можете запустить скрипт build_ DEVICE .sh находящийся в KERNEL_REPO_ROOT . В большинстве случаев DEVICE — это кодовое имя, которое может быть кодовым именем одного устройства, например, «akita» (Pixel 8a), или кодовым именем, представляющим группу связанных устройств с общим ядром, например, «caimito», что означает Pixel 9 (tokay), Pixel 9 Pro (caiman) и Pixel 9 Pro XL (komodo). Для 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

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

Более подробную информацию о системе сборки ядра и о том, как настроить сборку, можно найти в статье Kleaf - Building Android Kernels with Bazel .

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

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

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

Устройство Разделы ядра
Pixel 6 (Иволга)
Pixel 6 Pro (ворон)
Pixel 6a (голубая сойка)
ботинок
дтбо
vendor_boot или vendor_boot:dlkm
vendor_dlkm (динамический раздел)
Pixel 8 (шиба)
Pixel 8 Pro (хаски)
Pixel Fold (Феликс)
Pixel Tablet (tangorpro)
Пиксель 7а (рысь)
Pixel 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  --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

Для Pixel 6/6 Pro/6a, если вы обновили vendor_ramdisk в разделе Обновление vendor ramdisk , то вместо этого используйте следующую команду для обновления раздела vendor_boot :

fastboot flash vendor_boot out/slider/dist/vendor_boot.img

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

Ветка ядра DIST_DIR
версия 5.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 содержит ветви репозитория ядра для устройств Pixel 5 и более ранних моделей. Эти устройства не поддерживаются GKI.

Устаревшие ветки ядра Pixel
Устройство Двоичный путь в дереве AOSP Ветви репозитория
Пиксель 5а (барбет)
Pixel 4a (5G) (ежовник)
Pixel 5 (красноплавник)
устройство/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Pixel 4a (солнечная рыба) устройство/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Пиксель 4 (пламя)
Pixel 4 XL (коралловый)
устройство/google/coral-kernel android-msm-coral-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
Пиксель (парусник)
Pixel XL (марлин)
устройство/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2