Android 5.0 থেকে, Linux কার্নেলে Android নেটওয়ার্কিং স্ট্যাকের সঠিক অপারেশনের জন্য বেশ কিছু কমিট প্রয়োজন যা তুলনামূলকভাবে সম্প্রতি আপস্ট্রিম করা হয়েছে অথবা এখনও আপস্ট্রিম করা হয়নি। প্রয়োজনীয় কার্নেল ফাংশনালিটি ম্যানুয়ালি যাচাই করা বা মিসিং কমিট ট্র্যাক করা সহজ নয়, তাই Android টিম কার্নেল যাতে প্রত্যাশিত আচরণ করে তা নিশ্চিত করতে, এটি যে পরীক্ষাগুলি ব্যবহার করে সেগুলি শেয়ার করছে।
টেস্ট চালানোর কারণ
এইসব পরীক্ষা তিনটি প্রধান কারণে করা হয়:
- কোনও ডিভাইসে ব্যবহৃত Linux কার্নেলের সঠিক ভার্সন সাধারণত ডিভাইস-নির্দিষ্ট হয় এবং কোনও কার্নেল সঠিকভাবে কাজ করছে কিনা তা টেস্ট না চালিয়ে জানা কঠিন।
- বিভিন্ন কার্নেল ভার্সন বা বিভিন্ন ডিভাইস ট্রি-তে কার্নেল প্যাচ ফরওয়ার্ড-পোর্টিং ও ব্যাক-পোর্টিং করলে, সূক্ষ্ম সমস্যা হতে পারে যা টেস্ট না চালালে ধরা সম্ভব নয়।
- নতুন নেটওয়ার্কিং ফিচারের জন্য নতুন কার্নেল ফাংশনালিটি বা কার্নেল সংক্রান্ত সমস্যার সমাধান প্রয়োজন হতে পারে।
পরীক্ষায় উত্তীর্ণ না হলে, ডিভাইসের নেটওয়ার্ক স্ট্যাক ভুল আচরণ করে, যার ফলে ব্যবহারকারী-দৃশ্যমান কানেক্টিভিটি সংক্রান্ত সমস্যা হয় (যেমন, ওয়াই-ফাই নেটওয়ার্ক থেকে ডিসকানেক্ট হয়ে যাওয়া)। ডিভাইসটি Android কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) টেস্টেও সম্ভবত ব্যর্থ হবে।
টেস্ট ব্যবহার করুন
Linux হোস্ট মেশিনে প্রসেস হিসেবে কার্নেল বুট করার জন্য টেস্টে ইউজার-মোড Linux ব্যবহার করা হয়। উপযুক্ত অপারেটিং সিস্টেম ভার্সনের জন্য বিল্ড এনভায়রনমেন্ট সেট করা দেখুন। ইউনিট টেস্ট ফ্রেমওয়ার্ক উপযুক্ত ডিস্ক ইমেজ সহ কার্নেল বুট করে এবং হোস্ট ফাইল সিস্টেম থেকে টেস্ট রান করে। Python-এ টেস্ট লেখা হয় এবং কার্নেল আচরণ ও সকেট API-কে প্রয়োগ করার জন্য TAP ইন্টারফেস ব্যবহার করা হয়।
ARCH=um-এর জন্য কার্নেল কম্পাইল করুন
টেস্ট চালানোর জন্য,
ARCH=um SUBARCH=x86_64-এর জন্য কার্নেল কম্পাইল করতে হবে। এটি হল
আপস্ট্রিম ও সাধারণ Android কার্নেল ট্রি, দু'জায়গাতেই কাজ করে এমন আর্কিটেকচার
(যেমন android-4.4)। কিন্তু কখনও কখনও ডিভাইস
কার্নেল এই মোডে কম্পাইল হয় না কারণ ডিভাইস ট্রি, সাধারণ ফাইলে
ডিভাইস-নির্দিষ্ট বা হার্ডওয়্যার-নির্দিষ্ট কোড (যেমন
sys/exit.c) থাকে।
অনেক ক্ষেত্রে, এটি নিশ্চিত করাই যথেষ্ট যে
হার্ডওয়্যার-নির্দিষ্ট কোড #ifdef-এর পিছনে আছে। সাধারণত এটি কোডের সাথে প্রাসঙ্গিক নির্দিষ্ট
ফিচার কন্ট্রোল করে এমন কনফিগারেশন বিকল্পে
#ifdef হওয়া উচিত। এই ধরনের কোনও কনফিগারেশন বিকল্প না থাকলে, #ifndef CONFIG_UML ব্লকের মধ্যে
হার্ডওয়্যার-নির্দিষ্ট কোড লিখুন।
সাধারণত, এটি ঠিক করার দায়িত্ব কার্নেল ট্রি প্রদানকারীর (যেমন চিপসেট বা SoC ভেন্ডর) হওয়া উচিত। বর্তমান ও ভবিষ্যতের কার্নেল যাতে কোনও পরিবর্তন
ছাড়াই ARCH=um
SUBARCH=x86_64-এর জন্য কম্পাইল করা যায় তা নিশ্চিত করতে আমরা OEM ও ভেন্ডরদের সাথে কাজ করছি।
টেস্টগুলি চালান
টেস্টগুলি kernel/tests/net/test-এ আছে।
AOSP মূল থেকে টেস্ট রান করা সাজেস্ট করা হয় কারণ সেগুলি
সবচেয়ে আপ-টু-ডেট; কিছু ক্ষেত্রে, কোনও Android রিলিজের মধ্যে সঠিকভাবে অপারেশন করার জন্য প্রয়োজনীয়
কার্নেল ফিচারের এখনও সম্পূর্ণ টেস্ট কভারেজ
নেই। কীভাবে পরীক্ষা চালাবেন সেই সম্পর্কিত তথ্যের জন্য, kernel
network test README ফাইল দেখুন। মূলত, আপনার কার্নেল ট্রির উপর থেকে রান করুন:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
পরীক্ষায় পাস করা
কার্নেল নেটওয়ার্ক টেস্ট Python
সোর্স ফাইলে এমন কমেন্ট থাকে যা সেইসব কার্নেল কমিট নির্দিষ্ট করে যেগুলি টেস্টে পাস করার জন্য
প্রয়োজনীয় বলে জানা যায়। AOSP-এর
kernel/common
প্রোজেক্টে সাধারণ কার্নেল ট্রি - সব
সাধারণ কার্নেল ব্রাঞ্চ android-4.4 ও তার উপরের ভার্সনে - পরীক্ষাগুলি পাস করতে হবে। তাই, কার্নেলে পরীক্ষা পাস করা হল সংশ্লিষ্ট সাধারণ কার্নেল শাখা থেকে
অবিরত মার্জ করার বিষয়।
অবদান
সমস্যা সম্পর্কে অভিযোগ জানান
Component-Networking লেবেল সহ Android সমস্যা ট্র্যাকার-এ কার্নেল নেটওয়ার্ক টেস্ট সংক্রান্ত যেকোনও সমস্যার বিষয়ে অভিযোগ জানান।
ডকুমেন্ট কমিট করা এবং টেস্ট যোগ করা
উপরে বর্ণিত সমস্যাগুলি সম্পর্কে অভিযোগ জানান এবং সম্ভব হলে, সমস্যা সমাধানের জন্য পরিবর্তন আপলোড করুন, যদি:
- সাধারণ কার্নেল ট্রি-তে পরীক্ষাগুলি পাস করে না
- আপনি এমন একটি প্রয়োজনীয় কমিট খুঁজে পান যা সোর্স কমেন্টে উল্লেখ করা নেই,
- আপস্ট্রিম কার্নেলে পরীক্ষা পাস করাতে হলে বড় ধরনের পরিবর্তন করতে হবে
- আপনার যদি মনে হয় যে পরীক্ষাগুলি অতিরিক্ত নির্দিষ্ট করা হয়েছে অথবা ভবিষ্যতে কার্নেলে পরীক্ষাগুলি ব্যর্থ হবে
- আপনি বর্তমান টেস্টে আরও টেস্ট বা আরও কভারেজ যোগ করতে চান।