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

इस पेज पर, 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. (ज़रूरी नहीं) Android 15 और उसके बाद के वर्शन के लिए, यह चरण छोड़ें.

    दूसरे चरण में बताई गई KO फ़ाइलों के उसी सेट को common/android/gki_{ARCH}_protected_modules में जोड़ें. इसे रनटाइम के दौरान, बाइनरी सर्च के लिए, बढ़ते क्रम में क्रम से लगाया गया है. इससे मॉड्यूल को सुरक्षित GKI मॉड्यूल के तौर पर दिखाया जा सकता है.

  4. एक्सपोर्ट की सूची अपडेट करें, ताकि इसमें common/android/abi_gki_protected_exports_ARCHITECTURE में जोड़े गए नए एक्सपोर्ट शामिल हों. उदाहरण के लिए, सूची को अपडेट करने के लिए, tools/bazel run //common:kernel_aarch64_abi_update_protected_exports के लिए aarch64 चलाएं. सुरक्षित GKI मॉड्यूल के तौर पर चुने गए मॉड्यूल को, अब भी Google से मंज़ूरी लेनी होगी, ताकि उन्हें आधिकारिक तौर पर सुरक्षित मॉड्यूल के तौर पर दिखाया जा सके.

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

सुरक्षित GKI मॉड्यूल को सुरक्षित नहीं किए गए मॉड्यूल में बदलना

    • Android 14 और उससे पहले के वर्शन के लिए: common/android/gki_protected_modules पर, सुरक्षित किए गए मॉड्यूल की सूची से, सुरक्षित किए जा रहे मॉड्यूल को हटाएं.
    • Android 15 और उसके बाद के वर्शन के लिए: common/modules.bzl फ़ाइल में COMMON_UNPROTECTED_MODULES_LIST सूची में, उस मॉड्यूल को जोड़ें जिसे सुरक्षित से असुरक्षित में बदला जा रहा है.
  1. सुरक्षित किए गए एक्सपोर्ट की सूची अपडेट करें, ताकि aarch64 के लिए tools/bazel run //common:kernel_aarch64_abi_update_protected_exports का इस्तेमाल करके, common/android/abi_gki_protected_exports_{ARCH} में नए सिरे से बदले गए असुरक्षित मॉड्यूल को बाहर रखा जा सके.

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

GKI मॉड्यूल के सिंबल के उल्लंघन को ठीक करने के बारे में क्विक गाइड

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

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 वर्शन का इस्तेमाल करके, इस गड़बड़ी को ठीक किया जा सकता है.