ऐसे सिंबल और टाइप की सतह को कम करने के लिए, जिन्हें स्थायी तौर पर बनाए रखने की ज़रूरत होती है.
जीकेआई कर्नेल के पास एक्सपोर्ट किए गए सिंबल को सिर्फ़ उन सिंबल तक सीमित करने की सुविधा है जिनमें
मॉड्यूल के लिए ज़रूरी हैं. बाहरी तौर पर कंपाइल किए गए मॉड्यूल के लिए, आपके पास एक सूची होनी चाहिए
का इस्तेमाल किया जाएगा, ताकि उन्हें GKI कर्नेल के ज़रिए एक्सपोर्ट किया जा सके. उदाहरण के लिए,
मॉड्यूल में इस्तेमाल किए गए चिह्नों के लिए
कटलफ़िश सेव की जाती हैं
इंच
android/abi_gki_aarch64_virtual_device
.
सिंबल की सूची जनरेट करने के लिए कोई टारगेट जोड़ें
सिंबल की सूचियां, kernel_abi
टारगेट से जनरेट होती हैं. इस लक्ष्य को इसमें जोड़ें
BUILD.bazel
डिवाइस में ये विकल्प हैं:
name
<kernel_build>_abi
के फ़ॉर्मैट में होना चाहिए.kernel_build
इसमें डिवाइस के
kernel_build
टारगेट का नाम होना चाहिए.
इन विकल्पों का भी इस्तेमाल किया जा सकता है:
kernel_modules
पेड़ से बाहर मॉड्यूल के लिए टारगेट की सूची. इन-ट्री मॉड्यूल को इन्हें यहां शामिल किया जाएगा. इससे संदर्भ लें सिंबल निकालने के लिए इन-ट्री मॉड्यूल तैयार करें.
kmi_symbol_list_add_only
इस विकल्प की मदद से, इस्तेमाल न होने वाले सिंबल नहीं हटाए जा सकते. सिंबल हटाने की सुविधा सिर्फ़ केएमआई के दौरान खास समय पर अनुमति है स्टेबलाइज़ेशन केएमआई होने के बाद इसकी अनुमति नहीं होती फ़्रीज़ हो गया.
यह तब भी मददगार होता है, जब कई अलग-अलग मैसेज के लिए एक ही सिंबल सूची का इस्तेमाल किया जाता है डिवाइस. ऐसा करने से, डिवाइस A में इस्तेमाल किए गए सिंबल नहीं हटेंगे, लेकिन डिवाइस B में नहीं.
module_grouping
अगर
True
या तय नहीं है, तो प्रतीक सूची इसके आधार पर प्रतीकों को समूह में रखती है इनमें, सिंबल से जुड़ा कर्नेल मॉड्यूल का डेटा होता है. अगर ऐसा नहीं है, तो सिंबल की सूची कर्नेल के सभी मॉड्यूल में इस्तेमाल किए जाने वाले सिंबल की क्रम से लगाई गई सूची.
यहां जाएं: सामान्य-मॉड्यूल/वर्चुअल-डिवाइस/BUILD.baज़ल उदाहरण के लिए:
kernel_abi(
name = "virtual_device_aarch64_abi",
kernel_build = ":virtual_device_aarch64",
kernel_modules = [
":virtual_device_aarch64_external_modules",
],
kmi_symbol_list_add_only = True,
)
यह भी देखें
रेफ़रंस दस्तावेज़
Kलीफ़ में kernel_abi
टारगेट पर.
सिंबल निकालने के लिए, इन-ट्री मॉड्यूल तैयार करें
सिंबल निकालने के लिए इन-ट्री मॉड्यूल तैयार करने के लिए, वेंडर के हिसाब से इन-ट्री मॉड्यूल की सूची बनाएं
kernel_build
टारगेट के module_outs
एट्रिब्यूट में मॉड्यूल. यहां जाएं:
_VIRT_COMMON_MODULES
और
इसका इस्तेमाल
देखें. इस सूची में GKI मॉड्यूल शामिल न करें.
इन मॉड्यूल को कॉन्फ़िगर करें साइन इन नहीं किया हुआ है, ऐसा न करने पर हो सकता है कि सिंबल की सूची खाली हो. ऐसा करने के लिए, इस रेखा को अपने कर्नेल में जोड़ें कॉन्फ़िगरेशन फ़्रैगमेंट:
# CONFIG_MODULE_SIG_ALL is not set
यहां जाएं: सामान्य-मॉड्यूल/virtual-device/virtual_device_core.फ़्रैगमेंट उदाहरण के लिए.
डिवाइस कर्नेल बिल्ड में डिवाइस सिंबल सूची जोड़ें
kmi_symbol_list
एट्रिब्यूट को, इसमें तय किए गए kernel_build
टारगेट में जोड़ें
डिवाइस BUILD.bazel
. सिंबल की सूची का नाम इस फ़ॉर्मैट में होना चाहिए:
//common:android/abi_gki_<arch>_<device>
. यहां जाएं:
सामान्य-मॉड्यूल/वर्चुअल-डिवाइस/BUILD.baज़ल,
उदाहरण के लिए:
kernel_build(
name = "virtual_device_aarch64",
base_kernel = "//common:kernel_aarch64",
kmi_symbol_list = "//common:android/abi_gki_aarch64_virtual_device",
...
module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)
सिंबल की शुरुआती सूची बनाना और सबमिट करना
common/android/abi_gki_<arch>_<device>
पर सिंबल की एक खाली सूची बनाएं.
कमांड के ऊपर दिया गया उदाहरण यह होगा:
touch common/android/abi_gki_aarch64_virtual_device
इस फ़ाइल को बेस जीकेआई कर्नेल बिल्ड के additional_kmi_symbol_lists
में जोड़ें. इसके लिए
उदाहरण के लिए, //common:android/abi_gki_aarch64_virtual_device
को
aarch64_additional_kmi_symbol_lists
फ़ाइलग्रुप, इसका एलान किया गया
सामान्य/BUILD.bazu हो सकते हैं.
नई प्रतीक सूची भरने के लिए डिवाइस प्रतीक सूची अपडेट करें और उसे Android Common Kernel रिपॉज़िटरी में भेजता है.
डिवाइस सिंबल की सूची अपडेट करना
kernel_build
और module_outs
के मॉड्यूल में इस्तेमाल किए जाने वाले सभी मुख्य कर्नेल सिंबल
kernel_abi
में से kernel_modules
को सिंबल सूची में शामिल किया जाना चाहिए. यह काम कर सकता है
_update_symbol_list
की मदद से kernel_abi
टारगेट को चलाकर हासिल किया जा सकता है
प्रत्यय. उदाहरण के लिए, निम्न आदेश इसके लिए प्रतीक सूची को अपडेट करता है
//common-modules/virtual-device:virtual_device_aarch64
:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list
ACK को सिंबल सूची का अपडेट भेजें
प्रतीक सूची को बदलकर एक पैच भेजें Android सामान्य कर्नेल नए चिह्नों को KMI का हिस्सा बनाने के लिए गेरिट बनाएं.
कमिट मैसेज में जोड़े या हटाए गए सिंबल की सूची शामिल होनी चाहिए. आप
छोटे से चिह्न सूची को अपडेट करने के लिए इस सूची को मैन्युअल तौर पर लिखो या इसका इस्तेमाल करो
इसके बाद $DIST_DIR/abi.report.short
रिपोर्ट
संदर्भ ABI को अपडेट करना
प्रतिनिधित्व.
संदर्भ एबीआई को अपडेट करते समय प्रतिनिधित्व भेजने से पहले सिंबल की सूची को अपडेट करने की ज़रूरत नहीं है. ऐसा करने से, पहले से सबमिट करें और बदलाव को जल्दी सबमिट करने के लिए तैयार करें. किसी भी स्थिति में, यह को जांच कर अपडेट कर दिया जाता है.
पुराने वर्शन (Android 12 और उससे पहले वाले वर्शन)
build_abi.sh
टूल का इस्तेमाल इस तरह करें:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list
इस उदाहरण में, build.config.device
में ये कॉन्फ़िगरेशन विकल्प शामिल होने चाहिए:
vmlinux
FILES
सूची का हिस्सा होना चाहिए. ऐसा करने के लिए,build.config.aarch64
.KMI_SYMBOL_LIST
अपडेट करने के लिए, यह KMI सिंबल की सूची सेट होना चाहिए और इस पर कर्सर ले जाना चाहिए.
डिवाइस सिंबल की सूची को अपडेट करने के बाद, आपको
GKI बिल्ड (common/build.config.gki.aarch64
):
अपडेट की गई सिंबल की सूची को
common/android/abi_gki_aarch64_<device>
में कॉपी करें.देखें कि
android/abi_gki_aarch64_<device>
इसमें शामिल है या नहींcommon/build.config.gki.aarch64
मेंADDITIONAL_KMI_SYMBOL_LISTS
.