प्रतीक सूचियों के साथ काम करें

ऐसे सिंबल और टाइप की सतह को कम करने के लिए, जिन्हें स्थायी तौर पर बनाए रखने की ज़रूरत होती है. जीकेआई कर्नेल के पास एक्सपोर्ट किए गए सिंबल को सिर्फ़ उन सिंबल तक सीमित करने की सुविधा है जिनमें मॉड्यूल के लिए ज़रूरी हैं. बाहरी तौर पर कंपाइल किए गए मॉड्यूल के लिए, आपके पास एक सूची होनी चाहिए का इस्तेमाल किया जाएगा, ताकि उन्हें 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.

  • सिंबल सूची का अपडेट ACK पर भेजें.