वेंडर और ओडीएम के DLKM सेक्शन

Android 11 में, जेनेरिक कर्नेल इमेज और वेंडर बूट पार्टिशन की सुविधा जोड़ी गई है. वेंडर बूट पार्टिशन में, GKI के साथ काम करने वाले कर्नेल मॉड्यूल सेव किए जाते हैं. इन्हें पहले चरण की शुरुआत में लोड किया जाता है. Android 11 के रिलीज़ होने से पहले के कर्नेल मॉड्यूल, वेंडर और ODM पार्टिशन में भी सेव किए जाते हैं. इन्हें वेंडर प्रोसेस से लोड किया जाता है.

Android 11 या उसके बाद के वर्शन पर काम करने वाले डिवाइसों में, कर्नेल और सभी कर्नेल मॉड्यूल को अन्य पार्टिशन से अलग अपडेट किया जा सकता है. वेंडर पार्टिशन में सेव किए गए कर्नेल मॉड्यूल को अपडेट करने के लिए (वेंडर पार्टिशन को अपडेट किए बिना), वेंडर पार्टिशन के सभी मॉड्यूल को वेंडर DLKM (डाइनैमिक तौर पर लोड किए जा सकने वाले कर्नेल मॉड्यूल) नाम के नए पार्टिशन में ले जाएं. इसके बाद, इस पार्टिशन को अलग से अपडेट किया जा सकता है. इसी तरह, ODM पार्टिशन में सेव किए गए सभी कर्नेल मॉड्यूल को ODM DLKM नाम के नए पार्टिशन में ले जाया जा सकता है. इस पार्टिशन को भी अलग से अपडेट किया जा सकता है.

पार्टिशन की जगह

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

fstab में, vendor_dlkm के लिए यह एंट्री जोड़ें. डिवाइस के हिसाब से फ़्लैग बदलें. उदाहरण के लिए, सीएल Add vendor_dlkm to 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

fstab में, odm_dlkm के लिए यह एंट्री जोड़ें. डिवाइस के हिसाब से फ़्लैग बदलें. उदाहरण के लिए, सीएल Add odm_dlkm to 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 और /odm_dlkm डायरेक्ट्री में माउंट किया जाता है. ऐसा होने पर, /vendor/lib/modules और /odm/lib/modules पर सिमलंक उपलब्ध हो जाते हैं.

इसके बाद, वेंडर प्रोसेस (जैसे, .rc स्क्रिप्ट), modules.load में बताए गए क्रम के हिसाब से कर्नेल मॉड्यूल लोड कर सकती है. ज़रूरत पड़ने पर, वेंडर प्रोसेस मॉड्यूल को बाद में भी लोड कर सकती है.

वेंडर-बूट पार्टिशन (जिसमें वेंडर RAMDisk होता है) बनाने के बारे में जानकारी के लिए, कर्नेल मॉड्यूल की सुविधा देखें.