प्रतीकों और प्रकारों की सतह को कम करने के लिए जिन्हें स्थिर बनाए रखने की आवश्यकता है, जीकेआई कर्नेल में निर्यात किए गए प्रतीकों को केवल उन तक सीमित करने की कार्यक्षमता है जो मॉड्यूल के लिए आवश्यक हैं। बाह्य रूप से संकलित मॉड्यूल के लिए, आपके पास उपयोग किए गए प्रतीकों की एक सूची होनी चाहिए ताकि उन्हें जीकेआई कर्नेल द्वारा निर्यात किया जा सके। उदाहरण के लिए, कटलफिश के लिए मॉड्यूल द्वारा उपयोग किए गए प्रतीकों को 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
यह विकल्प अप्रयुक्त प्रतीकों को हटाने से रोकता है। प्रतीक हटाने की अनुमति केवल KMI स्थिरीकरण के दौरान विशिष्ट समय पर ही दी जाती है और KMI स्थिर हो जाने के बाद इसकी अनुमति नहीं दी जाती है।
यह तब भी उपयोगी होता है जब आप कई अलग-अलग डिवाइसों के लिए एक ही प्रतीक सूची का उपयोग करते हैं। इस तरह यह डिवाइस A द्वारा उपयोग किए गए प्रतीकों को नहीं हटाएगा, लेकिन डिवाइस B को नहीं।
module_grouping
यदि
True
या अनिर्दिष्ट है, तो प्रतीक सूची प्रतीक को संदर्भित करने वाले कर्नेल मॉड्यूल के आधार पर प्रतीकों को समूहित करेगी। अन्यथा प्रतीक सूची केवल सभी कर्नेल मॉड्यूल द्वारा उपयोग किए गए प्रतीकों की एक क्रमबद्ध सूची होगी।
उदाहरण के लिए सामान्य-मॉड्यूल/वर्चुअल-डिवाइस/BUILD.bazen देखें:
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,
)
क्लीफ़ में kernel_abi
लक्ष्य पर संदर्भ दस्तावेज़ भी देखें।
प्रतीक निष्कर्षण के लिए इन-ट्री मॉड्यूल तैयार करें
प्रतीक निष्कर्षण के लिए इन-ट्री मॉड्यूल तैयार करने के लिए, kernel_build
लक्ष्य के module_outs
विशेषता में विक्रेता-विशिष्ट इन-ट्री मॉड्यूल को सूचीबद्ध करें। उदाहरण के लिए _VIRT_COMMON_MODULES
और इसका उपयोग देखें। इस सूची में GKI मॉड्यूल शामिल न करें.
इन मॉड्यूल को अहस्ताक्षरित होने के लिए कॉन्फ़िगर करें, अन्यथा प्रतीक सूची खाली हो सकती है। ऐसा करने के लिए, इस पंक्ति को अपने कर्नेल कॉन्फ़िगरेशन फ़्रैगमेंट में जोड़ें:
# CONFIG_MODULE_SIG_ALL is not set
उदाहरण के लिए सामान्य-मॉड्यूल/वर्चुअल-डिवाइस/वर्चुअल_डिवाइस_कोर.फ़्रैगमेंट देखें।
डिवाइस कर्नेल बिल्ड में डिवाइस प्रतीक सूची जोड़ें
डिवाइस BUILD.bazel
में परिभाषित kernel_build
लक्ष्य में विशेषता kmi_symbol_list
जोड़ें। प्रतीक सूची का नाम //common:android/abi_gki_<arch>_<device>
के प्रारूप में होना चाहिए। उदाहरण के लिए, सामान्य-मॉड्यूल/वर्चुअल-डिवाइस/BUILD.bazen देखें:
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
इस फ़ाइल को बेस GKI कर्नेल बिल्ड की additional_kmi_symbol_lists
में जोड़ें। उदाहरण के लिए, //common:android/abi_gki_aarch64_virtual_device
aarch64_additional_kmi_symbol_lists
फ़ाइल समूह में जोड़ा गया है, जिसे आम/BUILD.bazen में घोषित किया गया है।
नई प्रतीक सूची भरने और इसे एंड्रॉइड कॉमन कर्नेल रिपॉजिटरी में भेजने के लिए डिवाइस प्रतीक सूची को अपडेट करें ।
डिवाइस प्रतीक सूची अपडेट करें
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 को प्रतीक सूची अद्यतन भेजें
नए प्रतीकों को KMI का हिस्सा बनाने के लिए एंड्रॉइड कॉमन कर्नेल गेरिट पर प्रतीक सूची परिवर्तन के साथ एक पैच भेजें।
प्रतिबद्ध संदेश में जोड़े गए या हटाए गए प्रतीकों की एक सूची शामिल होनी चाहिए। आप या तो इस सूची को एक छोटे प्रतीक सूची अद्यतन के लिए मैन्युअल रूप से लिख सकते हैं या संदर्भ ABI प्रतिनिधित्व को अद्यतन करने के बाद $DIST_DIR/abi.report.short
रिपोर्ट का उपयोग कर सकते हैं।
जबकि प्रतीक सूची भेजने से पहले संदर्भ एबीआई प्रतिनिधित्व को अपडेट करना आवश्यक नहीं है, यह अतिरिक्त प्रीसबमिट चरणों को समाप्त कर सकता है और परिवर्तन को तेजी से सबमिट करने के लिए तैयार कर सकता है। किसी भी स्थिति में, प्रीसबमिट के दौरान यदि आवश्यक हो तो इसकी जाँच और अद्यतन किया जाएगा।
पुराने संस्करण (एंड्रॉइड 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
में शामिल है।