Criar kernels do Pixel

Este guia fornece instruções detalhadas sobre como baixar, compilar e atualizar um kernel do 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 do kernel do Pixel com suporte da GKI
Dispositivo Caminho do binário na árvore AOSP Ramificações do repositório Kernel da GKI
Pixel 9 Pro Fold (comet) device/google/comet-kernel android-gs-comet-6.1-android14-qpr3-d1 android14-6.1
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
device/google/caimito-kernel android-gs-caimito-6.1-android14-qpr3-d1 android14-6.1
Pixel 8a (akita) device/google/akita-kernel android-gs-akita-5.15-android14-qpr3 android14-5.15
Pixel 8 (shiba)
Pixel 8 Pro (husky)
device/google/shusky-kernel android-gs-shusky-5.15-android14-qpr3 android14-5.15
Pixel Fold (felix) device/google/felix-kernel android-gs-felix-5.10-android14-qpr3 android13-5.10
Pixel Tablet (tangorpro) device/google/tangorpro-kernel android-gs-tangorpro-5.10-android14-qpr3 android13-5.10
Pixel 7a (lynx) device/google/lynx-kernel android-gs-lynx-5.10-android14-qpr3 android13-5.10
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
device/google/pantah-kernel android-gs-pantah-5.10-android14-qpr3 android13-5.10
Pixel 6a (bluejay) device/google/bluejay-kernel android-gs-bluejay-5.10-android14-qpr3 android13-5.10
Pixel 6 (oriole)
Pixel 6 Pro (raven)
device/google/raviole-kernel android-gs-raviole-5.10-android14-qpr3 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 (v6.8) AP1A.240505.004 (11583682) Sim
android14-gs-pixel-6.1 android14-6.1 AP1A.240505.004 (11583682) 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 kernel compatíveis.
  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

Baixar 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 AP1A.240505.004 do Pixel 6 Pro como exemplo. Substitua o nome do arquivo ZIP pelo nome do arquivo da imagem de fábrica que você baixou.
      unzip raven-ap1a.240505.004-factory-9d783215.zip
    
      cd raven-ap1a.240505.004
    
      unzip image-raven-ap1a.240505.004.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 vendor-ramdisk-by-name/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 saber mais sobre o sistema de build do kernel e aprender a personalizar o build, consulte Kleaf: como criar kernels do Android com o Bazel.

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 mostra 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-qpr3
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