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