Como criar kernels do Pixel

Visão geral

Este guia fornece instruções detalhadas sobre como fazer o download, compilar e atualizar um kernel de Pixel personalizado para desenvolvimento. Devido à GKI, agora é possível atualizar o kernel em qualquer build da plataforma Android. Estas etapas são relevantes apenas para dispositivos Pixel 6 e mais recentes. Isso porque o Pixel 5 e dispositivos anteriores exigem atualização dos módulos do kernel na partição vendor, que depende do build da plataforma Android para esses dispositivos. A tabela Ramificações de kernel de Pixel com suporte de GKI inclui a ramificação do manifesto do repositório do kernel para cada dispositivo Pixel com suporte a GKI. Consulte a seção Kernels legados do Pixel para conferir as ramificações do manifesto do kernel do Pixel 5 e versões anteriores.

Ramificações de kernel de Pixel com suporte de GKI
Dispositivo Caminho do binário na árvore AOSP Ramificações do repositório Kernel de GKI
Pixel 8 (shiba)
Pixel 8 Pro (husky)
device/google/shusky-kernel android-gs-shusky-5.15-android14-d1 android14-5.15
Pixel Fold (felix) device/google/felix-kernel android-gs-felix-5.10-android14 android13-5.10
Pixel Tablet (tangorpro) device/google/tangorpro-kernel android-gs-tangorpro-5.10-android14 android13-5.10
Pixel 7a (lynx) device/google/lynx-kernel android-gs-lynx-5.10-android14 android13-5.10
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
device/google/pantah-kernel android-gs-pantah-5.10-android14 android13-5.10
Pixel 6a (bluejay) device/google/bluejay-kernel android-gs-bluejay-5.10-android14 android13-5.10
Pixel 6 (oriole)
Pixel 6 Pro (raven)
device/google/raviole-kernel android-gs-raviole-5.10-android14 android13-5.10

Além dos kernels com suporte de fábrica, os dispositivos Pixel 6 e 6 Pro podem ser usados apenas para fins de desenvolvimento de GKI nas ramificações do kernel comum do Android incluídas na tabela Combinações de plataforma Android do Pixel 6/6 Pro e kernel com suporte. Devido a diferenças de fornecedor UAPI entre as HALs da plataforma Android e os drivers do kernel de Pixel, a tabela fornece as combinações de build com suporte.

Combinações de plataforma Android do Pixel 6/6 Pro e kernel com suporte
Ramificação de manifesto do kernel do Pixel Ramificação de GKI Build da plataforma Android Suporte a aosp-main?
gs-android-gs-raviole-mainline android-mainline (tag v6.7) UP1A.231005.007.A1 (10762838) Sim
android14-gs-pixel-6.1 android14-6.1 UP1A.231005.007.A1 (10762838) Sim
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150) Não

Preparar o dispositivo Pixel

O fluxograma a seguir descreve o processo de atualização do kernel no Pixel 6 e em dispositivos mais recentes:

**Figura 1.** Fluxograma de atualização do kernel

Atualizar o dispositivo em flash.android.com

  1. Acesse flash.android.com.
  2. Escolha o build do Android com base nas combinações de plataforma Android e de kernel com suporte.
  3. Selecione as seguintes opções:
    • Excluir o dispositivo permanentemente
    • Forçar a atualização de todas as partições
    • Desativar a verificação
  4. Pressione o botão Instalar build para atualizar o dispositivo.

**Figura 2.** Exemplo de atualização da estação

Fazer o download e compilar o kernel

Sincronizar o repositório do kernel

Execute os seguintes comandos para fazer o download do código-fonte do kernel. Consulte a tabela Combinações de plataforma Android do Pixel 6/6 Pro e kernel com suporte para o KERNEL_MANIFEST_BRANCH do Pixel.

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

Atualizar o ramdisk do fornecedor

Atualize o arquivo vendor_ramdisk-DEVICE.img no repositório do kernel para que ele corresponda ao build da plataforma Android que está atualizado no dispositivo. Existem algumas opções que você pode seguir.

Opção 1: extrair a imagem do ramdisk do fornecedor da imagem de fábrica do Pixel
  1. Faça o download da imagem de fábrica com suporte do seu dispositivo em https://developers.google.com/android/images.

  2. Extraia a vendor_boot.img:

    • Os comandos a seguir usam o UP1A.231005.007.a1 do Pixel 6 Pro como exemplo. Substitua o nome do arquivo ZIP pelo nome do arquivo da imagem de fábrica que você transferiu por download.
      unzip raven-up1a.231005.007.a1-factory-5d927f3e.zip
    
      cd raven-up1a.231005.007.a1
    
      unzip image-raven-up1a.231005.007.a1.zip vendor_boot.img
    
  3. Descompacte a vendor_boot.img para acessar o ramdisk do fornecedor.

      KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
          --out vendor_boot_out
    
  4. Copie o arquivo ramdisk_ para o repositório do kernel do Pixel.

    Dispositivo 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
    
Opção 2: copiar o vendor_ramdisk de um repositório da plataforma Android criado localmente
Dispositivo 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 ANDROID_ROOT/out/target/product/DEVICE/vendor_ramdisk-debug.img \
   KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH/vendor_ramdisk-DEVICE.img

Compilar o kernel (Kleaf)

No Android 13, o script build.sh foi substituído por um novo sistema de build de kernel, chamado Kleaf. Para dispositivos que usam o android13-5.15 e versões mais recentes, o kernel precisa ser criado com o Kleaf.

Para o Pixel 6 e 6 Pro com kernels android14 e versões mais recentes, execute o comando de build do Kleaf:

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

Para o Pixel 6 e 6 Pro com kernels android13-5.15, execute o comando de build do Kleaf:

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

Para todos os outros kernels de Pixel, execute o script build_DEVICE.sh encontrado em KERNEL_REPO_ROOT. Por exemplo, para criar o kernel para Pixel 6 na ramificação android-gs-raviole-5.10-android14, você executaria o comando:

build_slider.sh

Por padrão, os scripts build_DEVICE.sh usam o kernel de GKI pré-criado para acelerar o processo de build. Se você quiser modificar o kernel principal, defina a variável de ambiente BUILD_AOSP_KERNEL=1 para criar o kernel usando as origens locais.

Para mais detalhes sobre o sistema de build do kernel e como personalizar o build, consulte a documentação do Kleaf.

Atualizar as imagens de kernel

Observação: se você não desativou a verificação, precisa fazer isso antes de atualizar o kernel personalizado. Este é o comando para fazer isso:
fastboot oem disable-verification
ALERTA: caso você esteja atualizando um kernel personalizado sobre um build de plataforma, talvez seja necessário excluir permanentemente os dados do seu dispositivo se houver um downgrade no nível do patch de segurança (SPL, na sigla em inglês) associado ao novo kernel. Este processo apaga todos os seus dados pessoais. Faça backup dos seus dados antes dessa exclusão permanente.
fastboot -w

Atualize as imagens do kernel executando o comando fastboot flash para cada partição de kernel listada para o seu dispositivo. Para partições dinâmicas, é necessário reinicializar no modo fastbootd antes da atualização.

Dispositivo Partições de kernel
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot
vendor_dlkm (dynamic partition)
Pixel 8 (shiba)
Pixel 8 Pro (husky)
Pixel Fold (felix)
Pixel Tablet (tangorpro)
Pixel 7a (lynx)
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
boot
dtbo
vendor_kernel_boot
vendor_dlkm (dynamic partition)
system_dlkm (dynamic partition)

Estes são os comandos de atualização para o Pixel 6 em 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

As imagens de kernel estão disponíveis no DIST_DIR.

Ramificação do kernel DIST_DIR
v5.10 out/mixed/dist
v5.15 e mais recentes out/DEVICE/dist
Observação: se você tem um dongle serial e quer ativar os registros seriais, o comando é este:
fastboot oem uart enable
fastboot oem uart config 3000000
Exemplo de comando para se conectar usando um host:
screen -fn /dev/ttyUSB* 3000000

Restaurar as imagens de fábrica

Para restaurar seu dispositivo para as imagens de fábrica, você pode usar flash.android.com.

Kernels legados do Pixel

Como referência, a tabela Ramificações de kernels legados do Pixel fornece as ramificações do repositório do kernel para dispositivos Pixel 5 e anteriores. Esses são dispositivos sem suporte à GKI.

Ramificações de kernels legados do Pixel
Dispositivo Caminho do binário na árvore AOSP Ramificações do repositório
Pixel 5a (barbet)
Pixel 4a (5G) (bramble)
Pixel 5 (redfin)
device/google/redbull-kernel android-msm-redbull-4.19-android14
Pixel 4a (sunfish) device/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (flame)
Pixel 4 XL (coral)
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 (crosshatch)
device/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Pixel 2 (walleye)
Pixel 2 XL (taimen)
device/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Pixel (sailfish)
Pixel XL (marlin)
device/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2