এই পৃষ্ঠায় জেনেরিক কার্নেল ইমেজ (GKI)-এর ভার্সনিং স্কিম বর্ণনা করা হয়েছে। একটি জেনেরিক কার্নেল ইমেজ (GKI)-এর একটি অনন্য শনাক্তকারী থাকে, যাকে কার্নেল রিলিজ বলা হয়। কার্নেল রিলিজটি কার্নেল মডিউল ইন্টারফেস (KMI) ভার্সন এবং সাবলেভেল নিয়ে গঠিত। কার্নেল রিলিজটি যে ইমেজটি রিলিজ করা হচ্ছে তার জন্য নির্দিষ্ট, যেখানে KMI ভার্সনটি সেই ইন্টারফেসকে প্রতিনিধিত্ব করে যার উপর ভিত্তি করে একটি রিলিজ তৈরি করা হয়। একটি KMI ভার্সন একাধিক কার্নেল রিলিজ সমর্থন করতে পারে। একটি কার্নেল রিলিজ শুধুমাত্র একটি KMI ভার্সনের সাথে আবদ্ধ থাকে। যদি কোনো বিরল পরিস্থিতিতে কার্নেল মডিউল ইন্টারফেস পরিবর্তন করতে হয়, তবে KMI ভার্সনের পরিবর্তনটি প্রতিফলিত করার জন্য KMI জেনারেশনটি পুনরাবৃত্তি করা হয়।
শর্তাবলীর সারাংশ
নিম্নলিখিত সারণিতে এই পৃষ্ঠায় এবং GKI আপডেটের জন্য ব্যবহৃত গুরুত্বপূর্ণ পরিভাষাগুলোর সারসংক্ষেপ দেওয়া হলো।
| নাম | প্রতীক | উদাহরণ | বর্ণনা |
|---|---|---|---|
| কার্নেল রিলিজ | wxy-zzz-k-suffix | 5.4.42-android12-0-foo | একটি GKI রিলিজের অনন্য শনাক্তকারী। এটি হলো uname দ্বারা ফেরত দেওয়া মান। |
| কেএমআই সংস্করণ | wx-zzz-k | ৫.৪-অ্যান্ড্রয়েড১২-০ | GKI এবং ডাইনামিক্যালি লোডেবল কার্নেল মডিউল (DLKM)-এর মধ্যেকার কার্নেল মডিউল ইন্টারফেস (KMI) বর্ণনা করে। |
| উপস্তর | y | ৪২ | একই KMI সংস্করণের মধ্যে কার্নেল রিলিজগুলোর প্রকাশের ক্রম বর্ণনা করে। |
তথ্যসূত্র হিসেবে নিম্নলিখিত সারণিতে অন্যান্য প্রাসঙ্গিক পরিভাষাগুলো তালিকাভুক্ত করা হলো।
| নাম | প্রতীক | উদাহরণ | বর্ণনা |
|---|---|---|---|
| wxy | wxy | ৫.৪.৪২ | বিস্তারিত জানতে, লিনাক্স কার্নেল মেকফাইলস দেখুন ('KERNELRELEASE' অনুসন্ধান করুন)। এই ডকুমেন্ট জুড়ে wxy সরাসরি ব্যবহৃত হয়েছে। এটিকে সাধারণত তিন-অংশের সংস্করণ নম্বর হিসেবেও উল্লেখ করা হয়। VINTF-এ ব্যবহৃত পরিভাষা, কার্নেল সংস্করণ , অন্যান্য পরিভাষার সাথে, বিশেষ করে w-এর সাথে, বিভ্রান্তি সৃষ্টি করতে পারে। এই ভেরিয়েবলটিকে libkver- এ kernel_version_tuple হিসাবে উল্লেখ করা হয়। OTA বা মেইনলাইন সহ কোনো আপডেটের মাধ্যমেই এই টাপলটির পরিমাণ কমানো যাবে না। |
| কার্নেল শাখা | zzz-wx | অ্যান্ড্রয়েড১২-৫.৪ | এই পরিভাষাটি সাধারণ কার্নেল শাখার প্রকারভেদ -এ ব্যবহৃত হয়। |
| সংস্করণ | ডব্লিউ | ৫ | এই পরিভাষাটি এই নথিতে ব্যবহৃত হয়নি। libkver- এ এই ভেরিয়েবলটিকে version হিসেবে উল্লেখ করা হয়। |
| প্যাচ স্তর | x | ৪ | এই পরিভাষাটি এই নথিতে ব্যবহৃত হয়নি। libkver- এ এই ভেরিয়েবলটিকে patch_level হিসেবে উল্লেখ করা হয়। |
| অ্যান্ড্রয়েড রিলিজ | zzz | অ্যান্ড্রয়েড১২ | এটি হলো অ্যান্ড্রয়েড (ডেজার্ট) রিলিজ নম্বর, যার সাথে কার্নেলটি যুক্ত। OTA বা মেইনলাইন সহ কোনো আপডেটের মাধ্যমে অ্যান্ড্রয়েড রিলিজ নম্বর কমানো যাবে না। |
| কেএমআই প্রজন্ম | কে | ০ | অপ্রত্যাশিত ঘটনা মোকাবেলার জন্য এটি একটি অতিরিক্ত সংখ্যা। যদি একই অ্যান্ড্রয়েড রিলিজের মধ্যে কোনো নিরাপত্তা ত্রুটি সংশোধনের জন্য KMI-তে পরিবর্তনের প্রয়োজন হয়, তবে একটি KMI জেনারেশন বাড়ানো হয়। কেএমআই জেনারেশন নম্বর ০ থেকে শুরু হয়। |
সংস্করণ নকশা
কার্নেল রিলিজ
সংজ্ঞা
যেসব ডিভাইস GKI সহ আসে, সেগুলোর ক্ষেত্রে কার্নেল রিলিজ নিম্নরূপভাবে সংজ্ঞায়িত করা হয়:
KernelRelease :=
Version.PatchLevel.SubLevel-AndroidRelease-KmiGeneration-suffix
w .x .y -zzz -k -something
আরও তথ্যের জন্য, একটি ডিভাইস থেকে কার্নেল রিলিজ নির্ধারণ দেখুন।
নিম্নলিখিতটি কার্নেল রিলিজের একটি উদাহরণ।
5.4.42-android12-0-00544-ged21d463f856
বর্ণনা
কার্নেল রিলিজ হলো একটি GKI রিলিজের অনন্য আইডি। যদি দুটি GKI বাইনারির কার্নেল রিলিজ একই হয়, তবে সেগুলোকে অবশ্যই বাইট-ভিত্তিক অভিন্ন হতে হবে।
একটি কার্নেল রিলিজ একটি KMI ভার্সন, একটি সাবলেভেল এবং একটি সাফিক্স নিয়ে গঠিত। এই ডকুমেন্টের উদ্দেশ্যে, KMI জেনারেশনের পরবর্তী সাফিক্সটি উপেক্ষা করা হয়েছে।
কেএমআই সংস্করণ
সংজ্ঞা
KMI সংস্করণটি নিম্নরূপভাবে সংজ্ঞায়িত করা হয়েছে:
KmiVersion :=
Version.PatchLevel-AndroidRelease-KmiGeneration
w .x -zzz -k
উল্লেখ্য যে, উপস্তর y , KMI সংস্করণের অংশ নয়। কার্নেল রিলিজ- এর উদাহরণটির ক্ষেত্রে, KMI সংস্করণটি হলো:
5.4-android12-0
বর্ণনা
KMI সংস্করণটি GKI এবং ডাইনামিক্যালি লোডেবল কার্নেল মডিউল (DLKM)-এর মধ্যেকার কার্নেল মডিউল ইন্টারফেস (KMI)-এর বর্ণনা দেয়।
যদি দুটি কার্নেল রিলিজের KMI সংস্করণ একই হয়, তবে তারা একই কার্নেল মডিউল ইন্টারফেস প্রয়োগ করে। যে DLKM-গুলো একটির সাথে সামঞ্জস্যপূর্ণ, সেগুলো অন্যটির সাথেও সামঞ্জস্যপূর্ণ।
কোনো OTA আপডেটের মাধ্যমে KMI ভার্সন কমানো যাবে না।
উপস্তর
উপস্তর y , একই KMI সংস্করণের মধ্যে কার্নেল রিলিজগুলোর প্রকাশের ক্রম বর্ণনা করে।
একই KMI সংস্করণ কিন্তু যথাক্রমে Y1 এবং Y2 সাবলেভেল থাকা দুটি কার্নেল রিলিজের জন্য:
- যদি Y1, Y2-এর চেয়ে কম বা সমান হয়, তাহলে Y1 চালিত কোনো ডিভাইস Y2-তে আপডেট পেতে পারে।
- যদি Y1, Y2 থেকে বড় হয়, তাহলে Y1 চালিত কোনো ডিভাইস Y2-তে আপডেট করা যাবে না।
অর্থাৎ, যদি KMI ভার্সন পরিবর্তিত না হয়, তাহলে কোনো OTA আপডেটের মাধ্যমে সাবলেভেল কমানো যাবে না।
একটি ডিভাইস থেকে কার্নেল রিলিজ নির্ধারণ করুন
সম্পূর্ণ কার্নেল রিলিজটি uname -r , অথবা নিম্নলিখিত কোড স্নিপেট সহ uname(2) এক্সিকিউট করে পাওয়া যাবে:
std::string get_kernel_release() {
struct utsname buf;
return uname(&buf) == 0 ? buf.release : "";
}
একটি উদাহরণ আউটপুট হলো:
5.4.42-android12-0-00544-ged21d463f856
এই ডকুমেন্টের উদ্দেশ্যে, কার্নেল তথ্য নিষ্কাশন করার সময় KMI জেনারেশনের পরের সবকিছু উপেক্ষা করা হয়। আরও আনুষ্ঠানিকভাবে বলতে গেলে, uname -r এর আউটপুট নিম্নলিখিত রেজেক্স (regex ) দিয়ে পার্স করা হয় (এই ধরে নিয়ে যে zzz সর্বদা 'android' দিয়ে শুরু হয়):
^(?P<w>\d+)[.](?P<x>\d+)[.](?P<y>\d+)-(?P<z>android\d+)-(?P<k>\d+).*$
উপেক্ষা করা তথ্যের মধ্যে ci.android.com বিল্ড নম্বর, বেসলাইন কার্নেলের উপর প্যাচের সংখ্যা এবং গিট কমিটের SHA হ্যাশের মতো তথ্য অন্তর্ভুক্ত থাকতে পারে।
libkver
libkver লাইব্রেরিটি কার্নেল রিলিজ বা KMI ভার্সন স্ট্রিং পার্স করার জন্য একটি C++ ইন্টারফেস প্রদান করে। libkver যেসব API উন্মুক্ত করে তার তালিকার জন্য packages/modules/Gki/libkver/include/kver দেখুন।
VINTF চেক
অ্যান্ড্রয়েড ১১ বা তার নিচের সংস্করণের ক্ষেত্রে, KMI ভার্সনের অ্যান্ড্রয়েড রিলিজ অংশটি ডিভাইস প্রস্তুতকারকদের দ্বারা ডিভাইস ম্যানিফেস্টে ম্যানুয়ালি নির্দিষ্ট করা হয়। বিস্তারিত জানতে, VINTF কার্নেল ম্যাচ নিয়মাবলী দেখুন।
অ্যান্ড্রয়েড এস থেকে, কেএমআই ভার্সনের অ্যান্ড্রয়েড রিলিজ অংশটি কার্নেল থেকে এক্সট্র্যাক্ট করে বিল্ড করার সময় ডিভাইস ম্যানিফেস্টে ইনজেক্ট করা যায়।
যেহেতু কার্নেল কনফিগারেশনের প্রয়োজনীয়তা সাধারণত পরিবর্তিত হয় না, তাই কম্প্যাটিবিলিটি ম্যাট্রিক্সের মধ্যে k এনকোড করার কোনো প্রয়োজন নেই। তবে, এমন অসম্ভাব্য ক্ষেত্রে যদি কার্নেল কনফিগারেশনের প্রয়োজনীয়তা পরিবর্তন করার প্রয়োজন হয়, তাহলে নিম্নলিখিত বিষয়গুলো নিশ্চিত করুন:
- সামঞ্জস্য ম্যাট্রিক্স থেকে সংশ্লিষ্ট প্রয়োজনীয়তাটি সরিয়ে দেওয়া হয়েছে।
- KMI তৈরির শর্তে নতুন প্রয়োজনীয়তাগুলো যাচাই করার জন্য অতিরিক্ত VTS পরীক্ষা যোগ করা হয়েছে।
OTA মেটাডেটাতে বুট ইমেজ সংস্করণ
বুট ইমেজ OTA-এর মাধ্যমে আপডেট করা হলেও, এটিকে অবশ্যই OTA পেলোড ফরম্যাট, payload.bin মধ্যে রাখতে হবে। OTA পেলোড প্রতিটি পার্টিশনের জন্য একটি version ফিল্ড এনকোড করে। update_engine যখন কোনো OTA পেলোড পরিচালনা করে, তখন পার্টিশনটি ডাউনগ্রেড হচ্ছে না তা নিশ্চিত করার জন্য এটি এই ফিল্ডটি তুলনা করে।
বিভ্রান্তি এড়ানোর জন্য, OTA মেটাডেটাতে বুট পার্টিশনের version ফিল্ডটিকে boot image version বলা হয়।
যেহেতু র্যামডিস্ক সবসময় একেবারে নতুন করে তৈরি করা হয়, তাই সম্পূর্ণ বুট ইমেজটি বর্ণনা করার জন্য র্যামডিস্ক টাইমস্ট্যাম্প ব্যবহার করাই যথেষ্ট। বুট ইমেজ ভার্সনে কার্নেল রিলিজ এনকোড করার কোনো প্রয়োজন নেই, যদি না ভবিষ্যতে আপনি কোনো পুরোনো বুট ইমেজকে একটি নতুন কার্নেল বাইনারির সাথে যুক্ত করেন।
OTA আপডেটের আগে, OTA ক্লায়েন্ট অন্য যেকোনো পার্টিশনের মতোই বুট ইমেজ ভার্সন যাচাই করে।