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

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

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

  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. Android 14 के लिए, common/android/gki_{ARCH}_protected_modules में दूसरे चरण की KO फ़ाइलों का वही सेट जोड़ें. इसे रनटाइम पर बाइनरी सर्च के लिए, बढ़ते क्रम में क्रम से लगाया गया है. इससे मॉड्यूल को सुरक्षित GKI मॉड्यूल के तौर पर दिखाया जा सकता है.

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

  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) के पैच सबमिट करने के लिए, आपको अन्य दिशा-निर्देशों का पालन करना होगा.

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

  1. Android 15 और उसके बाद के वर्शन के लिए, जिस मॉड्यूल को सुरक्षित से बिना सुरक्षा वाले मॉड्यूल में बदलना है उसे common/modules.bzl फ़ाइल में COMMON_UNPROTECTED_MODULES_LIST सूची में जोड़ें.

  2. Android 14 के लिए, common/android/gki_protected_modules पर जाकर, सुरक्षित मॉड्यूल की सूची से उस मॉड्यूल को हटाएं जिसे सुरक्षित से सुरक्षित नहीं के तौर पर बदला जा रहा है.

  3. Android 14 से 16 के लिए, सुरक्षित किए गए एक्सपोर्ट की सूची अपडेट करें, ताकि common/android/abi_gki_protected_exports_{ARCH} (या Android 16 के लिए common/gki/{ARCH}/protected_exports) में, aarch64 के लिए tools/bazel run //common:kernel_aarch64_abi_update_protected_exports का इस्तेमाल करके, नए कन्वर्ज़न वाले बिना सुरक्षा वाले मॉड्यूल से उन्हें हटाया जा सके.

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