Tedarikçi ve ODM DLKM bölümleri

Android 11, Genel Çekirdek Görüntüsü ve tedarikçi önyükleme bölümü kavramlarını sunar. Tedarikçi önyükleme bölümü, GKI ile uyumlu çekirdek modüllerini depolar ve ilk aşama başlatma işlemi tarafından yüklenir. Android 11'in yayınlanmasından önceki çekirdek modülleri de vendor ve ODM bölümlerinde depolanır ve vendor süreçleri tarafından yüklenir.

Android 11 veya sonraki sürümlerde çekirdek ve tüm çekirdek modülleri, bölümlerin geri kalanından bağımsız olarak güncellenebilir. Tedarikçi bölümünde depolanan çekirdek modüllerinin güncellenmesini sağlamak için (tedarikçi bölümü güncellemesi olmadan) tüm tedarikçi bölümü modüllerini Vendor DLKM (dinamik olarak yüklenebilir çekirdek modülü) adlı yeni bir bölüme taşıyın. Ardından bu bölümü bağımsız olarak güncelleyebilirsiniz. Benzer şekilde, ODM bölümünde depolanan tüm çekirdek modüllerini ODM DLKM adlı yeni bir bölüme taşıyabilirsiniz. Bu bölüm de bağımsız olarak güncellenebilir.

Bölüm konumu

vendor_dlkm ve odm_dlkm bölümleri, süper bölüm içinde başka bir dinamik bölüm olarak yer alır.

/vendor/lib/modules dizinindeki vendor_dlkm içerikleri

  • Tedarikçi çekirdek modülleri
  • modprobe yapılandırma dosyası
  • modules.load dosyası

/odm/lib/modules dizinindeki odm_dlkm içerikleri

  • ODM çekirdek modülleri
  • modprobe yapılandırma dosyası
  • modules.load dosyası

Çekirdek modülü yapılandırma dosyaları hakkında daha fazla bilgi için Kernel Module Support (Çekirdek Modülü Desteği) başlıklı makaleyi inceleyin.

Destek oluşturma

vendor_dlkm ve odm_dlkm oluşturma, diğer dinamik bölümleri oluşturmaya benzer bir süreçtir.

vendor_dlkm build example

Aşağıdaki örneklerde gösterildiği gibi vendor_dlkm oluşturun.

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> yerine uygun güncelleme grubu adını girin. Güncelleme grubu, tedarikçi bölümünün bulunduğu grup olmalıdır.

A/B ve Virtual A/B cihazlar için device.mk

AB_OTA_PARTITIONS += vendor_dlkm

fstab

fstab'a vendor_dlkm için aşağıdaki girişi ekleyin. Cihaza göre değişiklik işaretlerini değiştirin. Örnek olarak CL Add vendor_dlkm to CF'yi kullanın.

vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

odm_dlkm derleme örneği

Aşağıdaki örneklerde gösterildiği gibi odm_dlkm oluşturun.

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 ve sanal A/B cihazlar için device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

fstab'a odm_dlkm için aşağıdaki girişi ekleyin. Cihaza göre işaretleri değiştirin. Örnek olarak CL Add odm_dlkm to CF'yi kullanın.

odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

Çekirdek modüllerini bir bölüme kopyalama

vendor_dlkm bölümüne kopyalamak istediğiniz çekirdek modüllerini seçmek için bunları BOARD_VENDOR_KERNEL_MODULES içinde listeleyin.

modules.load içeriğini geçersiz kılmak istiyorsanız bunu BOARD_VENDOR_KERNEL_MODULES_LOAD içinde belirtebilirsiniz.

Derleme sırasında, BOARD_VENDOR_KERNEL_MODULES içinde listelenen modüller $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules'ye yüklenir. /vendor/lib/modules konumunda, /vendor_dlkm/lib/modules konumuna yönlendiren bir sembolik bağlantı oluşturulur.

Benzer şekilde, odm_dlkm bölümüne kopyalamak istediğiniz çekirdek modüllerini seçmek için bunları BOARD_ODM_KERNEL_MODULES içinde listeleyin. Platform derlemesi, modüllerde depmod çalışır ve depmod çıkış dosyalarını görüntüye kopyalar. Derleme, bir modules.load dosyası oluşturur ve bunu görüntüde saklar. Bu dosya, BOARD_ODM_KERNEL_MODULES bölümünde listelenen tüm modülleri içerir.

modules.load içeriğini geçersiz kılmak istiyorsanız bunu BOARD_ODM_KERNEL_MODULES_LOAD içinde belirtebilirsiniz.

Derleme sırasında, BOARD_ODM_KERNEL_MODULES içinde listelenen modüller $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules içine yüklenir. /odm/lib/modules konumunda /odm_dlkm/lib/modules konumuna yönlendiren bir sembolik bağlantı oluşturulur.

Tedarikçi ve ODM çekirdek modülleri için /vendor/lib/modules ve /odm/lib/modules her zaman kullanılmalıdır.

/vendor_dlkm/lib/modules asla kullanılmaz. vendor_dlkm bölümü olmayan cihazlar, BOARD_VENDOR_KERNEL_MODULES'ı doğrudan /vendor/lib/modules'a yükler. /vendor_dlkm/lib/modules mevcut olmadığından bu durum sorunludur.

Hiçbir zaman kullanmayın /odm_dlkm/lib/modules. odm_dlkm bölümü olmayan cihazlar BOARD_ODM_KERNEL_MODULES'ı doğrudan /odm/lib/modules'a yükleyin. /odm_dlkm/lib/modules mevcut olmadığından bu durum sorunludur.

Bölüm montajı ve modül yükleme

first_stage_init sırasında vendor_dlkm ve odm_dlkm bölümleri sırasıyla /vendor_dlkm ve /odm_dlkm dizinlerine bağlanır. Bu durumda /vendor/lib/modules ve /odm/lib/modules konumlarındaki sembolik bağlantılar kullanılabilir hâle gelir.

Daha sonra bir satıcı süreci (ör. .rc komut dosyası), çekirdek modüllerini modules.load içinde belirtilen sıraya göre yükleyebilir. Gerekirse satıcı süreci, modülleri daha sonra da yükleyebilir.

Tedarikçi RAMDisk'ini içeren bir tedarikçi önyükleme bölümü oluşturmayla ilgili dokümanlar için Kernel Module Support (Çekirdek Modülü Desteği) başlıklı makaleye bakın.