इस पेज पर, GKI मॉड्यूल के तौर पर नई कर्नेल सुविधा को कॉन्फ़िगर करने या पहले से मौजूद कर्नेल सुविधा को GKI मॉड्यूल के तौर पर कॉन्फ़िगर करने का तरीका बताया गया है.
किसी नई सुविधा को GKI मॉड्यूल के तौर पर कॉन्फ़िगर करना
नई सुविधा के लिए,
gki_defconfig
में बदलाव करें और ज़रूरी कर्नेल सुविधा के कॉन्फ़िगरेशन आइटम कोn
सेm
(=m
) पर सेट करें. इस सेटिंग कोarch/arm64/configs/gki_defconfig
औरarch/x86/configs/gki_defconfig
, दोनों में सेट करें.सुविधा के लिए जनरेट की गई KO (
.ko
) फ़ाइलों कोcommon/modules.bzl
केCOMMON_GKI_MODULES_LIST
सेक्शन में जोड़ें. फ़ाइलों को क्रम से जोड़ें. अगर आपको जनरेट की गई सभी फ़ाइलों के बारे में पता नहीं है, तो बिल्ड पूरा नहीं होता और सूची में जोड़ी जाने वाली सभी ज़रूरी KO फ़ाइलों की सूची दिखती है.(ज़रूरी नहीं) Android 15 और उसके बाद के वर्शन के लिए, यह चरण छोड़ें.
दूसरे चरण में बताई गई KO फ़ाइलों के उसी सेट को
common/android/gki_{ARCH}_protected_modules
में जोड़ें. इसे रनटाइम के दौरान, बाइनरी सर्च के लिए, बढ़ते क्रम में क्रम से लगाया गया है. इससे मॉड्यूल को सुरक्षित GKI मॉड्यूल के तौर पर दिखाया जा सकता है.एक्सपोर्ट की सूची अपडेट करें, ताकि इसमें
common/android/abi_gki_protected_exports_ARCHITECTURE
में जोड़े गए नए एक्सपोर्ट शामिल हों. उदाहरण के लिए, सूची को अपडेट करने के लिए,tools/bazel run //common:kernel_aarch64_abi_update_protected_exports
के लिएaarch64
चलाएं. सुरक्षित GKI मॉड्यूल के तौर पर चुने गए मॉड्यूल को, अब भी Google से मंज़ूरी लेनी होगी, ताकि उन्हें आधिकारिक तौर पर सुरक्षित मॉड्यूल के तौर पर दिखाया जा सके.पक्का करें कि दूसरे चरण में जोड़ी गई नई 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
जनरेट करने के लिए इनपुट के तौर पर किया जा सकता है.अपने बदलावों को समीक्षा के लिए सबमिट करें. GKI मॉड्यूल, सिर्फ़ Android के लिए उपलब्ध कर्नेल की सुविधा है. इसलिए, मॉड्यूल कन्वर्ज़न पैच को अपस्ट्रीम सबमिट करने की ज़रूरत नहीं है. हालांकि, Android Common Kernel (ACK) पैच सबमिट करने के लिए, आपको अन्य दिशा-निर्देशों का पालन करना होगा.
Kernel में पहले से मौजूद सुविधा को GKI मॉड्यूल के तौर पर कॉन्फ़िगर करना
पहले से मौजूद बिल्ट-इन कर्नेल सुविधा के लिए,
gki_defconfig
में बदलाव करें और ज़रूरी कर्नेल सुविधा के कॉन्फ़िगरेशन आइटम कोy
सेm
(=m
) पर सेट करें. इस सेटिंग कोarch/arm64/configs/gki_defconfig
औरarch/x86/configs/gki_defconfig
, दोनों में सेट करें.सुविधा के लिए जनरेट की गई KO (
.ko
) फ़ाइलों कोcommon/modules.bzl
केCOMMON_GKI_MODULES_LIST
सेक्शन में जोड़ें. फ़ाइलों को क्रम से जोड़ें. अगर आपको जनरेट की गई सभी फ़ाइलों के बारे में पता नहीं है, तो बिल्ड पूरा नहीं होता और सूची में जोड़ने के लिए ज़रूरी सभी KO फ़ाइलों की सूची दिखती है.दूसरे चरण में बताई गई 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 से मंज़ूरी लेनी होगी, ताकि उन्हें आधिकारिक तौर पर सुरक्षित मॉड्यूल के तौर पर दिखाया जा सके.पक्का करें कि दूसरे चरण में बदली गई मॉड्यूल 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
जनरेट करने के लिए इनपुट के तौर पर किया जा सकता है.अपने बदलावों को समीक्षा के लिए सबमिट करें. GKI मॉड्यूल, सिर्फ़ Android के लिए उपलब्ध कर्नेल की सुविधा है. इसलिए, मॉड्यूल कन्वर्ज़न पैच को अपस्ट्रीम सबमिट करने की ज़रूरत नहीं है. हालांकि, Android Common Kernel (ACK) के पैच सबमिट करने के लिए, आपको अन्य दिशा-निर्देशों का पालन करना होगा.
सुरक्षित GKI मॉड्यूल को सुरक्षित नहीं किए गए मॉड्यूल में बदलना
- Android 14 और उससे पहले के वर्शन के लिए:
common/android/gki_protected_modules
पर, सुरक्षित किए गए मॉड्यूल की सूची से, सुरक्षित किए जा रहे मॉड्यूल को हटाएं.
- Android 15 और उसके बाद के वर्शन के लिए:
common/modules.bzl
फ़ाइल मेंCOMMON_UNPROTECTED_MODULES_LIST
सूची में, उस मॉड्यूल को जोड़ें जिसे सुरक्षित से असुरक्षित में बदला जा रहा है.
- Android 14 और उससे पहले के वर्शन के लिए:
सुरक्षित किए गए एक्सपोर्ट की सूची अपडेट करें, ताकि
aarch64
के लिएtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
का इस्तेमाल करके,common/android/abi_gki_protected_exports_{ARCH}
में नए सिरे से बदले गए असुरक्षित मॉड्यूल को बाहर रखा जा सके.अपने बदलावों को समीक्षा के लिए सबमिट करें. 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 वर्शन का इस्तेमाल करके, इस गड़बड़ी को ठीक किया जा सकता है.