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