वेंडर के मॉड्यूल के लिए, कर्नेल मॉड्यूल इंटरफ़ेस (केएमआई) को स्थिर रखना ज़रूरी है. GKI कर्नेल को बाइनरी फ़ॉर्मैट में बनाया और शिप किया जाता है. साथ ही, वेंडर के लोड किए जा सकने वाले मॉड्यूल को अलग ट्री में बनाया जाता है. इस तरह से तैयार किया गया GKI कर्नेल और वेंडर मॉड्यूल, एक साथ बनाए गए GKI कर्नेल और वेंडर मॉड्यूल की तरह ही काम करना चाहिए.
आम तौर पर, Linux कम्यूनिटी ने मुख्य कर्नेल के लिए, कर्नेल में एबीआई के स्थिर होने की बात पर भरोसा नहीं किया है. अलग-अलग टूलचेन, कॉन्फ़िगरेशन, और लगातार बदलते Linux के मुख्य कर्नेल के बीच, मुख्य फ़ाइल में एक स्थिर KMI बनाए रखना मुमकिन नहीं है. हालांकि, इन पाबंदियों के साथ, बहुत ज़्यादा पाबंदियों वाले GKI एनवायरमेंट में स्थिर केएमआई बनाए रखा जा सकता है:
कर्नेल बनाने के लिए, सिर्फ़ एक कॉन्फ़िगरेशन,
gki_defconfig
का इस्तेमाल किया जा सकता है.केएमआई सिर्फ़ एक ही एलटीएस और Android वर्शन वाले कर्नेल में काम करता है, जैसे कि
android14-6.1
,android15-6.6
याandroid16-6.12
.android-mainline
के लिए, कोई केएमआई स्टैबिलिटी नहीं रखी गई है.
कर्नेल और मॉड्यूल बनाने के लिए, AOSP में दिए गए और उससे जुड़ी शाखा के लिए तय किए गए Clang टूलचेन का ही इस्तेमाल किया जाता है.
सिंबल की सूची में बताए गए सिंबल का इस्तेमाल, मॉड्यूल के लिए किया जाता है. इन सिंबल के स्थिर रहने की निगरानी की जाती है और इन्हें केएमआई सिंबल माना जाता है.
- इसका मतलब है कि वेंडर मॉड्यूल में सिर्फ़ KMI सिंबल का इस्तेमाल किया जाना चाहिए. अगर किसी मॉड्यूल में KMI-सिम्बल के अलावा अन्य सिम्बल इस्तेमाल करने की ज़रूरत है, तो मॉड्यूल लोड नहीं हो पाता.
केएमआई शाखा को फ़्रीज़ करने के बाद, उसमें बदलाव किए जा सकते हैं. हालांकि, केएमआई को नहीं तोड़ा जा सकता. इन बदलावों में ये शामिल हैं:
- कॉन्फ़िगरेशन में बदलाव
- कर्नेल कोड में बदलाव
- टूलचेन में हुए बदलाव (इनमें अपडेट भी शामिल हैं)
हेर्मेटिक बिल्ड प्रोसेस और LLVM टूलचेन का इस्तेमाल करना
हर्मेटिक बिल्ड प्रोसेस से यह पक्का होता है कि केएमआई स्थिर रहे. इसके लिए, repo
में मौजूद मेनिफ़ेस्टkernel/manifest
में बिल्ड एनवायरमेंट के बारे में पूरी जानकारी दी जाती है. उदाहरण के लिए, android16-6.12
के लिए मेनिफ़ेस्ट में टूलचेन, बिल्ड सिस्टम, और जनरेटिक कर्नेल इमेज (जीकेआई) कर्नेल बनाने के लिए ज़रूरी सभी चीज़ें शामिल होती हैं. मुख्य रूप से, बिल्ड कॉन्फ़िगरेशन BUILD.bazel
यह पक्का करता है कि शामिल किए गए टूल का इस्तेमाल सही तरीके से किया जा रहा है, ताकि एक जैसे बिल्ड नतीजे जनरेट किए जा सकें.
हर्मेटिक बिल्ड प्रोसेस का इस्तेमाल करने से यह भी पक्का होता है कि ट्री के लिए एबीआई का ब्यौरा एक जैसा हो, चाहे वह Google से जनरेट किया गया हो (उदाहरण के लिए, android16-6.12
के लिए gki/aarch64/abi.stg
) या वेंडर मॉड्यूल वाले लोकल ट्री में जनरेट किया गया हो. मेनिफ़ेस्ट में बताए गए रिपॉज़िटरी में, एबीआई के ब्यौरे को बनाने और उसकी तुलना करने के लिए टूल भी उपलब्ध कराए जाते हैं. ये टूल, कर्नेल मॉड्यूल इंटरफ़ेस (केएमआई) के लिए होते हैं.
GKI कर्नेल बनाने के लिए इस्तेमाल किया गया टूलचेन, वेंडर मॉड्यूल बनाने के लिए इस्तेमाल किए गए टूलचेन के साथ पूरी तरह से काम करना चाहिए. Android 10 के बाद, सभी Android कर्नेल को LLVM टूल चेन की मदद से बनाया जाना चाहिए. GKI के साथ, प्रॉडक्ट के कर्नेल और वेंडर मॉड्यूल बनाने के लिए इस्तेमाल किए गए LLVM टूलचेन से, वही एबीआई जनरेट होना चाहिए जो AOSP के LLVM टूलचेन से जनरेट होता है. साथ ही, पार्टनर को यह पक्का करना होगा कि केएमआई, GKI कर्नेल के साथ काम करता हो. हमारा सुझाव है कि आप दिए गए बिल्ड टूल का इस्तेमाल करें, क्योंकि ये सबसे बेहतर तरीके से काम करते हैं.
आगे क्या करना है?
हेर्मेटिक बिल्ड प्रोसेस और LLVM टूलचैन का इस्तेमाल करके, कर्नेल बनाने के निर्देशों के लिए, कर्नेल बनाना लेख पढ़ें.
एबीआई को मॉनिटर करने और समस्याओं को ठीक करने के तरीके के बारे में जानने के लिए, Android Kernel ABI Monitoring लेख पढ़ें