इस पेज पर, Android kernel ABI के रिप्रज़ेंटेशन बनाने और ABI की निगरानी करने का तरीका बताया गया है. यह सुविधा, Android 16 और उसके बाद के वर्शन वाले डिवाइसों पर काम करती है. पुराने वर्शन के लिए, एबीआई मॉनिटर के पिछले कर्नेल वर्शन देखें.
Kleaf के लिए रेफ़रंस दस्तावेज़ भी देखें: एबीआई मॉनिटरिंग की सुविधा (GKI) और एबीआई मॉनिटरिंग की सुविधा (डिवाइस).
कर्नेल और उसके एबीआई का प्रतिनिधित्व बनाएं
GKI सोर्स डाउनलोड करने के बाद, GKI कर्नेल और एबीआई आर्टफ़ैक्ट बनाने के लिए यह कमांड चलाएं:
tools/bazel run //common:kernel_aarch64_abi_dist
यह कमांड, मौजूदा एबीआई (ऑब्जेक्ट फ़ाइल फ़ॉर्मैट) का प्रतिनिधित्व बनाता है और इसे बने हुए कर्नेल और मॉड्यूल के साथ $DIST_DIR/abi.stg
में कॉपी करता है. $DIST_DIR
डिफ़ॉल्ट रूप से out_abi/kernel_aarch64_abi_dist/dist
पर सेट होती है.
--
के बाद कमांड के आखिर में, एबीआई टूल के लिए अतिरिक्त आर्ग्युमेंट दिए जा सकते हैं. उदाहरण के लिए, एबीआई के लिए डेस्टिनेशन बदलने और आर्टफ़ैक्ट बनाने के लिए, --dist_dir
विकल्प का इस्तेमाल किया जा सकता है:
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
बिल्ड और रेफ़रंस रिप्रज़ेंटेशन के बीच एबीआई के अंतर का विश्लेषण करना
पिछले निर्देश में इस्तेमाल किया गया //common:kernel_aarch64_abi_dist
टारगेट, common/gki/aarch64/abi.stg
(BUILD.bazel
में बताया गया है) में मौजूद बिल्ड और रेफ़रंस रिप्रज़ेंटेशन के बीच मिले किसी भी एबीआई अंतर का विश्लेषण करता है और उसकी शिकायत करता है. ये अंतर, बिल्ड के आखिर में प्रिंट किए जाते हैं, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
प्रिंट की गई रिपोर्ट, $DIST_DIR/abi_stgdiff/abi.report.short
में मौजूद बिल्ड आर्टफ़ैक्ट से मिलती है. इसमें अन्य फ़ॉर्मैट में मौजूद रिपोर्ट भी शामिल होती हैं.
ऑटोमेशन को बिल्ड कमांड के बाहर निकलने के कोड का इस्तेमाल करना चाहिए. अगर अंतर मिलता है, तो यह कोड शून्य से ज़्यादा होता है.
ध्यान दें कि android-mainline
के साथ-साथ, डेवलपमेंट फ़ेज़ की शाखाओं में, एबीआई का कोई रेफ़रंस नहीं होता.
इसके बिना, //common:kernel_aarch64_abi_dist
किसी भी अंतर का पता नहीं लगा पाएगा.
रेफ़रंस एबीआई का प्रतिनिधित्व अपडेट करना
सिंबल की सूची में बदलाव जैसे, कर्नेल एबीआई पर असर डालने वाले किसी भी बदलाव को रेफ़रंस एबीआई के रेप्रज़ेंटेशन (common/gki/aarch64/abi.stg
, BUILD.bazel में बताया गया है) में दिखाया जाना चाहिए.
ऐसा करने के लिए, आपको यह कमांड चलाना होगा:
tools/bazel run //common:kernel_aarch64_abi_update
यह कमांड, एबीआई के अंतर का विश्लेषण करें चरण में मौजूद सभी काम करता है. साथ ही, सोर्स में रेफ़रंस का प्रतिनिधित्व भी अपडेट करता है. इसके बाद, अपडेट किए गए एबीआई को उसी कमिट में अपलोड किया जा सकता है जिसमें बदलाव किया गया है. $DIST_DIR/abi_stgdiff/abi.report.short
में मौजूद रिपोर्ट से, कमिट मैसेज में एबीआई के अंतर को शामिल करें.
एबीआई मॉनिटरिंग और डिवाइस टारगेट
एबीआई मॉनिटरिंग को सिर्फ़ मुख्य कर्नेल बिल्ड टारगेट के लिए कॉन्फ़िगर करना ज़रूरी है. GKI कर्नेल के साथ सीधे तौर पर कॉम्पाइल होने वाले, base_kernel
तय करने वाले मिक्स किए गए बिल्ड कॉन्फ़िगरेशन (सिर्फ़ डिवाइस सिंबल सूची को ट्रैक करने के लिए सहायता जोड़नी होगी.
GKI बिल्ड का इस्तेमाल करके, एबीआई की परिभाषा को अपडेट किया जाना चाहिए.
Kleaf के लिए रेफ़रंस दस्तावेज़ भी देखें: एबीआई मॉनिटरिंग (डिवाइस) के लिए सहायता.
एबीआई, पिछले कर्नेल वर्शन (Android 15 और उससे पहले के वर्शन) को मॉनिटर करता है
पिछले वर्शन के लिए, एबीआई बिल्ड और मॉनिटरिंग के निर्देश अलग-अलग होते हैं.
Android 15 और 14
ये निर्देश, Android 16 के निर्देशों से काफ़ी हद तक मिलते-जुलते हैं. हालांकि, रेफ़रंस एबीआई का प्रतिनिधित्व common/android/abi_gki_aarch64.stg
है और $DIST_DIR
डिफ़ॉल्ट रूप से out_abi/kernel_aarch64/dist
पर सेट होता है.
Android 13
Android 13 को Kleaf या लेगसी बिल्ड स्क्रिप्ट, दोनों में से किसी एक की मदद से बनाया जा सकता है.
Kleaf के लिए, Android 14 के जैसे ही निर्देश हैं. हालांकि, एबीआई का फ़ॉर्मैट एक्सएमएल है और एबीआई के रेफ़रंस का प्रतिनिधित्व common/android/abi_gki_aarch64.xml
है.
लेगसी बिल्ड स्क्रिप्ट के लिए, निर्देश Android 12 के जैसे ही हैं.
Android 12 और उससे पहले के वर्शन
एबीआई फ़ॉर्मैट एक्सएमएल है और रेफ़रंस एबीआई का रेप्रज़ेंटेशन common/android/abi_gki_aarch64.xml
है
ये कर्नेल, Kleaf के बजाय build.sh
का इस्तेमाल करते हैं. एबीआई की निगरानी के लिए, आपको build_abi.sh
का इस्तेमाल करना चाहिए. यह build.sh
की तरह ही, बिल्ड को पसंद के मुताबिक बनाने के लिए, वही एनवायरमेंट वैरिएबल स्वीकार करता है. उदाहरण के लिए:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
यह कर्नेल बनाता है और एबीआई का प्रतिनिधित्व, OUT_DIR
(जो डिफ़ॉल्ट रूप से out_abi
है) सबडायरेक्ट्री में निकालता है. यह Kleaf के //common:kernel_aarch64_abi_dist
टारगेट के बराबर है. कर्नेल और एबीआई आर्टफ़ैक्ट बनाएं देखें.
रेफ़रंस एबीआई का रेप्रज़ेंटेशन, android/abi_gki_aarch64.xml
में सेव किया जाता है, जैसा कि common/build.config.gki.aarch64
में ABI_DEFINITION
वैरिएबल के ज़रिए तय किया गया है.
अगर आपको कर्नेल एबीआई का प्रतिनिधित्व अपडेट करना है, तो सबसे आसान तरीका --update
और --print-report
विकल्पों का इस्तेमाल करना है:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
--print-report
, मौजूदा फ़ाइल और जनरेट की गई नई फ़ाइल के बीच एबीआई के अंतर को प्रिंट करता है.
--update
विकल्प, रेफ़रंस एबीआई के रेप्रज़ेंटेशन को ओवरराइट करता है. KMI_SYMBOL_LIST
कॉन्फ़िगर किए गए डिवाइस के लिए BUILD_CONFIG
का इस्तेमाल करने पर, यह सिंबल की सूची को अपडेट भी करता है.