Android 5.0 के बाद से, Linux कर्नल पर Android नेटवर्किंग स्टैक को ठीक से काम करने के लिए, कई कमिट की ज़रूरत होती है. इन्हें हाल ही में अपस्ट्रीम किया गया है या अभी तक अपस्ट्रीम नहीं किया गया है. ज़रूरी कर्नल फ़ंक्शन की मैन्युअल तरीके से पुष्टि करना या छूटी हुई कमिट को ट्रैक करना आसान नहीं है. इसलिए, Android टीम उन टेस्ट को शेयर कर रही है जिनका इस्तेमाल वह यह पक्का करने के लिए करती है कि कर्नल उम्मीद के मुताबिक काम कर रहा है.
जांच करने की वजहें
ये टेस्ट तीन मुख्य वजहों से किए जाते हैं:
- किसी डिवाइस पर इस्तेमाल किए गए Linux कर्नल का सटीक वर्शन, आम तौर पर डिवाइस के हिसाब से अलग-अलग होता है. साथ ही, टेस्ट किए बिना यह जानना मुश्किल होता है कि कोई कर्नल ठीक से काम करता है या नहीं.
- कर्नल पैच को कर्नल के अलग-अलग वर्शन या अलग-अलग डिवाइस ट्री में फ़ॉरवर्ड-पोर्टिंग और बैक-पोर्टिंग करने से, ऐसी समस्याएं आ सकती हैं जिनका पता टेस्ट किए बिना नहीं लगाया जा सकता.
- नेटवर्किंग की नई सुविधाओं के लिए, कर्नल की नई सुविधाओं या कर्नल की गड़बड़ियों को ठीक करने की ज़रूरत पड़ सकती है.
अगर ये टेस्ट पास नहीं होते हैं, तो डिवाइस का नेटवर्क स्टैक ठीक से काम नहीं करता. इससे कनेक्टिविटी से जुड़ी गड़बड़ियां होती हैं, जो लोगों को दिखती हैं. जैसे, वाई-फ़ाई नेटवर्क से डिसकनेक्ट हो जाना. ऐसा हो सकता है कि डिवाइस, Android Compatibility Test Suite (CTS) के टेस्ट भी पास न कर पाए.
टेस्ट का इस्तेमाल करना
ये टेस्ट, User-Mode Linux का इस्तेमाल करके, Linux होस्ट मशीन पर कर्नल को एक प्रोसेस के तौर पर बूट करते हैं. सही ऑपरेटिंग सिस्टम के वर्शन के लिए, बिल्ड एनवायरमेंट सेट अप करना लेख पढ़ें. यूनिट टेस्ट फ़्रेमवर्क, सही डिस्क इमेज के साथ कर्नल को बूट करता है और होस्ट फ़ाइल सिस्टम से टेस्ट चलाता है. ये टेस्ट Python में लिखे गए हैं. इनमें TAP इंटरफ़ेस का इस्तेमाल किया जाता है, ताकि कर्नल के व्यवहार और सॉकेट एपीआई की जांच की जा सके.
ARCH=um के लिए कर्नल को कंपाइल करें
टेस्ट चलाने के लिए, कर्नल को ARCH=um SUBARCH=x86_64 के लिए कंपाइल करना होगा. यह अपस्ट्रीम और सामान्य Android कर्नेल ट्री (जैसे, android-4.4) में काम करने वाला आर्किटेक्चर है. हालांकि, कभी-कभी डिवाइस कर्नेल इस मोड में कंपाइल नहीं होते, क्योंकि डिवाइस ट्री में सामान्य फ़ाइलों (जैसे, sys/exit.c) में डिवाइस या हार्डवेयर के हिसाब से कोड होता है.
कई मामलों में, यह पक्का करना ज़रूरी होता है कि हार्डवेयर के हिसाब से कोड, #ifdef के पीछे हो. आम तौर पर, यह कोड से जुड़ी किसी खास सुविधा को कंट्रोल करने वाले कॉन्फ़िगरेशन विकल्प पर #ifdef होना चाहिए. अगर ऐसा कोई कॉन्फ़िगरेशन विकल्प नहीं है, तो #ifndef CONFIG_UML ब्लॉक में हार्डवेयर के हिसाब से कोड डालें.
आम तौर पर, इसे ठीक करने की ज़िम्मेदारी कर्नल ट्री प्रोवाइडर (जैसे कि चिपसेट या एसओसी वेंडर) की होती है. हम OEM और वेंडर के साथ मिलकर काम कर रहे हैं, ताकि यह पक्का किया जा सके कि मौजूदा और आने वाले कर्नल, ARCH=um
SUBARCH=x86_64 के लिए बिना किसी बदलाव के कंपाइल हो जाएं.
टेस्ट चलाना
टेस्ट kernel/tests/net/test पर हैं.
हमारा सुझाव है कि टेस्ट AOSP मेन से चलाए जाएं, क्योंकि ये सबसे नए होते हैं. कुछ मामलों में, किसी Android रिलीज़ में ठीक से काम करने के लिए ज़रूरी कर्नल सुविधाओं के लिए, उस रिलीज़ में अब तक पूरा टेस्ट कवरेज नहीं होता है. जांच करने के तरीके के बारे में जानने के लिए, कर्नेल नेटवर्क टेस्ट की README फ़ाइल देखें. इसके लिए, अपने कर्नल ट्री में सबसे ऊपर से यह कमांड चलाएं:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
जांच पास करना
कर्नल नेटवर्क टेस्ट के Python सोर्स फ़ाइलों में ऐसी टिप्पणियां होती हैं जिनमें कर्नल कमिट के बारे में बताया जाता है. इन कमिट को टेस्ट पास करने के लिए ज़रूरी माना जाता है. टेस्ट, सामान्य कर्नल ट्री में पास होने चाहिए. साथ ही, सभी सामान्य कर्नल ब्रांच android-4.4 और इससे ऊपर के वर्शन में पास होने चाहिए. ये टेस्ट, AOSP के kernel/common प्रोजेक्ट में पास होने चाहिए. इसलिए, किसी कर्नल पर टेस्ट पास करना, सिर्फ़ उससे जुड़ी सामान्य कर्नल ब्रांच से लगातार मर्ज करने का मामला है.
योगदान
समस्याओं की शिकायत करें
Android समस्या ट्रैकर में, कर्नल नेटवर्क टेस्ट से जुड़ी किसी भी समस्या की शिकायत करें. इसके लिए, Component-Networking लेबल का इस्तेमाल करें.
दस्तावेज़ में बदलाव करना और टेस्ट जोड़ना
ऊपर बताए गए तरीके से समस्याओं की शिकायत करें. साथ ही, अगर हो सके, तो समस्या को ठीक करने के लिए बदलाव अपलोड करें. ऐसा तब करें, जब:
- ये टेस्ट, सामान्य कर्नल ट्री पर पास नहीं होते
- आपको कोई ऐसा ज़रूरी कमिट मिलता है जिसका सोर्स टिप्पणियों में ज़िक्र नहीं किया गया है,
- अपस्ट्रीम कर्नलों पर टेस्ट पास करने के लिए, बड़े बदलाव करने पड़ते हैं
- आपको लगता है कि टेस्ट में बहुत ज़्यादा जानकारी दी गई है या आने वाले समय में कर्नल के नए वर्शन पर टेस्ट फ़ेल हो जाएगा
- आपको मौजूदा टेस्ट में ज़्यादा टेस्ट या ज़्यादा कवरेज जोड़ना हो.
