このガイドは開発用にカスタムの 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 以降のデバイスでカーネルをアップデートするプロセスを示しています。
flash.android.com を使ってデバイスに書き込む
- flash.android.com に移動します。
- サポートされている Android プラットフォームとカーネルの組み合わせに従って、Android ビルドを選択します。
- 以下のオプションを選択します。
- Wipe Device
- Force Flash all Partitions
- Disable Verification
- [Install build] ボタンをクリックして、デバイスに書き込みます。
カーネルのダウンロードとコンパイル
カーネル リポジトリを同期する
次のコマンドを実行して、カーネル ソースコードをダウンロードします。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 ディスク イメージを抽出します。
デバイスでサポートされているファクトリー イメージを https://developers.google.com/android/images?hl=ja からダウンロードします。
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
vendor_boot.img
を展開して、ベンダー RAM ディスクを取得します。KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \ --out vendor_boot_out
解凍した
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 |