GKI সংস্করণ স্কিম

এই পৃষ্ঠাটি জেনেরিক কার্নেল ইমেজ (GKIs) এর সংস্করণের স্কিম বর্ণনা করে। একটি জেনেরিক কার্নেল ইমেজ (GKI) এর একটি অনন্য শনাক্তকারী রয়েছে যাকে কার্নেল রিলিজ বলা হয়। কার্নেল রিলিজ কার্নেল মডিউল ইন্টারফেস (KMI) সংস্করণ এবং সাবলেভেল নিয়ে গঠিত। কার্নেল রিলিজটি যে ছবিটি প্রকাশ করা হচ্ছে তার জন্য নির্দিষ্ট, যেখানে KMI সংস্করণটি সেই ইন্টারফেসের প্রতিনিধিত্ব করে যেটি থেকে একটি রিলিজ তৈরি করা হয়। একটি KMI সংস্করণ একাধিক কার্নেল রিলিজ সমর্থন করতে পারে। একটি কার্নেল রিলিজ শুধুমাত্র একটি KMI সংস্করণের সাথে সংযুক্ত থাকে। অসম্ভাব্য ইভেন্টে যেখানে কার্নেল মডিউল ইন্টারফেস পরিবর্তন করতে হবে, KMI সংস্করণে পরিবর্তন প্রতিফলিত করার জন্য KMI প্রজন্মের পুনরাবৃত্তি করা হয়।

শর্তাবলীর সারাংশ

নিম্নলিখিত সারণী এই পৃষ্ঠায় এবং GKI আপডেটের জন্য ব্যবহৃত গুরুত্বপূর্ণ পদগুলির সংক্ষিপ্ত বিবরণ দেয়৷

নাম প্রতীক উদাহরণ বর্ণনা
কার্নেল রিলিজ wxy-zzz-k- প্রত্যয় 5.4.42-android12-0-foo একটি GKI রিলিজের জন্য অনন্য শনাক্তকারী। এটি uname দ্বারা প্রত্যাবর্তিত মান।
KMI সংস্করণ wx-zzz-k 5.4-android12-0 GKI এবং গতিশীলভাবে লোডযোগ্য কার্নেল মডিউল (DLKM) এর মধ্যে কার্নেল মডিউল ইন্টারফেস (KMI) বর্ণনা করে।
উপস্তর y 42 একই KMI সংস্করণের মধ্যে কার্নেল রিলিজের রিলিজ অর্ডার বর্ণনা করে।

নিম্নলিখিত সারণী একটি রেফারেন্স হিসাবে অন্যান্য সম্পর্কিত পদ তালিকাভুক্ত.

নাম প্রতীক উদাহরণ বর্ণনা
wxy wxy ৫.৪.৪২

বিস্তারিত জানার জন্য, লিনাক্স কার্নেল মেকফাইলস দেখুন ("KERNELRELEASE" অনুসন্ধান করুন)।

wxy এই নথিতে সরাসরি ব্যবহার করা হয়। এটিকে সাধারণত তিন-অংশের সংস্করণ নম্বর হিসাবেও উল্লেখ করা হয়। VINTF, কার্নেল সংস্করণে ব্যবহৃত শব্দটি অন্যান্য পদের সাথে বিভ্রান্তির কারণ হতে পারে, বিশেষ করে w .

এই ভেরিয়েবলটিকে libkver-kernel_version_tuple হিসাবে উল্লেখ করা হয়।

এই টিপলটি ওটিএ বা মেইনলাইন সহ কোনও আপডেট দ্বারা হ্রাস করা উচিত নয়।

কার্নেল শাখা zzz-wx android12-5.4 এই শব্দটি সাধারণ কার্নেল শাখা প্রকারে ব্যবহৃত হয়।
সংস্করণ w 5 এই শব্দটি এই নথিতে ব্যবহৃত হয় না। এই ভেরিয়েবলটিকে libkver-সংস্করণ হিসাবে উল্লেখ করা হয়।
প্যাচ স্তর x 4 এই শব্দটি এই নথিতে ব্যবহৃত হয় না। এই ভেরিয়েবলটিকে libkver-patch_level হিসাবে উল্লেখ করা হয়।
অ্যান্ড্রয়েড রিলিজ zzz android12

এটি হল Android (ডেজার্ট) রিলিজ নম্বর যার সাথে কার্নেল যুক্ত।

AndroidRelease ক্ষেত্রের তুলনা করার সময়, তুলনা করার জন্য স্ট্রিং থেকে সাংখ্যিক অংশ বের করা হয়।

অ্যান্ড্রয়েড রিলিজ নম্বরটি ওটিএ বা মেইনলাইন সহ কোনও আপডেট দ্বারা হ্রাস করা উচিত নয়৷

কেএমআই প্রজন্ম k 0

এটি অসম্ভাব্য ঘটনা মোকাবেলা করার জন্য যোগ করা একটি অতিরিক্ত সংখ্যা। যদি একটি নিরাপত্তা বাগ ফিক্সের জন্য একই Android রিলিজের মধ্যে KMI-তে পরিবর্তনের প্রয়োজন হয়, তাহলে একটি KMI জেনারেশন বাড়ানো হয়।

KMI জেনারেশন নম্বর 0 দিয়ে শুরু হয়।

সংস্করণ নকশা

কার্নেল রিলিজ

সংজ্ঞা

GKI-এর সাহায্যে পাঠানো ডিভাইসগুলির জন্য, কার্নেল রিলিজটি নিম্নরূপ সংজ্ঞায়িত করা হয়েছে:

KernelRelease :=
Version.PatchLevel.SubLevel-AndroidRelease-KmiGeneration-suffix
w      .x         .y       -zzz           -k            -something

আরও তথ্যের জন্য, ডিভাইস থেকে কার্নেল রিলিজ নির্ধারণ করা দেখুন।

নিম্নলিখিত একটি কার্নেল রিলিজ একটি উদাহরণ.

5.4.42-android12-0-00544-ged21d463f856

বর্ণনা

কার্নেল রিলিজ হল একটি GKI রিলিজের অনন্য ID। যদি দুটি GKI বাইনারি একই কার্নেল রিলিজ থাকে, তাহলে সেগুলি অবশ্যই বাইট অনুসারে অভিন্ন হতে হবে।

একটি কার্নেল রিলিজ একটি KMI সংস্করণ, একটি উপস্তর এবং একটি প্রত্যয় নিয়ে গঠিত। এই নথির উদ্দেশ্যে, KMI প্রজন্মের পরে প্রত্যয় উপেক্ষা করা হয়।

KMI সংস্করণ

সংজ্ঞা

KMI সংস্করণটি নিম্নরূপ সংজ্ঞায়িত করা হয়েছে:

KmiVersion :=
Version.PatchLevel-AndroidRelease-KmiGeneration
w      .x         -zzz           -k

মনে রাখবেন যে sublevel, y KMI সংস্করণের অংশ নয়। কার্নেল রিলিজের উদাহরণের জন্য, KMI সংস্করণ হল:

5.4-android12-0

বর্ণনা

KMI সংস্করণ GKI এবং গতিশীলভাবে লোডযোগ্য কার্নেল মডিউল (DLKM) এর মধ্যে কার্নেল মডিউল ইন্টারফেস (KMI) বর্ণনা করে।

দুটি কার্নেল রিলিজের একই KMI সংস্করণ থাকলে, তারা একই কার্নেল মডিউল ইন্টারফেস প্রয়োগ করে। একটির সাথে সামঞ্জস্যপূর্ণ DLKMগুলি অন্যটির সাথে সামঞ্জস্যপূর্ণ।

KMI সংস্করণ কোনো OTA আপডেট দ্বারা হ্রাস করা উচিত নয়।

উপস্তর

সাবলেভেল, 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 চেক করে

অ্যান্ড্রয়েড 11 বা তার নিচের সংস্করণের জন্য, কেএমআই সংস্করণের অ্যান্ড্রয়েড রিলিজ অংশটি ডিভাইস নির্মাতাদের দ্বারা ডিভাইস ম্যানিফেস্টে ম্যানুয়ালি নির্দিষ্ট করা হয়েছে। বিস্তারিত জানার জন্য, VINTF কার্নেল ম্যাচের নিয়ম দেখুন।

অ্যান্ড্রয়েড এস থেকে, কেএমআই সংস্করণের অ্যান্ড্রয়েড রিলিজ অংশটি কার্নেল থেকে বের করা যেতে পারে এবং বিল্ড টাইমে ডিভাইস ম্যানিফেস্টে ইনজেক্ট করা যেতে পারে।

কারণ কার্নেল কনফিগারেশন প্রয়োজনীয়তা সাধারণত পরিবর্তন হয় না, সামঞ্জস্যতা ম্যাট্রিক্সের মধ্যে k এনকোড করার কোন প্রয়োজন নেই। যাইহোক, অসম্ভাব্য ক্ষেত্রে যেখানে কার্নেল কনফিগারেশনের প্রয়োজনীয়তা পরিবর্তন করতে হবে, নিম্নলিখিতগুলি নিশ্চিত করুন:

  • সামঞ্জস্যতা ম্যাট্রিক্স থেকে সংশ্লিষ্ট প্রয়োজনীয়তা সরানো হয়েছে।
  • KMI জেনারেশনের শর্তসাপেক্ষে নতুন প্রয়োজনীয়তা পরীক্ষা করতে অতিরিক্ত VTS পরীক্ষা যোগ করা হয়েছে।

OTA মেটাডেটাতে বুট ইমেজ সংস্করণ

এমনকি যদি বুট ইমেজটি OTA একটি আপডেটের মাধ্যমে আপডেট করা হয়, এটি অবশ্যই OTA পেলোড ফরম্যাটে, payload.bin এ আবৃত করতে হবে। OTA পেলোড প্রতিটি পার্টিশনের জন্য একটি version ক্ষেত্র এনকোড করে। যখন update_engine একটি OTA পেলোড পরিচালনা করে, তখন পার্টিশনটি ডাউনগ্রেড না হয় তা নিশ্চিত করতে এটি এই ক্ষেত্রটির তুলনা করে।

বিভ্রান্তি এড়াতে, OTA মেটাডেটাতে বুট পার্টিশনের version ক্ষেত্রটিকে boot image version বলা হয়।

কারণ রামডিস্ক সর্বদা স্ক্র্যাচ থেকে তৈরি করা হয়, পুরো বুট চিত্র বর্ণনা করার জন্য রামডিস্ক টাইমস্ট্যাম্প ব্যবহার করা যথেষ্ট। বুট ইমেজ সংস্করণে কার্নেল রিলিজ এনকোড করার কোন প্রয়োজন নেই, যদি না আপনি ভবিষ্যতে একটি নতুন কার্নেল বাইনারিতে একটি পুরানো বুট ইমেজ সেলাই করছেন।

একটি OTA আপডেটের আগে, OTA ক্লায়েন্ট বুট ইমেজ সংস্করণটি অন্য পার্টিশনের মতোই পরীক্ষা করে।