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

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

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

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

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

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

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

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

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 , вы можете напрямую прошить DTB и DLKM ramdisk на разделе 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
      Пиксель 6 (иволга)
      Pixel 6 Pro (ворон)
      prebuilts/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 должно быть кодовым именем, которое может быть кодовым именем одного устройства, например "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

По умолчанию в производственных ветвях ядра скрипты 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_dlkm (динамический раздел)
Пиксель 8 (шиба)
Pixel 8 Pro (хриплый)
Pixel Fold (Феликс)
Планшет Pixel (tangorpro)
Пиксель 7а (рысь)
Пиксель 7 (пантера)
Pixel 7 Pro (гепард)
ботинок
дтбо
вендор_ядро_загрузки
vendor_dlkm (динамический раздел)
system_dlkm (динамический раздел)

Для Pixel 6/6 Pro/6a, если вы пропустили загрузку vendor_ramdisk в разделе Обновление vendor ramdisk , используйте следующую команду для обновления DTB и DLKM ramdisk вместо прошивки образа 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
версия 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 legacy предоставляет ветви репозитория ядра для Pixel 5 и более ранних устройств. Это устройства, не поддерживаемые GKI.

Устаревшие ветки ядра Pixel
Устройство Двоичный путь в дереве AOSP Ветви репозитория
Пиксель 5а (барбет)
Pixel 4a (5G) (ежевика)
Пиксель 5 (красноперый)
устройство/google/redbull-ядро android-msm-redbull-4.19-android14-qpr3
Пиксель 4а (солнечная рыба) устройство/google/sunfish-ядро 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-ядро android-msm-bonito-4.9-android12L
Пиксель 3 (синяя линия)
Pixel 3 XL (штриховка)
устройство/google/crosshatch-ядро android-msm-crosshatch-4.9-android12
Пиксель 2 (судак)
Pixel 2 XL (таймень)
устройство/google/wahoo-ядро android-msm-wahoo-4.4-android10-qpr3
Пиксель (парусник)
Pixel XL (марлин)
устройство/google/marlin-ядро android-msm-marlin-3.18-pie-qpr2