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を含む)の作成に関するドキュメントについては、カーネルモジュールのサポートを参照してください。