Android 11 में, जेनरिक कर्नेल इमेज और वेंडर बूट पार्टीशन का कॉन्सेप्ट शामिल किया गया है. वेंडर बूट पार्टीशन में, GKI के साथ काम करने वाले कर्नेल मॉड्यूल सेव किए जाते हैं. साथ ही, इसे पहले चरण के init से लोड किया जाता है. Android 11 के रिलीज़ होने से पहले के कर्नेल मॉड्यूल, वेंडर और ODM पार्टिशन में भी सेव किए जाते हैं. साथ ही, वे वेंडर प्रोसेस से लोड किए जाते हैं.
Android 11 या उसके बाद के वर्शन के लिए, कर्नेल और सभी कर्नेल मॉड्यूल को बाकी पार्टिशन से अलग अपडेट किया जा सकता है. वेंडर पार्टिशन (वेंडर पार्टीशन अपडेट के बिना) में स्टोर किए गए कर्नेल मॉड्यूल के लिए अपडेट चालू करने के लिए, सभी वेंडर विभाजन मॉड्यूल को Vendor DLKM (डाइनैमिक रूप से लोड किए जा सकने वाले कर्नेल मॉड्यूल) नाम के नए विभाजन में ले जाएं. इसके बाद, इस सेगमेंट को अलग से अपडेट किया जा सकता है. इसी तरह, ओडीएम पार्टीशन में स्टोर किए गए सभी कर्नेल मॉड्यूल को ODM DLKM नाम के नए पार्टीशन में ले जाया जा सकता है. इस सेगमेंट को अलग-अलग अपडेट किया जा सकता है.
पार्टीशन की जगह
vendor_dlkm
और odm_dlkm
पार्टीशन, सुपर पार्टीशन में एक और डाइनैमिक पार्टीशन के तौर पर मौजूद होते हैं.
/vendor/lib/modules में मौजूद vendor_dlkm कॉन्टेंट
- वेंडर के कर्नेल मॉड्यूल
modprobe
कॉन्फ़िगरेशन फ़ाइलेंmodules.load
फ़ाइल
/odm/lib/modules में odm_dlkm सामग्री
- ओडीएम कर्नेल मॉड्यूल
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
के लिए यह एंट्री जोड़ें. डिवाइस के हिसाब से फ़्लैग बदलें. उदाहरण के लिए, CL CF में vendor_dlkm
जोड़ें का इस्तेमाल करें.
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
के लिए, यह एंट्री जोड़ें. डिवाइस के हिसाब से फ़्लैग बदलें. उदाहरण के लिए, CL CF में odm_dlkm
जोड़ें का इस्तेमाल करें.
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
पर ले जाता है.
वेंडर और ओडीएम कर्नेल मॉड्यूल के लिए, /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 होता है) बनाने से जुड़े दस्तावेज़ देखने के लिए, Kernel मॉड्यूल सहायता देखें.