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

इस पेज पर, 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. दूसरे चरण में बताई गई KO फ़ाइलों के उसी सेट को common/android/gki_{ARCH}_protected_modules में जोड़ें. इसे रनटाइम के दौरान, बाइनरी सर्च के लिए, बढ़ते क्रम में क्रम से लगाया गया है. इससे मॉड्यूल को सुरक्षित GKI मॉड्यूल के तौर पर दिखाया जा सकता है. सुरक्षित किए गए एक्सपोर्ट की सूची अपडेट करें, ताकि aarch64 के लिए tools/bazel run //common:kernel_aarch64_abi_update_protected_exports का इस्तेमाल करके, common/android/abi_gki_protected_exports_{ARCH} में जोड़े गए नए मॉड्यूल के एक्सपोर्ट को शामिल किया जा सके. सुरक्षित जीकेआई मॉड्यूल के तौर पर तय किए गए मॉड्यूल को, आधिकारिक तौर पर सुरक्षित मॉड्यूल बनने के लिए Google से मंज़ूरी लेनी होगी.

  4. पक्का करें कि दूसरे चरण में जोड़ी गई नई 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 जनरेट करने के लिए इनपुट के तौर पर किया जा सकता है.

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

Kernel में पहले से मौजूद सुविधा को 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. मॉड्यूल को सुरक्षित जीकेआई मॉड्यूल के तौर पर तय करने के लिए, दूसरे चरण से 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} में जोड़े गए नए मॉड्यूल के एक्सपोर्ट को शामिल किया जा सके. सुरक्षित GKI मॉड्यूल के तौर पर चुने गए मॉड्यूल को, अब भी Google से मंज़ूरी लेनी होगी, ताकि उन्हें आधिकारिक तौर पर सुरक्षित मॉड्यूल के तौर पर दिखाया जा सके.

  4. पक्का करें कि दूसरे चरण में बदली गई मॉड्यूल 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 जनरेट करने के लिए इनपुट के तौर पर किया जा सकता है.

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

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

  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. अपने बदलावों को समीक्षा के लिए सबमिट करें. GKI मॉड्यूल, सिर्फ़ Android के लिए उपलब्ध कर्नेल की सुविधा है. इसलिए, मॉड्यूल कन्वर्ज़न पैच को अपस्ट्रीम सबमिट करने की ज़रूरत नहीं है. हालांकि, Android Common Kernel (ACK) पैच सबमिट करने के लिए, आपको अन्य दिशा-निर्देशों का पालन करना होगा.

जीकेआई मॉड्यूल सिंबल से जुड़ी समस्या को हल करने से जुड़ी आसान गाइड

जब साइन नहीं किए गए मॉड्यूल, जीकेआई मॉड्यूल के लिए चिह्नों की सुरक्षा का उल्लंघन करते हैं, तो मॉड्यूल लोड होने के दौरान दो तरह की गड़बड़ियां हो सकती हैं. इनसे गड़बड़ी हो सकती है.

1. सुरक्षित सिंबल का इस्तेमाल करके साइन नहीं किया गया मॉड्यूल

गड़बड़ी:

module: Protected symbol: some_kernel_function (err -13)

वजह:

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

समाधान:

अगर module.ko, सुरक्षित GKI मॉड्यूल नहीं है, तो वेंडर के सिंबल की सूची में 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 को एक्सपोर्ट करने की कोशिश करता है, तो यह मैसेज दिखता है. some_kernel_function को सिर्फ़ हस्ताक्षर किए गए GKI मॉड्यूल से एक्सपोर्ट किया जा सकता है.

रिज़ॉल्यूशन:

अगर हस्ताक्षर नहीं किया गया मॉड्यूल कस्टम वर्शन है, तो some_kernel_function एक्सपोर्ट करने वाले मॉड्यूल के GKI वर्शन का इस्तेमाल करके, इस गड़बड़ी को ठीक किया जा सकता है.