कर्नेल सुविधाओं को GKI मॉड्यूल के रूप में कॉन्फ़िगर करें

यह पृष्ठ एक नई कर्नेल सुविधा को GKI मॉड्यूल के रूप में कॉन्फ़िगर करने या मौजूदा अंतर्निहित कर्नेल सुविधा को GKI मॉड्यूल के रूप में कॉन्फ़िगर करने का तरीका बताता है।

GKI मॉड्यूल के रूप में एक नई सुविधा कॉन्फ़िगर करें

  1. नई सुविधा के लिए, gki_defconfig को संपादित करें और आवश्यक कर्नेल सुविधा के कॉन्फ़िगरेशन आइटम को n से m ( =m ) पर सेट करें। इस सेटिंग को arch/arm64/configs/gki_defconfig और arch/x86/configs/gki_defconfig दोनों में सेट करें।

  2. सुविधा के लिए जेनरेट की गई KO ( .ko ) फ़ाइलों को common/modules.bzl के COMMON_GKI_MODULES_LIST अनुभाग में जोड़ें। फ़ाइलों को क्रमबद्ध क्रम में जोड़ें। यदि आप जेनरेट की गई सभी फ़ाइलों के बारे में अनिश्चित हैं, तो बिल्ड विफल हो जाता है और सूची में जोड़े जाने वाली सभी आवश्यक KO फ़ाइलों को सूचीबद्ध करता है।

  3. मॉड्यूल को संरक्षित GKI मॉड्यूल के रूप में नामित करने के लिए, रनटाइम पर बाइनरी खोज के लिए आरोही क्रम में क्रमबद्ध, चरण 2 से KO फ़ाइलों का एक ही सेट, common/android/gki_{ARCH}_protected_modules में जोड़ें। aarch64 के लिए tools/bazel run //common:kernel_aarch64_abi_update_protected_exports उपयोग करके common/android/abi_gki_protected_exports_{ARCH} में नए जोड़े गए मॉड्यूल से निर्यात को शामिल करने के लिए संरक्षित निर्यात की सूची को अपडेट करें। संरक्षित जीकेआई मॉड्यूल के रूप में नामित मॉड्यूल को अभी भी आधिकारिक संरक्षित मॉड्यूल होने के लिए Google द्वारा अनुमोदित किया जाना चाहिए।

  4. सुनिश्चित करें कि चरण 2 से नई जोड़ी गई KO फ़ाइलें कर्नेल के out/<androidX-YZ>/dist/system_dlkm.img और out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz पर कॉपी की गई हैं। प्लेटफ़ॉर्म बिल्ड में system_dlkm.img उत्पन्न करने के लिए system_dlkm_staging_archive.tar.gz संग्रह में मॉड्यूल को इनपुट के रूप में उपयोग किया जा सकता है।

  5. समीक्षा के लिए अपने परिवर्तन सबमिट करें. जीकेआई मॉड्यूल एक एंड्रॉइड-केवल कर्नेल सुविधा है, इसलिए मॉड्यूल रूपांतरण पैच को अपस्ट्रीम सबमिट करने की आवश्यकता नहीं है। हालाँकि, आपको एंड्रॉइड कॉमन कर्नेल (ACK) पैच सबमिट करने के लिए अन्य दिशानिर्देशों का पालन करना होगा।

कर्नेल अंतर्निहित सुविधा को GKI मॉड्यूल के रूप में कॉन्फ़िगर करें

  1. मौजूदा अंतर्निहित कर्नेल सुविधा के लिए, gki_defconfig संपादित करें और आवश्यक कर्नेल सुविधा के कॉन्फ़िगरेशन आइटम को y से m ( =m ) पर सेट करें। इस सेटिंग को arch/arm64/configs/gki_defconfig और arch/x86/configs/gki_defconfig दोनों में सेट करें।

  2. सुविधा के लिए जेनरेट की गई KO ( .ko ) फ़ाइलों को common/modules.bzl के COMMON_GKI_MODULES_LIST अनुभाग में जोड़ें। फ़ाइलों को क्रमबद्ध क्रम में जोड़ें। यदि आप जेनरेट की गई सभी फ़ाइलों के बारे में अनिश्चित हैं, तो बिल्ड विफल हो जाता है और सूची में जोड़े जाने वाली सभी आवश्यक KO फ़ाइलों को सूचीबद्ध करता है।

  3. मॉड्यूल को संरक्षित GKI मॉड्यूल के रूप में नामित करने के लिए, रनटाइम पर बाइनरी खोज के लिए आरोही क्रम में क्रमबद्ध, चरण 2 से KO फ़ाइलों का एक ही सेट, common/android/gki_{ARCH}_protected_modules में जोड़ें। aarch64 के लिए tools/bazel run //common:kernel_aarch64_abi_update_protected_exports उपयोग करके common/android/abi_gki_protected_exports_{ARCH} में नए जोड़े गए मॉड्यूल से निर्यात को शामिल करने के लिए संरक्षित निर्यात की सूची को अपडेट करें। संरक्षित जीकेआई मॉड्यूल के रूप में नामित मॉड्यूल को अभी भी आधिकारिक संरक्षित मॉड्यूल होने के लिए Google द्वारा अनुमोदित किया जाना चाहिए।

  4. सुनिश्चित करें कि चरण 2 से नई परिवर्तित मॉड्यूल KO फ़ाइलें कर्नेल के out/<androidX-YZ>/dist/system_dlkm.img और out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz पर कॉपी की गई हैं। प्लेटफ़ॉर्म बिल्ड में system_dlkm.img उत्पन्न करने के लिए system_dlkm_staging_archive.tar.gz संग्रह में मॉड्यूल को इनपुट के रूप में उपयोग किया जा सकता है।

  5. समीक्षा के लिए अपने परिवर्तन सबमिट करें. जीकेआई मॉड्यूल एक एंड्रॉइड-केवल कर्नेल सुविधा है, इसलिए मॉड्यूल रूपांतरण पैच को अपस्ट्रीम सबमिट करने की आवश्यकता नहीं है। हालाँकि, आपको एंड्रॉइड कॉमन कर्नेल (ACK) पैच सबमिट करने के लिए अन्य दिशानिर्देशों का पालन करना होगा।

संरक्षित GKI मॉड्यूल को असुरक्षित में बदलें

  1. common/android/gki_protected_modules पर संरक्षित मॉड्यूल की सूची से संरक्षित से असुरक्षित में परिवर्तित किए जा रहे मॉड्यूल को हटा दें।

  2. aarch64 के लिए tools/bazel run //common:kernel_aarch64_abi_update_protected_exports उपयोग करके common/android/abi_gki_protected_exports_{ARCH} में नए परिवर्तित असुरक्षित मॉड्यूल से निर्यात को बाहर करने के लिए संरक्षित निर्यात की सूची को अपडेट करें।

  3. समीक्षा के लिए अपने परिवर्तन सबमिट करें. जीकेआई मॉड्यूल एक एंड्रॉइड-केवल कर्नेल सुविधा है, इसलिए मॉड्यूल रूपांतरण पैच को अपस्ट्रीम सबमिट करने की आवश्यकता नहीं है। हालाँकि, आपको एंड्रॉइड कॉमन कर्नेल (ACK) पैच सबमिट करने के लिए अन्य दिशानिर्देशों का पालन करना होगा।

जीकेआई मॉड्यूल प्रतीक उल्लंघन समाधान त्वरित गाइड

जब अहस्ताक्षरित मॉड्यूल जीकेआई मॉड्यूल के लिए प्रतीक सुरक्षा का उल्लंघन करते हैं, तो मॉड्यूल लोडिंग के दौरान दो प्रकार की त्रुटियों का सामना करना पड़ सकता है, जिसके परिणामस्वरूप विफलता हो सकती है।

1. संरक्षित प्रतीक का उपयोग कर अहस्ताक्षरित मॉड्यूल

गलती:

module: Protected symbol: some_kernel_function (err -13)

कारण:

module.ko फ़ाइल एक अहस्ताक्षरित विक्रेता मॉड्यूल है और लोडिंग के दौरान GKI मॉड्यूल निर्यातित प्रतीक some_kernel_function को विक्रेता प्रतीक सूची में सूचीबद्ध किए बिना हल करने का प्रयास करता है।

संकल्प:

यदि module.ko एक संरक्षित जीकेआई मॉड्यूल नहीं है, तो प्रतीक सूची को अपडेट करने से विक्रेता प्रतीक सूची में some_kernel_function शामिल करके त्रुटि का समाधान हो जाएगा। वैकल्पिक रूप से, module.ko के GKI संस्करण का उपयोग करें।

2. संरक्षित प्रतीक को निर्यात करने वाला अहस्ताक्षरित मॉड्यूल

गलती:

module: exports protected symbol some_kernel_function

कारण:

some_kernel_function को निर्यात करने वाला मॉड्यूल एक संरक्षित GKI मॉड्यूल है, और module.ko संभवतः उस मॉड्यूल का एक अहस्ताक्षरित कस्टम संस्करण है। जब module.ko some_kernel_function निर्यात करने का प्रयास करता है, जिसे केवल हस्ताक्षरित GKI मॉड्यूल द्वारा निर्यात किया जा सकता है, तो इस संदेश के साथ लोडिंग विफल हो जाती है।

संकल्प:

इसे मॉड्यूल के GKI संस्करण का उपयोग करके ठीक किया जा सकता है जो some_kernel_function निर्यात करता है, यदि अहस्ताक्षरित मॉड्यूल एक कस्टम संस्करण है।