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

इस पेज पर, किसी नई कर्नेल सुविधा को जीकेआई मॉड्यूल के तौर पर कॉन्फ़िगर करने या पहले से मौजूद कर्नेल की किसी सुविधा को जीकेआई मॉड्यूल के तौर पर कॉन्फ़िगर करने का तरीका बताया गया है.

किसी नई सुविधा को जीकेआई मॉड्यूल के तौर पर कॉन्फ़िगर करना

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

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

    • android17-6.18 और इसके बाद के वर्शन में, common/bazel/modules_private.bzl में आइटम जोड़ें.
    • android16-6.12 और इससे पहले के वर्शन में, common/modules.bzl में आइटम जोड़ें.
  3. Android 14 के लिए, चरण 2 में KO फ़ाइलों का वही सेट common/android/gki_{ARCH}_protected_modules में जोड़ें. इन फ़ाइलों को रनटाइम पर बाइनरी सर्च के लिए बढ़ते क्रम में लगाया जाता है, ताकि मॉड्यूल को सुरक्षित जीकेआई मॉड्यूल के तौर पर तय किया जा सके.

  4. Android 14 और 15 के लिए, एक्सपोर्ट की सूची को अपडेट करें, ताकि इसमें जोड़े गए नए एक्सपोर्ट शामिल हों common/android/abi_gki_protected_exports_ARCHITECTURE. उदाहरण के लिए, सूची को अपडेट करने के लिए, tools/bazel run //common:kernel_aarch64_abi_update_protected_exports के लिए aarch64 चलाएं.

  5. पक्का करें कि चरण 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 जनरेट करने के लिए इनपुट के तौर पर किया जा सकता है.

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

कर्नेल की किसी सुविधा को जीकेआई मॉड्यूल के तौर पर कॉन्फ़िगर करना

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

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

    • android17-6.18 और इसके बाद के वर्शन में, common/bazel/modules_private.bzl में आइटम जोड़ें.
    • android16-6.12 और इससे पहले के वर्शन में, `common/modules.bzl` में आइटम जोड़ें.
  3. Android 14 के लिए, चरण 2 में KO फ़ाइलों का वही सेट common/android/gki_{ARCH}_protected_modules में जोड़ें. इन फ़ाइलों को रनटाइम पर बाइनरी सर्च के लिए बढ़ते क्रम में लगाया जाता है, ताकि मॉड्यूल को सुरक्षित जीकेआई मॉड्यूल के तौर पर तय किया जा सके.

  4. Android 14 और 15 के लिए, सुरक्षित एक्सपोर्ट की सूची को अपडेट करें, ताकि इसमें जोड़े गए नए मॉड्यूल के एक्सपोर्ट शामिल हों common/android/abi_gki_protected_exports_{ARCH} का इस्तेमाल करके tools/bazel run //common:kernel_aarch64_abi_update_protected_exports के लिए aarch64.

  5. पक्का करें कि चरण 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 जनरेट करने के लिए इनपुट के तौर पर किया जा सकता है.

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

सुरक्षित जीकेआई मॉड्यूल को असुरक्षित में बदलना

  1. Android 15 और इसके बाद के वर्शन के लिए, सुरक्षित से असुरक्षित में बदले जा रहे मॉड्यूल को, यहां दी गई फ़ाइल में मौजूद _COMMON_UNPROTECTED_MODULES_LIST सूची में जोड़ें:

    • android17-6.18 और इसके बाद के वर्शन में, common/bazel/modules_private.bzl में आइटम जोड़ें.
    • android16-6.12 और इससे पहले के वर्शन में, common/modules.bzl में आइटम जोड़ें.
  2. Android 14 के लिए, सुरक्षित से असुरक्षित में बदले जा रहे मॉड्यूल को, common/android/gki_protected_modules में मौजूद सुरक्षित मॉड्यूल की सूची से हटाएं.

  3. Android 14 और 15 के लिए, सुरक्षित एक्सपोर्ट की सूची को अपडेट करें, ताकि इसमें बदले गए असुरक्षित मॉड्यूल के एक्सपोर्ट शामिल न हों common/android/abi_gki_protected_exports_{ARCH} का इस्तेमाल करके, tools/bazel run //common:kernel_aarch64_abi_update_protected_exports के लिए aarch64.

  4. समीक्षा के लिए, अपने बदलाव सबमिट करें. जीकेआई मॉड्यूल, कर्नेल की ऐसी सुविधा है जो सिर्फ़ 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 को एक्सपोर्ट करने वाले मॉड्यूल के जीकेआई वर्शन का इस्तेमाल करके, इस गड़बड़ी को ठीक किया जा सकता है.