Google Pixel カーネルのビルド

このガイドは開発用にカスタムの Google Pixel カーネルをダウンロードし、コンパイルして書き込む方法について説明した手順ガイドです。GKI により、カーネルを Android プラットフォーム ビルドから独立してアップデートできるようになりました。このステップは Google Pixel 6 以降のデバイスのみが対象です。Google Pixel 5 以前のデバイスでは、vendor パーティションのカーネル モジュールをアップデートする必要があり、それはそのデバイスの Android プラットフォーム ビルドに依存します。GKI がサポートされている Google Pixel カーネル ブランチの表には、GKI がサポートされている各 Google Pixel デバイスのカーネル リポジトリ マニフェスト ブランチが含まれています。Google Pixel 5 以前のカーネル マニフェスト ブランチについては、以前の Google Pixel カーネルのセクションをご覧ください。

GKI がサポートされている Google Pixel カーネル ブランチ
デバイス AOSP ツリーのバイナリパス リポジトリ ブランチ GKI カーネル
Google Pixel 9 Pro Fold(Comet) device/google/comet-kernels/6.1 android-gs-comet-6.1-android15-qpr1 android15-6.1
Google Pixel 9(Tokay)
Google Pixel 9 Pro(Caiman)
Google Pixel 9 Pro XL(Komodo)
device/google/caimito-kernels/6.1 android-gs-caimito-6.1-android15-qpr1 android15-6.1
Google Pixel 8a(Akita) device/google/akita-kernels/5.15 android-gs-akita-5.15-android15-qpr1 android15-5.15
Google Pixel 8(Shiba)
Google Pixel 8 Pro(Husky)
device/google/shusky-kernels/5.15 android-gs-shusky-5.15-android15-qpr1 android15-5.15
Google Pixel Fold(Felix) device/google/felix-kernels/5.10 android-gs-felix-5.10-android15-qpr1 android15-5.10
Google Pixel Tablet(Tangorpro) device/google/tangorpro-kernels/5.10 android-gs-tangorpro-5.10-android15-qpr1 android15-5.10
Google Pixel 7a(Lynx) device/google/lynx-kernels/5.10 android-gs-lynx-5.10-android15-qpr1 android15-5.10
Google Pixel 7(Panther)
Google Pixel 7 Pro(Cheetah)
device/google/pantah-kernels/5.10 android-gs-pantah-5.10-android15-qpr1 android15-5.10
Google Pixel 6a(Bluejay) device/google/bluejay-kernels/5.10 android-gs-bluejay-5.10-android15-qpr1 android15-5.10
Google Pixel 6(Oriole)
Google Pixel 6 Pro(Raven)
device/google/raviole-kernels/5.10 android-gs-raviole-5.10-android15-qpr1 android15-5.10

Google Pixel 6 と Google Pixel 6 Pro デバイスでは、出荷時にサポートされているカーネルに加えて、GKI 開発目的でのみ、サポートされている Google Pixel 6 / 6 Pro の Android プラットフォームとカーネルの組み合わせの表に記載の Android 共通カーネル ブランチをサポートしています。Android プラットフォーム HAL と Google Pixel カーネル ドライバでは、ベンダー UAPI に違いがあるため、表ではサポートされているビルドの組み合わせを示しています。

サポートされている Google Pixel 6 / 6 Pro の Android プラットフォームとカーネルの組み合わせ
Google Pixel カーネル マニフェスト ブランチ GKI ブランチ Android プラットフォーム ビルド aosp-main サポート
gs-android-gs-raviole-mainline android-mainline(v6.12 BP11.241025.006(12620009)
android-gs-raviole-6.1-android15-qpr2-beta android14-6.1 BP11.241025.006(12620009)
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002(9471150) ×

Google Pixel デバイスの準備

以下のフローチャートは Google Pixel 6 以降のデバイスでカーネルをアップデートするプロセスを示しています。

**図 1.**カーネル アップデートのフローチャート

flash.android.com を使ってデバイスに書き込む

  1. flash.android.com に移動します。
  2. サポートされている Android プラットフォームとカーネルの組み合わせに従って、Android ビルドを選択します。
  3. 以下のオプションを選択します。
    • Wipe Device
    • Force Flash all Partitions
    • Disable Verification
  4. [Install build] ボタンをクリックして、デバイスに書き込みます。

**図 2.**フラッシュ ステーションの例

カーネルのダウンロードとコンパイル

カーネル リポジトリを同期する

次のコマンドを実行して、カーネル ソースコードをダウンロードします。Google Pixel の KERNEL_MANIFEST_BRANCH についてはサポートされている Google Pixel 6 / 6 Pro の Android プラットフォームとカーネルの組み合わせの表をご参照ください。

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

ベンダー RAM ディスクをアップデートする

カーネル リポジトリの vendor_ramdisk-DEVICE.img ファイルをアップデートして、デバイスに書き込む Android プラットフォーム ビルドと一致させます。vendor_ramdisk-DEVICE.img ファイルをアップデートする方法はいくつかあります。Android 15 QPR2(BP11.241025.006)以降を使用している場合は方法(1)を使用してください。それ以外の場合は、方法(2)を使用してください。

  • 方法(1)vendor_boot パーティションの DTB と DLKM の RAM ディスク ビットのみをアップデートする

    fastboot バージョン 35.0.2-12583183 以降、vendor_boot パーティションに DTB と DLKM の RAM ディスクを直接書き込むことができます。v35.0.2-12583183 アーティファクトから使用するホストマシンの環境に sdk-repo-HOST_OS-platform-tools-12583183.zip をダウンロードして解凍します。

    カーネル イメージを書き込むに記載されている手順に沿って DTB と vendor_boot:dlkm を書き込みます。

  • 方法(2)Google Pixel のファクトリー イメージからベンダー RAM ディスク イメージを抽出する

    1. デバイスでサポートされているファクトリー イメージを https://developers.google.com/android/images?hl=ja からダウンロードします。

    2. vendor_boot.img を抽出します。

      次のコマンドは Google 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 を展開して、ベンダー RAM ディスクを取得します。

        KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
            --out vendor_boot_out
      
    4. 解凍した vendor-ramdisk-by-name/ramdisk_ ファイルを Google Pixel カーネル リポジトリにコピーします。

      デバイス DEVICE_RAMDISK_PATH
      Google Pixel 6(Oriole)
      Google Pixel 6 Pro(Raven)
      prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
      Google 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
      

カーネル(Kleaf)をコンパイルする

Android 13 では、build.sh スクリプトは新しいカーネル ビルドシステムである Kleaf に変更されています。android13-5.15 以降を使用しているデバイスの場合、カーネルは Kleaf を使用してビルドする必要があります。

android13-5.15 カーネルを使用した Google Pixel 6 および 6 Pro では、次の Kleaf ビルドコマンドを実行します。

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

その他のすべての Google Pixel カーネルでは、KERNEL_REPO_ROOT にある build_DEVICE.sh スクリプトを実行します。多くの場合、DEVICE は、GKI がサポートされている Google Pixel カーネル ブランチの表の AOSP ツリーのバイナリパス列で使われているコードネームと一致するコードネームである必要があります。コードネームには、1 つのデバイスのコードネーム(例: 「akita」(Google Pixel 8a))か、カーネルが同じである関連デバイスのグループを指すコードネーム(例: 「caimito」(Google Pixel 9(tokay)、Google Pixel 9 Pro(caiman)、Google Pixel 9 Pro XL(komodo)を指す))を使用できます。android14 以前のリリースでは、Google Pixel 6 および Google Pixel 6 Pro に build_slider.sh を、Google Pixel 7 および Google Pixel 7 Pro に build_cloudripper.sh を使用します。

たとえば、android-gs-raviole-5.10-android14 ブランチで Google Pixel 6 のカーネルをビルドするには、次のコマンドを実行します。

build_slider.sh

本番環境カーネル ブランチではデフォルトで、build_DEVICE.sh スクリプトでビルド済みの GKI カーネルを使用して、ビルドプロセスをスピードアップします。コアカーネルを変更する場合は、ローカルソースからカーネルをビルドするように環境変数 BUILD_AOSP_KERNEL=1 を設定します。開発版カーネル ブランチではデフォルトで、カーネルソースを直接ビルドします。

カーネル ビルドシステムの詳細とビルドのカスタマイズ方法については、Kleaf - Building Android Kernels with Bazel(Kleaf - Bazel を使用したカーネルのビルド)をご覧ください。

カーネル イメージを書き込む

注: 確認を無効にしていない場合は、カスタム カーネルを書き込む前に無効にする必要があります。以下はそれを行うためのコマンドです。
fastboot oem disable-verification
警告: プラットフォーム ビルドの上からカスタム カーネルを書き込むときは、新しいカーネルに関連するセキュリティ パッチレベル(SPL)のダウングレードがある場合、デバイスをワイプしなければならない可能性があります。 このプロセスを実行するとすべての個人データが消去されます。ワイプする前に必ずデータをバックアップしてください。
fastboot -w

カーネル イメージを書き込むには、デバイスにリストされているそれぞれのカーネル パーティションに対して、fastboot flash コマンドを実行します。動的パーティションの場合、書き込み前に fastbootd モードで再起動する必要があります。

デバイス カーネル パーティション
Google Pixel 6(Oriole)
Google Pixel 6 Pro(Raven)
Google Pixel 6a(Bluejay)
boot
dtbo
vendor_boot
vendor_dlkm(動的パーティション)
Google Pixel 8(Shiba)
Google Pixel 8 Pro(Husky)
Google Pixel Fold(Felix)
Google Pixel Tablet(Tangorpro)
Google Pixel 7a(Lynx)
Google Pixel 7(Panther)
Google Pixel 7 Pro(Cheetah)
boot
dtbo
vendor_kernel_boot
vendor_dlkm(動的パーティション)
system_dlkm(動的パーティション)

Google Pixel 6 / 6 Pro / 6a の場合、ベンダー RAM ディスクをアップデートするのセクションで vendor_ramdisk のダウンロードをスキップした場合は、vendor_boot.img イメージを書き込むのではなく、以下のコマンドを使用して DTB と DLKM の RAM ディスクをアップデートします。

fastboot flash  --dtb out/DEVICE/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img

以下は android-mainline での Google Pixel 6 の書き込みコマンドです。

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
v5.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 を使用します。

以前の Google Pixel カーネル

参考として、以前の Google Pixel カーネル ブランチの表では、Google Pixel 5 以前のデバイスのカーネル リポジトリ ブランチを示しています。GKI がサポートされているデバイスはありません。

以前の Google Pixel カーネル ブランチ
デバイス AOSP ツリーのバイナリパス リポジトリ ブランチ
Google Pixel 5a(Barbet)
Google Pixel 4a(5G)(Bramble)
Google Pixel 5(Redfin)
device/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Google Pixel 4a(Sunfish) device/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Google Pixel 4(Flame)
Google Pixel 4 XL(Coral)
device/google/coral-kernel android-msm-coral-4.14-android13
Google Pixel 3a(Sargo)
Google Pixel 3a XL(Bonito)
device/google/bonito-kernel android-msm-bonito-4.9-android12L
Google Pixel 3(Blueline)
Google Pixel 3 XL(Crosshatch)
device/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Google Pixel 2(Walleye)
Google 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