एक स्थिर कर्नेल मॉड्यूल इंटरफ़ेस (KMI) बनाए रखें

विक्रेता मॉड्यूल के लिए एक स्थिर KMI बनाए रखना महत्वपूर्ण है। GKI कर्नेल को बाइनरी फॉर्म में बनाया और भेजा जाता है और विक्रेता-लोड करने योग्य मॉड्यूल एक अलग ट्री में बनाए जाते हैं। परिणामी GKI कर्नेल और विक्रेता मॉड्यूल को ऐसे काम करना चाहिए मानो वे एक साथ बनाए गए हों।

आम तौर पर, लिनक्स समुदाय ने मेनलाइन कर्नेल के लिए इन-कर्नेल एबीआई स्थिरता की धारणा को नापसंद किया है। विभिन्न टूलचेन, कॉन्फ़िगरेशन और लगातार विकसित हो रहे लिनक्स मेनलाइन कर्नेल के सामने, मेनलाइन में एक स्थिर KMI बनाए रखना संभव नहीं है। हालाँकि, इन बाधाओं के साथ अत्यधिक बाधित GKI वातावरण में एक स्थिर KMI बनाए रखना संभव है:

  • कर्नेल बनाने के लिए केवल एक कॉन्फ़िगरेशन, gki_defconfig का उपयोग किया जा सकता है।

  • KMI केवल कर्नेल के समान LTS और Android संस्करण, जैसे android13-5.10 , android12-5.10 या android13-5.15 के भीतर ही स्थिर है।

    • android-mainline के लिए कोई KMI स्थिरता बनाए नहीं रखी गई है।
  • केवल एओएसपी में आपूर्ति की गई और संबंधित शाखा के लिए परिभाषित विशिष्ट क्लैंग टूलचेन का उपयोग कर्नेल और मॉड्यूल के निर्माण के लिए किया जाता है।

  • केवल प्रतीक सूची में निर्दिष्ट मॉड्यूल द्वारा उपयोग किए जाने वाले प्रतीकों की स्थिरता के लिए निगरानी की जाती है और KMI प्रतीकों पर विचार किया जाता है।

    • परिणाम यह है कि विक्रेता मॉड्यूल को केवल KMI प्रतीकों का उपयोग करना चाहिए। यदि गैर-केएमआई-प्रतीकों की आवश्यकता होती है तो यह बाधा मॉड्यूल लोड को विफल करके लागू की जाती है।
  • KMI शाखा फ़्रीज़ होने के बाद, परिवर्तन की अनुमति है लेकिन KMI को तोड़ा नहीं जा सकता। इन परिवर्तनों में निम्नलिखित शामिल हैं:

    • कॉन्फिग परिवर्तन
    • कर्नेल कोड बदलता है
    • टूलचेन परिवर्तन (अद्यतन सहित)

हर्मेटिक बिल्ड प्रक्रिया और एलएलवीएम टूलचेन का उपयोग करें

हर्मेटिक बिल्ड प्रक्रिया kernel/manifest में repo मैनिफ़ेस्ट द्वारा बिल्ड वातावरण का पूरी तरह से वर्णन करके एक स्थिर KMI सुनिश्चित करती है। उदाहरण के लिए, android13-5.15 के मेनिफेस्ट में टूलचेन, बिल्ड स्क्रिप्ट और जेनेरिक कर्नेल इमेज (GKI) कर्नेल बनाने के लिए आवश्यक सभी चीजें शामिल हैं। संबंधित build.config कॉन्फ़िगरेशन फ़ाइलें, जैसे कि जीकेआई बिल्ड कॉन्फिग build.config.gki.aarch64 , यह सुनिश्चित करती हैं कि लगातार बिल्ड परिणाम उत्पन्न करने के लिए शामिल टूल का सही ढंग से उपयोग किया जाता है।

एक हर्मेटिक बिल्ड प्रक्रिया का उपयोग यह भी सुनिश्चित करता है कि पेड़ के लिए एबीआई विवरण सुसंगत है चाहे Google द्वारा उत्पन्न किया गया हो (उदाहरण के लिए, android13-5.15 के लिए abi_gki_aarch64.xml या स्थानीय पेड़ में उत्पन्न जिसमें विक्रेता मॉड्यूल शामिल हैं। बनाने और तुलना करने के लिए उपकरण कर्नेल मॉड्यूल इंटरफ़ेस (KMI) के लिए ABI विवरण भी मेनिफेस्ट द्वारा वर्णित रेपो के भाग के रूप में प्रदान किया गया है।

GKI कर्नेल के निर्माण के लिए उपयोग की जाने वाली टूलचेन विक्रेता मॉड्यूल के निर्माण के लिए उपयोग की जाने वाली टूलचेन के साथ पूरी तरह से संगत होनी चाहिए। एंड्रॉइड 10 के अनुसार, सभी एंड्रॉइड कर्नेल को एलएलवीएम टूलचेन के साथ बनाया जाना चाहिए। जीकेआई के साथ, उत्पाद कर्नेल और विक्रेता मॉड्यूल बनाने के लिए उपयोग की जाने वाली एलएलवीएम टूलचेन को एओएसपी से एलएलवीएम टूलचेन के समान एबीआई उत्पन्न करना होगा और भागीदारों को यह सुनिश्चित करना होगा कि केएमआई जीकेआई कर्नेल के साथ संगत है। प्रदान किए गए बिल्ड टूल का उपयोग करने को दृढ़ता से प्रोत्साहित किया जाता है क्योंकि वे अनुकूलता की गारंटी प्रदान करते हैं।

आगे क्या होगा?