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-kernel android-gs-comet-6.1-android14-qpr3-d1 android14-6.1
Google Pixel 9(tokay)
Google Pixel 9 Pro(caiman)
Google Pixel 9 Pro XL(komodo)
device/google/caimito-kernel android-gs-caimito-6.1-android14-qpr3-d1 android14-6.1
Google Pixel 8a(akita) device/google/akita-kernel android-gs-akita-5.15-android14-qpr3 android14-5.15
Google Pixel 8(Shiba)
Google Pixel 8 Pro(Husky)
device/google/shusky-kernel android-gs-shusky-5.15-android14-qpr3 android14-5.15
Google Pixel Fold(Felix) device/google/felix-kernel android-gs-felix-5.10-android14-qpr3 android13-5.10
Google Pixel Tablet(Tangorpro) device/google/tangorpro-kernel android-gs-tangorpro-5.10-android14-qpr3 android13-5.10
Google Pixel 7a(Lynx) device/google/lynx-kernel android-gs-lynx-5.10-android14-qpr3 android13-5.10
Google Pixel 7(Panther)
Google Pixel 7 Pro(Cheetah)
device/google/pantah-kernel android-gs-pantah-5.10-android14-qpr3 android13-5.10
Google Pixel 6a(Bluejay) device/google/bluejay-kernel android-gs-bluejay-5.10-android14-qpr3 android13-5.10
Google Pixel 6(Oriole)
Google Pixel 6 Pro(Raven)
device/google/raviole-kernel android-gs-raviole-5.10-android14-qpr3 android13-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.8 AP1A.240505.004(11583682)
android14-gs-pixel-6.1 android14-6.1 AP1A.240505.004(11583682)
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 プラットフォーム ビルドと一致させます。その方法には次のオプションがあります。

オプション 1)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
    
オプション 2)ローカルで作成された Android プラットフォーム リポジトリから vendor_ramdisk をコピーします。
デバイス 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 ANDROID_ROOT/out/target/product/DEVICE/vendor_ramdisk-debug.img \
   KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH/vendor_ramdisk-DEVICE.img

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

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

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

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

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(動的パーティション)

以下は 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