ベンダー/ ODMDLKMパーティション

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