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