GKI और GKI मॉड्यूल को बाकी विभाजन से स्वतंत्र रूप से अपडेट किया जा सकता है क्योंकि GKI मॉड्यूल system_dlkm
नामक सुपर इमेज में एक अलग गतिशील विभाजन पर रहते हैं। GKI मॉड्यूल को कर्नेल बिल्ड-टाइम कुंजी जोड़ी का उपयोग करके Google द्वारा हस्ताक्षरित किया जाता है और वे केवल उसी GKI के साथ संगत होते हैं जिसके साथ वे बनाए गए हैं। GKI और GKI मॉड्यूल के बीच कोई ABI स्थिरता नहीं है; रनटाइम के दौरान मॉड्यूल को सही ढंग से लोड करने के लिए, GKI और GKI मॉड्यूल को एक साथ बनाया और अपडेट किया जाना चाहिए।
System_dklm विभाजन समर्थन लागू करें
system_dlkm
विभाजन एक अन्य गतिशील विभाजन के रूप में सुपर विभाजन में स्थित है। इस विभाजन में ये शामिल हो सकते हैं:
- Google बिल्ड-टाइम हस्ताक्षरित कर्नेल मॉड्यूल
-
depmod
कलाकृतियाँ
system_dlkm
बनाएँ
system_dlkm
का निर्माण अन्य गतिशील विभाजनों के निर्माण के समान प्रक्रिया है। अपने बिल्ड में system_dlkm
जोड़ने के लिए निम्नलिखित चरणों का पालन करें:
BoardConfig.mk
में, निम्नलिखित प्रविष्टियाँ जोड़ें:BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE) TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
विभाजन सूची में,
system_dlkm
जोड़ें:BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(वैकल्पिक) ए/बी और वर्चुअल ए/बी डिवाइस के लिए, अपने डिवाइस के लिए
device.mk
फ़ाइल में निम्नलिखित पंक्ति जोड़ें:AB_OTA_PARTITIONS += system_dlkm
system_dlkm
में कॉपी करने के लिए कर्नेल मॉड्यूल की पहचान करें
मॉड्यूल को रनटाइम पर सफलतापूर्वक लोड करने के लिए, GKI और GKI मॉड्यूल को एक साथ बनाया जाना चाहिए। इसलिए आपको लक्ष्य आर्किटेक्चर के लिए GKI बिल्ड में कर्नेल मॉड्यूल की पहचान करनी चाहिए और उसे प्लेटफ़ॉर्म बिल्ड के दौरान system_dlkm
विभाजन के लिए स्रोत के रूप में प्रदान करना चाहिए।
एंड्रॉइड 13 के लिए
system_dlkm
विभाजन उत्पन्न करने के लिए बिल्ड सिस्टम के इनपुट के रूप में डिवाइस के लिए आवश्यक GKI मॉड्यूल कर्नेल ऑब्जेक्ट फ़ाइलों वाले फ़ोल्डर में BOARD_SYSTEM_DLKM_SRC
इंगित करें। उदाहरण के लिए:
एक फ़ोल्डर में GKI मॉड्यूल स्रोत प्रदान करें और उस फ़ोल्डर में BOARD_SYSTEM_DLKM_SRC
को इंगित करें। उदाहरण के लिए:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
निर्माण के समय, BOARD_SYSTEM_DLKM_SRC
में सूचीबद्ध मॉड्यूल $ANDROID_PRODUCT_OUT/system_dlkm
में स्थापित किए जाते हैं।
एंड्रॉइड 14 के लिए
हमने अन्य *_dlkm
विभाजनों के लिए उपयोग किए जा रहे मैक्रोज़ ( BOARD_*_KERNEL_MODULES
) के साथ कार्यान्वयन को सुव्यवस्थित किया है। डिवाइस के लिए आवश्यक GKI मॉड्यूल की सूची BOARD_SYSTEM_KERNEL_MODULES
मैक्रो द्वारा संदर्भित की जानी चाहिए। निर्माण के समय ये मॉड्यूल $ANDROID_PRODUCT_OUT/system_dlkm
में स्थापित होते हैं। vendor_dlkm
विभाजन में कोई भी मॉड्यूल जिसकी system_dlkm
विभाजन में मॉड्यूल पर निर्भरता है, vendor_dlkm
विभाजन के लिए modules.dep
फ़ाइल में सही संदर्भ उत्पन्न करता है। modules.dep
द्वारा दर्शाई गई इस क्रॉस पार्टीशन निर्भरता के कारण, जब एक विक्रेता मॉड्यूल लोड हो जाता है, तो कोई भी आवश्यक जीकेआई मॉड्यूल स्वचालित रूप से लोड हो जाता है।
उदाहरण के लिए, प्रीबिल्ट से GKI arm64
कर्नेल 5.15
के लिए system_dlkm
विभाजन पर सभी GKI मॉड्यूल स्थापित करने के लिए:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
रनटाइम पर system_dlkm
माउंट करें
केवल पढ़ने योग्य फ़ाइल सिस्टम के रूप में उपयोग किए जा रहे फ़ाइल सिस्टम के आधार पर, रनटाइम पर system_dlkm
विभाजन को माउंट करने के लिए अपने fstab
में निम्नलिखित जोड़ें:
ext4
केवल पढ़ने योग्य फ़ाइल सिस्टम के रूप में
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
erofs
केवल पढ़ने योग्य फ़ाइल सिस्टम के रूप में
system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
विभाजन माउंटिंग और मॉड्यूल लोडिंग
first_stage_init
के दौरान, system_dlkm
विभाजन को /system_dlkm
में केवल पढ़ने योग्य फ़ाइल सिस्टम के रूप में माउंट किया जाता है। एक सफल माउंट पर, /system/lib/modules
की ओर इंगित करने वाले /system_dlkm/lib/modules
पर प्रतीकात्मक लिंक उपलब्ध हैं।
एक विक्रेता प्रक्रिया, जैसे कि .rc
स्क्रिप्ट, फिर modules.load
में निर्दिष्ट क्रम के आधार पर कर्नेल मॉड्यूल को लोड कर सकती है। विक्रेता प्रक्रिया को मॉड्यूल लोड करने के लिए प्रतीकात्मक लिंक /system/lib/modules
उपयोग करना चाहिए। यदि आवश्यक हो, तो विक्रेता प्रक्रिया बाद में भी मॉड्यूल लोड कर सकती है।
SELinux
system_dlkm
विभाजन की प्रत्येक फ़ाइल को system_dlkm_file
के फ़ाइल संदर्भ के साथ लेबल किया गया है। GKI मॉड्यूल फ़ाइल को system_dlkm
विभाजन में लोड करने के लिए, मॉड्यूल लोड करने के लिए जिम्मेदार विक्रेता प्रक्रिया को विक्रेता डोमेन में एक sepolicy
आवश्यकता होती है।
उदाहरण के लिए, जीकेआई मॉड्यूल को लोड करने के लिए कटलफिश द्वारा उपयोग किए जाने वाले dlkm_loader
shared/sepolicy/vendor/dlkm_loader.te
पर पॉलिसी फ़ाइल में निम्नलिखित अनुमतियाँ हैं:
allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;
सिस्टम-डीएलकेएम विभाजन को मान्य करें
Google system_dlkm
विभाजन को सत्यापित करने के लिए GKI VTS परीक्षण केस प्रदान करता है। परीक्षण को मैन्युअल रूप से शुरू करने के लिए, निम्नलिखित atest
कमांड का उपयोग करें:
atest -c vts_dlkm_partition_test