Construir kernels de Pixel

Este guia fornece instruções passo a passo sobre como baixar, compilar e atualizar um kernel Pixel personalizado para desenvolvimento. Devido ao GKI, agora é possível atualizar o kernel independentemente da construção da plataforma Android. Essas etapas se aplicam apenas a dispositivos Pixel 6 e posteriores. Isso ocorre porque os dispositivos Pixel 5 e anteriores exigem a atualização dos módulos do kernel na partição vendor , que depende da versão da plataforma Android para esses dispositivos. A tabela de ramificações do kernel de pixel compatível com GKI inclui a ramificação de manifesto do repositório do kernel para cada dispositivo Pixel compatível com GKI. Consulte a seção Legacy Pixel Kernels para o Pixel 5 e ramificações de manifesto do kernel anteriores.

Ramos de kernel Pixel compatíveis com GKI
Dispositivo Caminho binário na árvore AOSP Ramos de repositório Kernel GKI
Pixel 8 (shiba)
Pixel 8 Pro (roxo)
dispositivo/google/shusky-kernel android-gs-shusky-5.15-android14-d1 andróide14-5.15
Dobra de pixel (félix) dispositivo/google/felix-kernel android-gs-felix-5.10-android14 andróide13-5.10
Pixel Tablet (tangorpro) dispositivo/google/tangorpro-kernel android-gs-tangorpro-5.10-android14 andróide13-5.10
Pixel 7a (lince) dispositivo/google/lynx-kernel android-gs-lynx-5.10-android14 andróide13-5.10
Pixel 7 (pantera)
Pixel 7 Pro (chita)
dispositivo/google/pantah-kernel android-gs-pantah-5.10-android14 andróide13-5.10
Pixel 6a (gaio-azul) dispositivo/google/bluejay-kernel android-gs-bluejay-5.10-android14 andróide13-5.10
Pixel 6 (oriole)
Pixel 6 Pro (corvo)
dispositivo/google/raviole-kernel android-gs-raviole-5.10-android14 andróide13-5.10

Além dos kernels com suporte de fábrica, os dispositivos Pixel 6 e 6 Pro são compatíveis para fins de desenvolvimento de GKI apenas nas ramificações do kernel Android Common incluídas na plataforma Android Pixel 6/6 Pro compatível e na tabela Combinações de kernel . Devido às diferenças de UAPI do fornecedor entre os HALs da plataforma Android e os drivers do kernel Pixel, a tabela fornece as combinações de compilação suportadas.

Plataforma Android Pixel 6/6 Pro compatível e combinações de kernel
Ramo de manifesto do kernel de pixel Filial GKI Construção da plataforma Android suporte 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 andróide13-5.15 TQ1A.230205.002 (9471150) Não

Prepare seu dispositivo Pixel

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

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

Atualize o dispositivo usando flash.android.com

  1. Navegue até flash.android.com
  2. Escolha a versão do Android com base nas combinações de plataforma e kernel do Android compatíveis .
  3. Selecione as seguintes opções:
    • Limpar dispositivo
    • Forçar Flash em todas as partições
    • Desativar verificação
  4. Pressione o botão Instalar compilação para atualizar o dispositivo.

**Figura 2.** Exemplo de Estação Flash

Baixe e compile o kernel

Sincronize o repositório do kernel

Execute os seguintes comandos para baixar o código-fonte do kernel. Consulte a tabela de plataformas Android e combinações de kernel do Pixel 6/6 Pro suportadas para o Pixel KERNEL_MANIFEST_BRANCH .

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 corresponder à compilação da plataforma Android que está atualizada no dispositivo. Existem algumas opções que você pode seguir.

Opção 1) Extraia a imagem do ramdisk do fornecedor da imagem de fábrica do Pixel .
  1. Baixe a imagem de fábrica compatível para seu dispositivo em https://developers.google.com/android/images.

  2. Extraia o vendor_boot.img :

    • Os comandos a seguir usam o Pixel 6 Pro UP1A.231005.007.a1 como exemplo. Substitua o nome do arquivo zip pelo nome do arquivo da imagem de fábrica que você baixou.
      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 o vendor_boot.img para obter 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_ extraído para o repositório do kernel do Pixel.

    Dispositivo DEVICE_RAMDISK_PATH
    Pixel 6 (oriole)
    Pixel 6 Pro (corvo)
    pré-construídos/artefatos de inicialização/ramdisks/vendor_ramdisk- oriole.img
    Pixel 6a (gaio-azul) 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) Copie o vendor_ramdisk de um repositório da plataforma Android construído localmente.
Dispositivo DEVICE_RAMDISK_PATH
Pixel 6 (oriole)
Pixel 6 Pro (corvo)
pré-construídos/artefatos de inicialização/ramdisks/vendor_ramdisk- oriole.img
Pixel 6a (gaio-azul) 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 compilação de kernel chamado Kleaf . Para dispositivos que usam android13-5.15 e posterior, o kernel deve ser compilado usando Kleaf.

Para Pixel 6 e 6 Pro com kernels android14 e posteriores, execute o comando Kleaf build:

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

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

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

Para todos os outros kernels Pixel, execute o script build_ DEVICE.sh encontrado em KERNEL_REPO_ROOT . Por exemplo, para construir o kernel do Pixel 6 no branch android-gs-raviole-5.10-android14 , você executaria o comando:

build_slider.sh

Por padrão, os scripts build_ DEVICE .sh usam o kernel GKI pré-construído para acelerar o processo de compilação. Se você deseja modificar o kernel principal, defina a variável de ambiente BUILD_AOSP_KERNEL=1 para construir o kernel a partir das fontes locais.

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

Atualize as imagens do kernel

Nota: Se você não desabilitou a verificação, você precisa fazer isso antes de atualizar o kernel personalizado. Aqui está o comando para fazer isso:
fastboot oem disable-verification
AVISO: Se você estiver atualizando um kernel personalizado sobre uma construção de plataforma, talvez seja necessário limpar seu dispositivo se houver um downgrade de nível de patch de segurança (SPL) associado ao novo kernel. Este processo apaga todos os seus dados pessoais. Certifique-se de fazer backup de seus dados antes de apagá-los.
fastboot -w

Para atualizar as imagens do kernel, execute o comando fastboot flash para cada partição do kernel listada para o seu dispositivo. Para partições dinâmicas, você precisa reinicializar no modo fastbootd antes de atualizar.

Dispositivo Partições do Kernel
Pixel 6 (oriole)
Pixel 6 Pro (corvo)
Pixel 6a (gaio-azul)
bota
dtbo
fornecedor_boot
vendor_dlkm (partição dinâmica)
Pixel 8 (shiba)
Pixel 8 Pro (roxo)
Dobra de pixel (félix)
Pixel Tablet (tangorpro)
Pixel 7a (lince)
Pixel 7 (pantera)
Pixel 7 Pro (chita)
bota
dtbo
fornecedor_kernel_boot
vendor_dlkm (partição dinâmica)
system_dlkm (partição dinâmica)

Aqui estão os comandos de flash para Pixel 6 na 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 do kernel podem ser encontradas em DIST_DIR .

Ramo do kernel DIST_DIR
v5.10 out/mixed/dist
v5.15 e posterior out/ DEVICE /dist
Nota: Se você tiver um dongle serial e quiser habilitar logs seriais, o comando é:
fastboot oem uart enable
fastboot oem uart config 3000000
Exemplo de comando para conectar a partir do host:
screen -fn /dev/ttyUSB* 3000000

Restaure as imagens de fábrica

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

Kernels de Pixel legados

Como referência, a tabela de ramificações do kernel do Pixel legado fornece as ramificações do repositório do kernel para o Pixel 5 e dispositivos anteriores. Esses são dispositivos não compatíveis com GKI.

Ramos do kernel legado do Pixel
Dispositivo Caminho binário na árvore AOSP Ramos de repositório
Pixel 5a (barbeto)
Pixel 4a (5G) (amortecedor)
Pixel 5 (redfin)
dispositivo/google/redbull-kernel android-msm-redbull-4.19-android14
Pixel 4a (peixe-lua) dispositivo/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (chama)
Pixel 4XL (coral)
dispositivo/google/coral-kernel android-msm-coral-4.14-android13
Pixel 3a (sargo)
Pixel 3a XL (bonito)
dispositivo/google/bonito-kernel android-msm-bonito-4.9-android12L
Pixel 3 (linha azul)
Pixel 3 XL (hachurado)
dispositivo/google/kernel hachurado android-msm-hatch-4.9-android12
Pixel 2 (walleye)
Pixel 2 XL (taimen)
dispositivo/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Pixel (veleiro)
Pixel XL (marlin)
dispositivo/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2