इस पेज पर, किसी नई कर्नेल सुविधा को जीकेआई मॉड्यूल के तौर पर कॉन्फ़िगर करने या पहले से मौजूद कर्नेल की किसी सुविधा को जीकेआई मॉड्यूल के तौर पर कॉन्फ़िगर करने का तरीका बताया गया है.
किसी नई सुविधा को जीकेआई मॉड्यूल के तौर पर कॉन्फ़िगर करना
नई सुविधा के लिए,
gki_defconfigमें बदलाव करें और कर्नेल की ज़रूरी सुविधा के कॉन्फ़िग आइटम कोnसे बदलकरm(=m) पर सेट करें. यह सेटिंग,arch/arm64/configs/gki_defconfigऔरarch/x86/configs/gki_defconfigदोनों में सेट करें.सुविधा के लिए जनरेट की गई KO (
.ko) फ़ाइलों को, यहां दी गई फ़ाइल के_COMMON_GKI_MODULES_LISTसेक्शन में जोड़ें. फ़ाइलों को क्रम से लगाएं. अगर आपको जनरेट की गई सभी फ़ाइलों के बारे में पक्का नहीं है, तो बिल्ड फ़ेल हो जाता है. साथ ही, सूची में जोड़ी जाने वाली सभी ज़रूरी KO फ़ाइलों की सूची दिखती है.android17-6.18और इसके बाद के वर्शन में,common/bazel/modules_private.bzlमें आइटम जोड़ें.android16-6.12और इससे पहले के वर्शन में,common/modules.bzlमें आइटम जोड़ें.
Android 14 के लिए, चरण 2 में KO फ़ाइलों का वही सेट
common/android/gki_{ARCH}_protected_modulesमें जोड़ें. इन फ़ाइलों को रनटाइम पर बाइनरी सर्च के लिए बढ़ते क्रम में लगाया जाता है, ताकि मॉड्यूल को सुरक्षित जीकेआई मॉड्यूल के तौर पर तय किया जा सके.Android 14 और 15 के लिए, एक्सपोर्ट की सूची को अपडेट करें, ताकि इसमें जोड़े गए नए एक्सपोर्ट शामिल हों
common/android/abi_gki_protected_exports_ARCHITECTURE. उदाहरण के लिए, सूची को अपडेट करने के लिए,tools/bazel run //common:kernel_aarch64_abi_update_protected_exportsके लिएaarch64चलाएं.पक्का करें कि चरण 2 में जोड़ी गई नई KO फ़ाइलें, कर्नेल के
out/<androidX-Y.Z>/dist/system_dlkm.imgऔरout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzमें कॉपी की गई हों.system_dlkm_staging_archive.tar.gzसंग्रह में मौजूद मॉड्यूल का इस्तेमाल, प्लैटफ़ॉर्म बिल्ड मेंsystem_dlkm.imgजनरेट करने के लिए इनपुट के तौर पर किया जा सकता है.समीक्षा के लिए, अपने बदलाव सबमिट करें. जीकेआई मॉड्यूल, कर्नेल की ऐसी सुविधा है जो सिर्फ़ Android में काम करती है. इसलिए, मॉड्यूल कन्वर्ज़न पैच को अपस्ट्रीम में सबमिट करने की ज़रूरत नहीं होती. हालांकि, Android कॉमन कर्नेल (एसीके) पैच सबमिट करने के लिए, आपको अन्य दिशा-निर्देशों का पालन करना होगा .
कर्नेल की किसी सुविधा को जीकेआई मॉड्यूल के तौर पर कॉन्फ़िगर करना
कर्नेल की पहले से मौजूद किसी सुविधा के लिए,
gki_defconfigमें बदलाव करें और कर्नेल की ज़रूरी सुविधा के कॉन्फ़िग आइटम कोyसे बदलकरm(=m) पर सेट करें. यह सेटिंग,arch/arm64/configs/gki_defconfigऔरarch/x86/configs/gki_defconfigदोनों में सेट करें.सुविधा के लिए जनरेट की गई KO (
.ko) फ़ाइलों को, यहां दी गई फ़ाइल के_COMMON_GKI_MODULES_LISTसेक्शन में जोड़ें. फ़ाइलों को क्रम से लगाएं. अगर आपको जनरेट की गई सभी फ़ाइलों के बारे में पक्का नहीं है, तो बिल्ड फ़ेल हो जाता है. साथ ही, सूची में जोड़ी जाने वाली सभी ज़रूरी KO फ़ाइलों की सूची दिखती है.android17-6.18और इसके बाद के वर्शन में,common/bazel/modules_private.bzlमें आइटम जोड़ें.android16-6.12और इससे पहले के वर्शन में, `common/modules.bzl` में आइटम जोड़ें.
Android 14 के लिए, चरण 2 में KO फ़ाइलों का वही सेट
common/android/gki_{ARCH}_protected_modulesमें जोड़ें. इन फ़ाइलों को रनटाइम पर बाइनरी सर्च के लिए बढ़ते क्रम में लगाया जाता है, ताकि मॉड्यूल को सुरक्षित जीकेआई मॉड्यूल के तौर पर तय किया जा सके.Android 14 और 15 के लिए, सुरक्षित एक्सपोर्ट की सूची को अपडेट करें, ताकि इसमें जोड़े गए नए मॉड्यूल के एक्सपोर्ट शामिल हों
common/android/abi_gki_protected_exports_{ARCH}का इस्तेमाल करकेtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsके लिएaarch64.पक्का करें कि चरण 2 में बदले गए मॉड्यूल की नई KO फ़ाइलें, कर्नेल के
out/<androidX-Y.Z>/dist/system_dlkm.imgऔरout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzमें कॉपी की गई हों.system_dlkm_staging_archive.tar.gzसंग्रह में मौजूद मॉड्यूल का इस्तेमाल, प्लैटफ़ॉर्म बिल्ड मेंsystem_dlkm.imgजनरेट करने के लिए इनपुट के तौर पर किया जा सकता है.समीक्षा के लिए, अपने बदलाव सबमिट करें. जीकेआई मॉड्यूल, कर्नेल की ऐसी सुविधा है जो सिर्फ़ Android में काम करती है. इसलिए, मॉड्यूल कन्वर्ज़न पैच को अपस्ट्रीम में सबमिट करने की ज़रूरत नहीं होती. हालांकि, Android कॉमन कर्नेल (एसीके) पैच सबमिट करने के लिए, आपको अन्य दिशा-निर्देशों का पालन करना होगा.
सुरक्षित जीकेआई मॉड्यूल को असुरक्षित में बदलना
Android 15 और इसके बाद के वर्शन के लिए, सुरक्षित से असुरक्षित में बदले जा रहे मॉड्यूल को, यहां दी गई फ़ाइल में मौजूद
_COMMON_UNPROTECTED_MODULES_LISTसूची में जोड़ें:android17-6.18और इसके बाद के वर्शन में,common/bazel/modules_private.bzlमें आइटम जोड़ें.android16-6.12और इससे पहले के वर्शन में,common/modules.bzlमें आइटम जोड़ें.
Android 14 के लिए, सुरक्षित से असुरक्षित में बदले जा रहे मॉड्यूल को,
common/android/gki_protected_modulesमें मौजूद सुरक्षित मॉड्यूल की सूची से हटाएं.Android 14 और 15 के लिए, सुरक्षित एक्सपोर्ट की सूची को अपडेट करें, ताकि इसमें बदले गए असुरक्षित मॉड्यूल के एक्सपोर्ट शामिल न हों
common/android/abi_gki_protected_exports_{ARCH}का इस्तेमाल करके,tools/bazel run //common:kernel_aarch64_abi_update_protected_exportsके लिएaarch64.समीक्षा के लिए, अपने बदलाव सबमिट करें. जीकेआई मॉड्यूल, कर्नेल की ऐसी सुविधा है जो सिर्फ़ Android में काम करती है. इसलिए, मॉड्यूल कन्वर्ज़न पैच को अपस्ट्रीम में सबमिट करने की ज़रूरत नहीं होती. हालांकि, Android कॉमन कर्नेल (एसीके) पैच सबमिट करने के लिए, आपको अन्य दिशा-निर्देशों का पालन करना होगा.
जीकेआई मॉड्यूल के सिंबल से जुड़ी गड़बड़ी को ठीक करने के लिए क्विक गाइड
जब बिना हस्ताक्षर वाले मॉड्यूल, जीकेआई मॉड्यूल के लिए लागू सिंबल सुरक्षा का उल्लंघन करते हैं, तो मॉड्यूल लोड करते समय दो तरह की गड़बड़ियां आ सकती हैं. इससे मॉड्यूल लोड नहीं हो पाता.
1. सुरक्षित सिंबल का इस्तेमाल करने वाला बिना हस्ताक्षर वाला मॉड्यूल
गड़बड़ी:
module: Protected symbol: some_kernel_function (err -13)
वजह:
module.ko फ़ाइल, वेंडर का बिना हस्ताक्षर वाला मॉड्यूल है. यह लोड होने के दौरान, वेंडर सिंबल की सूची में शामिल हुए बिना, जीकेआई मॉड्यूल के एक्सपोर्ट किए गए सिंबल some_kernel_function को हल करने की कोशिश करता है.
ठीक करने का तरीका:
अगर module.ko सुरक्षित जीकेआई मॉड्यूल नहीं है, तो सिंबल की सूची को अपडेट करने पर गड़बड़ी ठीक हो जाती है. ऐसा इसलिए, क्योंकि इसमें वेंडर सिंबल की सूची में some_kernel_function शामिल होता है.
इसके अलावा, module.ko के जीकेआई वर्शन का इस्तेमाल करें.
2. सुरक्षित सिंबल एक्सपोर्ट करने वाला बिना हस्ताक्षर वाला मॉड्यूल
गड़बड़ी:
module: exports protected symbol some_kernel_function
वजह:
some_kernel_function को एक्सपोर्ट करने वाला मॉड्यूल, सुरक्षित जीकेआई मॉड्यूल है. साथ ही, module.ko शायद उस मॉड्यूल का बिना हस्ताक्षर वाला कस्टम वर्शन है. जब module.ko, some_kernel_function को एक्सपोर्ट करने की कोशिश करता है, तो लोड नहीं हो पाता. ऐसा इसलिए, क्योंकि इसे सिर्फ़ हस्ताक्षर वाला जीकेआई मॉड्यूल ही एक्सपोर्ट कर सकता है. इस दौरान, यह मैसेज दिखता है.
ठीक करने का तरीका:
अगर बिना हस्ताक्षर वाला मॉड्यूल, कस्टम वर्शन है, तो some_kernel_function को एक्सपोर्ट करने वाले मॉड्यूल के जीकेआई वर्शन का इस्तेमाल करके, इस गड़बड़ी को ठीक किया जा सकता है.