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

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

Pixel 6 и Pixel 6 Pro также поддерживаются в ядре Linux, разработанном разработчиками, и могут загружаться в командную строку устройства только с драйверами из этого ядра. Более подробную информацию см. в разделе «Сборка и прошивка ядра Pixel из этого ядра» .

Соберите и прошейте ядра GKI Pixel.

В этом разделе описаны шаги по синхронизации, сборке и прошивке поддерживаемых GKI веток ядра. В следующей таблице приведено соответствие поддерживаемых устройств Pixel и соответствующих им веток репозитория ядра, используемых в производственной среде.

Ветви ядра Pixel, поддерживаемые GKI

Устройство Отделения хранилища Ядро 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 (кайман)
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 (Tangorpro) android-gs-tangorpro-6.1-android16 android14-6.1
Pixel 7a (lynx) android-gs-lynx-6.1-android16 android14-6.1
Pixel 7 (пантера)
Pixel 7 Pro (гепард)
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-равиоле-6.1-android16 android14-6.1

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

Поддерживаемые комбинации платформы Android и ядра для Pixel 6 и Pixel 6 Pro.
Ветка манифеста пиксельного ядра Филиал ГКИ Сборка платформы 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)

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

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

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

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

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

**Рисунок 2.** Пример станции для мгновенного вспучивания.

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

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

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 . Для использования этой опции обновите ваши инструменты платформы Android до версии 36.0.0 или новее . Для этого выполните следующую команду:

    $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools"
    

    Следуйте инструкциям по прошивке 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
      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
      

Скомпилируйте ядро.

В 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

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

Для получения более подробной информации о системе сборки ядра и способах ее настройки обратитесь к статье Kleaf - Building Android Kernels with Bazel .

Прошейте образы ядра

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

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

Устройство Разделы ядра
Pixel 6 (oriole)
Pixel 6 Pro (Raven)
Pixel 6a (bluejay)
ботинок
dtbo
vendor_boot или vendor_boot:dlkm
vendor_dlkm (динамический раздел)
Пиксель 9 (тегу)
Pixel 9 Pro Fold (Comet)
Pixel 9 (tokay)
Pixel 9 Pro (кайман)
Pixel 9 Pro XL (komodo)
Pixel 8 (shiba)
Pixel 8 Pro (husky)
Pixel Fold (felix)
Планшет Pixel (Tangorpro)
Pixel 7a (lynx)
Pixel 7 (пантера)
Pixel 7 Pro (гепард)
ботинок
dtbo
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, Pixel 6 Pro и Pixel 6a, если вы обновляли раздел vendor_ramdisk в разделе «Обновление раздела vendor_ramdisk» , то вместо этого используйте следующую команду для обновления раздела vendor_boot :

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

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

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

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

Для восстановления заводских настроек устройства можно использовать flash.android.com .

Соберите и прошейте ядро ​​Pixel из основного репозитория.

Поскольку Pixel 6 и Pixel 6 Pro поддерживаются в основном ядре Linux, вы можете использовать android-mainline только с драйверами из основного ядра для загрузки в командную строку устройства для разработки ядра. В этом разделе описаны шаги по синхронизации, сборке и прошивке ядра Pixel 6 и Pixel 6 Pro из android-mainline .

Для начала выполните следующие шаги.

  1. Подготовьте устройство, следуя инструкциям в разделе «Подготовка устройства Pixel».
  2. Синхронизируйте ветку манифеста ядра common-android-mainline , выполнив действия, описанные в разделе «Синхронизация репозитория ядра» .
  3. Конфигурация целевой задачи сборки Kleaf определяется по пути KERNEL_REPO_ROOT /devices/google/raviole . Для компиляции целевой задачи сборки raviole_upstream выполните команду Kleaf:

    tools/bazel run //devices/google/raviole:raviole_upstream_dist
    
  4. Аналогично серийным ядрам, при прошивке пользовательского ядра поверх заводских образов Android отключите проверку и очистите устройство. Более подробную информацию см. в примечаниях к разделу «Прошивка образов ядра» .

  5. В режиме fastboot выполните следующие команды для прошивки образов ядра:

    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. Для доступа к командной строке устройства можно перезагрузиться в режим восстановления, выполнив команду:

    fastboot reboot recovery
    

    Откройте оболочку устройства, выполнив команду adb shell . Также можно использовать root-доступ, выполнив команду adb root .

Устаревшие ядра Pixel

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

Устаревшие ветви ядра Pixel
Устройство Бинарные пути в дереве AOSP Отделения хранилища
Пиксель 5a (барбет)
Pixel 4a (5G) (bramble)
Pixel 5 (redfin)
device/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Pixel 4a (рыбий глаз) device/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Пиксель 4 (пламя)
Pixel 4 XL (коралловый)
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 (штриховка)
device/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Пиксель 2 (судак)
Pixel 2 XL (Таймэнь)
device/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Пиксель (парусник)
Pixel XL (marlin)
device/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2