Android 11では、汎用カーネルイメージとベンダーブートパーティションの概念が導入されています。ベンダーのブートパーティションは、GKIと互換性のあるカーネルモジュールを格納し、第1段階のinitによってロードされます。 Android 11のリリースより前のカーネルモジュールもベンダーおよびODMパーティションに保存され、ベンダープロセスによってロードされます。
Android 11以降の場合、カーネルとすべてのカーネルモジュールは、残りのパーティションから独立して更新できます。ベンダーパーティションに保存されているカーネルモジュールの更新を有効にするには(ベンダーパーティションの更新なしで)、すべてのベンダーパーティションモジュールをベンダーDLKM (動的にロード可能なカーネルモジュール)と呼ばれる新しいパーティションに移動します。その後、このパーティションを個別に更新できます。同様に、ODMパーティションに格納されているすべてのカーネルモジュールをODMDLKMと呼ばれる新しいパーティションに移動できます。このパーティションは、個別に更新することもできます。
パーティションの場所
vendor_dlkm
およびodm_dlkm
パーティションは、別の動的パーティションとしてスーパーパーティションに配置されます。
/ vendor / lib / modulesのvendor_dlkmの内容
- ベンダーカーネルモジュール
modprobe
設定ファイルmodules.load
ファイル
/ odm / lib / modulesのodm_dlkmの内容
- ODMカーネルモジュール
modprobe
設定ファイルmodules.load
ファイル
カーネルモジュール構成ファイルの詳細については、カーネルモジュールのサポートを参照してください。
ビルドサポート
vendor_dlkm
とodm_dlkm
の構築は、他の動的パーティションの構築と同様のプロセスです。
vendor_dlkmビルド例
次の例に示すように、 vendor_dlkm
をビルドします。
BoardConfig.mk
BOARD_USES_VENDOR_DLKMIMAGE := true
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
BOARD_<GROUP_NAME>_PARTITION_LIST += vendor_dlkm
<GROUP_NAME>
を更新グループの適切な名前に置き換えます。更新グループは、ベンダーパーティションが含まれるグループである必要があります。
A / Bおよび仮想A / Bデバイスの場合、 device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
vendor_dlkm
の次のエントリをfstabに追加します。デバイスに応じてフラグを変更します。例として、CL vendor_dlkm
をCFに使用します。
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
odm_dlkmビルド例
次の例に示すように、 odm_dlkm
をビルドします。
BoardConfig.mk
BOARD_USES_ODM_DLKIMAGE := true
BOARD_ODM_DLKIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_ODM_DLKM := odm_dlkm
BOARD_<group_name>_PARTITION_LIST += odm_dlkm
A / Bおよび仮想A / Bデバイスの場合、 device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
odm_dlkm
の次のエントリをfstabに追加します。デバイスに応じてフラグを変更します。例として、CL odm_dlkm
をCFに使用します。
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
カーネルモジュールをパーティションにコピーする
コピーするカーネルモジュールをvendor_dlkm
パーティションに選択するには、それらをBOARD_VENDOR_KERNEL_MODULES
にリストします。
modules.load
の内容をオーバーライドする場合は、 BOARD_VENDOR_KERNEL_MODULES_LOAD
で指定できます。
ビルド時に、 BOARD_VENDOR_KERNEL_MODULES
にリストされているモジュールが$ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
にインストールされます。シンボリックリンクは/vendor/lib/modules
に作成され、 /vendor_dlkm/lib/modules
につながります。
同様に、 odm_dlkm
パーティションにコピーするカーネルモジュールを選択するには、それらをBOARD_ODM_KERNEL_MODULES
にリストします。プラットフォームビルドは、モジュールでdepmod
を実行し、 depmod
出力ファイルをイメージにコピーします。ビルドはmodules.load
ファイルを作成し、それをイメージに保存します。このファイルには、 BOARD_ODM_KERNEL_MODULES
にリストされているすべてのモジュールが含まれています。
modules.load
の内容をオーバーライドする場合は、 BOARD_ODM_KERNEL_MODULES_LOAD
で指定できます。
ビルド時に、 BOARD_ODM_KERNEL_MODULES
にリストされているモジュールが$ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
にインストールされます。シンボリックリンクは/odm/lib/modules
に作成され、 /odm_dlkm/lib/modules
につながります。
ベンダーおよびODMカーネルモジュールには、常に/vendor/lib/modules
および/odm/lib/modules
を使用してください。
/ vendor_dlkm / lib / modulesは絶対に使用しないでください。 vendor_dlkm
パーティションのないデバイスは、 BOARD_VENDOR_KERNEL_MODULES
を/vendor/lib/modules
に直接インストールします。 /vendor_dlkm/lib/modules
が存在しないため、これは問題があります。
/ odm_dlkm / lib / modulesは絶対に使用しないでください。 odm_dlkm
パーティションのないデバイスは、 BOARD_ODM_KERNEL_MODULES
を/odm/lib/modules
に直接インストールします。 /odm_dlkm/lib/modules
が存在しないため、これは問題があります。
パーティションのマウントとモジュールのロード
first_stage_init
の間、 vendor_dlkm
パーティションとodm_dlkm
パーティションはそれぞれ/ vendor_dlkmパーティションと/vendor_dlkm
/odm_dlkm
パーティションにマウントされます。これが発生すると、 /vendor/lib/modules
および/odm/lib/modules
のシンボリックリンクが使用可能になります。
ベンダープロセス(「.rc」スクリプトなど)は、 modules.load
で指定された順序に基づいてカーネルモジュールをロードできます。ベンダープロセスは、必要に応じて、後でモジュールをロードすることもできます。
関連ドキュメント
ベンダーブートパーティション(ベンダーRAMDiskを含む)の作成に関するドキュメントについては、カーネルモジュールのサポートを参照してください。