GKI मॉड्यूल विभाजन लागू करें

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 जोड़ने के लिए निम्नलिखित चरणों का पालन करें:

  1. 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
    
  2. विभाजन सूची में, system_dlkm जोड़ें: BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm

  3. (वैकल्पिक) ए/बी और वर्चुअल ए/बी डिवाइस के लिए, अपने डिवाइस के लिए 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