Linux कर्नेल, समस्याओं का पता लगाने के लिए कई तरीके उपलब्ध कराता है. इनमें ट्रेसिंग, BPF, और प्रोफ़ाइलिंग शामिल हैं. इनमें से ज़्यादातर तकनीकें, जेनेरिक कर्नल इमेज (GKI) बाइनरी कर्नल में उपलब्ध हैं. प्रॉडक्ट डेवलप करते समय, कई और टूल होते हैं जिन्हें डेवलपमेंट या इंटिग्रेशन प्रोसेस में इंटिग्रेट किया जाता है. इनमें से कुछ टूल के लिए, कर्नल की ऐसी सुविधाओं की ज़रूरत होती है जो GKI का हिस्सा नहीं हैं. हमारा सुझाव है कि आप GKI की ज़्यादातर सुविधाओं की तरह ही, इन सुविधाओं को Linux में जोड़ने के लिए अपस्ट्रीम मेंटेनर के साथ काम करें.
वेंडर मॉड्यूल में डीबग करने की डाउनस्ट्रीम सुविधाएं
डीबग करने की सुविधाएं, अन्य सुविधाओं की तरह ही काम करती हैं. साथ ही, इन्हें Android के लिए उपलब्ध पैच में बताई गई प्रोसेस के मुताबिक ही इस्तेमाल किया जाना चाहिए.
डीबग करने की ऐसी सुविधाएं जो डाउनस्ट्रीम में दखल देती हैं
डीबग करने की कुछ ज़रूरी सुविधाओं के लिए, कॉन्फ़िगरेशन के खास विकल्पों की ज़रूरत होती है. ये विकल्प, GKI में बंद होते हैं. इसलिए, इनके लिए कर्नल के खास बिल्ड की ज़रूरत होती है. परफ़ॉर्मेंस से जुड़ी समस्याओं या प्रोडक्शन के लिए सही न होने की वजह से, इन सुविधाओं को बंद किया जा सकता है. हालांकि, कुछ तरह की समस्याओं को डीबग करने के लिए, ये सुविधाएं बहुत ज़रूरी होती हैं. ऐसे टूल के उदाहरणों में सैनिटाइज़र (KASAN, UBSAN),
debugfs
, और पार्टनर के हिसाब से उपलब्ध अन्य सुविधाएं और टूल शामिल हैं.
यह आपको तय करना है कि आपको डिबग की सुविधा वाले उन खास कर्नलों को कैसे मैनेज करना है जो कर्नेल मॉड्यूल इंटरफ़ेस (केएमआई) पर असर डालते हैं. आम तौर पर, इंटरनल डीबग बिल्ड बनाया जाता है. इसके बाद, इससे मिले आर्टफ़ैक्ट को इंटरनल ग्राहकों या डाउनस्ट्रीम डेवलपमेंट पार्टनर को डिलीवर किया जाता है. हमारा सुझाव है कि आप इन सुविधाओं को मॉड्यूल में अलग-अलग रखें. ऐसा इसलिए, क्योंकि पार्टनर के हिसाब से डीबग करने की सुविधाओं को, Android के लिए खास तौर पर बनाए गए पैच में बताए गए दिशा-निर्देशों के अलावा, जीकेआई कर्नेल में स्वीकार नहीं किया जा सकता.