कर्नेल नेटवर्किंग यूनिट की जांच

Android 5.0 के बाद, Linux केर्नल पर Android नेटवर्किंग स्टैक के सही तरीके से काम करने के लिए, कई कमिट की ज़रूरत होती है. ये कमिट, अपस्ट्रीम में हाल ही में अपलोड किए गए हैं या अब तक अपस्ट्रीम में नहीं किए गए हैं. कर्नेल की ज़रूरी सुविधाओं की मैन्युअल तौर पर पुष्टि करना या छूटे हुए कमिट को ट्रैक करना आसान नहीं है. इसलिए, Android टीम उन टेस्ट को शेयर कर रही है जिनका इस्तेमाल करके यह पक्का किया जाता है कि कर्नेल उम्मीद के मुताबिक काम कर रहा है.

जांच करने की वजहें

ये टेस्ट तीन मुख्य वजहों से होते हैं:

  1. आम तौर पर, किसी डिवाइस पर इस्तेमाल किए जाने वाले Linux kernel का सटीक वर्शन, डिवाइस के हिसाब से होता है. साथ ही, यह पता लगाना मुश्किल होता है कि टेस्ट किए बिना कोई भी kernel ठीक से काम करता है या नहीं.
  2. अलग-अलग वर्शन के कर्नेल या अलग-अलग डिवाइस ट्री में, कर्नेल पैच को फ़ॉरवर्ड-पोर्ट और बैक-पोर्ट करने से, ऐसी छोटी समस्याएं हो सकती हैं जिन्हें टेस्ट किए बिना पहचानना मुश्किल हो सकता है.
  3. नेटवर्किंग की नई सुविधाओं के लिए, नए कर्नेल फ़ंक्शन या कर्नेल की गड़बड़ियों को ठीक करने की ज़रूरत पड़ सकती है.

अगर जांच में डिवाइस के नेटवर्क स्टैक की परफ़ॉर्मेंस ठीक नहीं मिलती है, तो डिवाइस के नेटवर्क स्टैक का व्यवहार गलत तरीके से होता है. इससे, उपयोगकर्ता को कनेक्टिविटी से जुड़ी गड़बड़ियां दिखती हैं. जैसे, वाई-फ़ाई नेटवर्क से डिवाइस का कनेक्टिविटी टूटना. ऐसा हो सकता है कि डिवाइस, Android के साथ काम करने से जुड़े टेस्ट के लिए बने सुइट (सीटीएस) के टेस्ट भी पास न कर पाए.

टेस्ट का इस्तेमाल करना

ये टेस्ट, Linux होस्ट मशीन पर प्रोसेस के तौर पर कर्नेल को बूट करने के लिए, User-Mode Linux का इस्तेमाल करते हैं. काम करने वाले ऑपरेटिंग सिस्टम के वर्शन के लिए, बिल्ड एनवायरमेंट सेट अप करना लेख पढ़ें. यूनिट टेस्ट फ़्रेमवर्क, सही डिस्क इमेज के साथ कर्नेल को बूट करता है और होस्ट फ़ाइल सिस्टम से टेस्ट चलाता है. ये टेस्ट Python में लिखे गए हैं. साथ ही, ये कर्नेल के व्यवहार और सॉकेट एपीआई को टेस्ट करने के लिए, TAP इंटरफ़ेस का इस्तेमाल करते हैं.

ARCH=um के लिए कर्नेल को कंपाइल करना

टेस्ट चलाने के लिए, कर्नल को ARCH=um SUBARCH=x86_64 के लिए कॉम्पाइल करना होगा. यह एक ऐसा आर्किटेक्चर है जो अपस्ट्रीम और सामान्य Android kernel tree (जैसे, android-4.4) दोनों में काम करता है. हालांकि, कभी-कभी डिवाइस के kernel इस मोड में कॉम्पाइल नहीं होते, क्योंकि डिवाइस के tree में सामान्य फ़ाइलों में डिवाइस या हार्डवेयर के हिसाब से कोड होता है. उदाहरण के लिए, sys/exit.c.

कई मामलों में, यह पक्का करना काफ़ी होता है कि हार्डवेयर के हिसाब से कोड, #ifdef के पीछे हो. आम तौर पर, यह कॉन्फ़िगरेशन विकल्प पर #ifdef होना चाहिए, जो कोड से जुड़ी खास सुविधा को कंट्रोल करता है. अगर कॉन्फ़िगरेशन का कोई ऐसा विकल्प नहीं है, तो #ifndef CONFIG_UML ब्लॉक में, हार्डवेयर के हिसाब से कोड डालें.

आम तौर पर, इसे ठीक करने की ज़िम्मेदारी, कर्नेल ट्री उपलब्ध कराने वाली कंपनी की होती है. जैसे, चिपसेट या SoC वेंडर. हम OEM और वेंडर के साथ मिलकर काम कर रहे हैं, ताकि यह पक्का किया जा सके कि मौजूदा और आने वाले समय के कर्नेल, ARCH=um SUBARCH=x86_64 के लिए बिना किसी बदलाव के कॉम्पाइल हो सकें.

टेस्ट चलाना

टेस्ट kernel/tests/net/test पर हैं. हमारा सुझाव है कि टेस्ट AOSP main से चलाए जाएं, क्योंकि ये सबसे अप-टू-डेट होते हैं. कुछ मामलों में, किसी Android रिलीज़ में सही तरीके से काम करने के लिए ज़रूरी कर्नेल की सुविधाओं की पूरी जांच, उस रिलीज़ में नहीं की गई होती. टेस्ट चलाने के तरीके के बारे में जानने के लिए, कर्नल नेटवर्क टेस्ट की README फ़ाइल देखें. आम तौर पर, अपने कर्नेल ट्री में सबसे ऊपर से, यह चलाएं:

ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh

टेस्ट पास करना

कर्नेल नेटवर्क टेस्ट की Python के सोर्स फ़ाइलों में ऐसी टिप्पणियां होती हैं जिनमें कर्नेल के उन कमिट के बारे में बताया जाता है जो टेस्ट पास करने के लिए ज़रूरी होते हैं. AOSP में kernel/common प्रोजेक्ट के आम कर्नेल ट्री में, ये टेस्ट पास होने चाहिए. आम कर्नेल की सभी शाखाएं android-4.4 और उससे ज़्यादा वाली शाखाएं. इसलिए, किसी कर्नेल पर टेस्ट पास करने के लिए, उससे जुड़ी सामान्य कर्नेल शाखा से लगातार मर्ज करना ज़रूरी है.

योगदान

समस्याओं की शिकायत करें

Android के समस्या ट्रैकर में, कर्नेल नेटवर्क टेस्ट से जुड़ी किसी भी समस्या की शिकायत करें. इसके लिए, Component-Networking लेबल का इस्तेमाल करें.

कमिट को दस्तावेज़ में शामिल करना और टेस्ट जोड़ना

ऊपर बताए गए तरीके से समस्याओं की शिकायत करें. अगर हो सके, तो समस्या को ठीक करने के लिए बदलाव अपलोड करें. ऐसा तब करें, जब:

  • टेस्ट, सामान्य कर्नेल ट्री पर पास नहीं होते
  • आपको ऐसा ज़रूरी बदलाव मिलता है जिसका सोर्स की टिप्पणियों में ज़िक्र नहीं किया गया है,
  • अपस्ट्रीम कर्नेल पर टेस्ट पास करने के लिए, बड़े बदलाव करने की ज़रूरत होती है
  • आपको लगता है कि टेस्ट में ज़रूरत से ज़्यादा जानकारी दी गई है या आने वाले समय में इस्तेमाल होने वाले कोर में टेस्ट काम नहीं करता
  • आपको मौजूदा टेस्ट में ज़्यादा टेस्ट या ज़्यादा कवरेज जोड़नी है.