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

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

পদের সারাংশ

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

নাম প্রতীক উদাহরণ বিবরণ
কার্নেল রিলিজ wxy-zzz-k-প্রত্যয় ৫.৪.৪২-অ্যান্ড্রয়েড১২-০-ফু GKI রিলিজের জন্য অনন্য শনাক্তকারী। এটি uname দ্বারা প্রদত্ত মান।
কেএমআই সংস্করণ wx-zzz-k সম্পর্কে ৫.৪-অ্যান্ড্রয়েড১২-০ GKI এবং গতিশীলভাবে লোডযোগ্য কার্নেল মডিউল (DLKM) এর মধ্যে কার্নেল মডিউল ইন্টারফেস (KMI) বর্ণনা করে।
উপস্তর y ৪২ একই KMI সংস্করণের মধ্যে কার্নেল রিলিজের রিলিজ অর্ডার বর্ণনা করে।

নিম্নলিখিত সারণিতে অন্যান্য সম্পর্কিত শব্দের তালিকা রেফারেন্স হিসেবে দেওয়া হল।

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

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

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

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

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

কার্নেল শাখা zzz-wx সম্পর্কে অ্যান্ড্রয়েড১২-৫.৪ এই শব্দটি সাধারণ কার্নেল শাখার ধরণগুলিতে ব্যবহৃত হয়।
সংস্করণ w সম্পর্কে এই নথিতে এই শব্দটি ব্যবহার করা হয়নি। libkver- এ এই চলকটিকে version বলা হয়।
প্যাচ লেভেল এক্স এই নথিতে এই শব্দটি ব্যবহার করা হয়নি। libkver- এ এই ভেরিয়েবলটিকে patch_level বলা হয়।
অ্যান্ড্রয়েড রিলিজ zzz এর বিবরণ অ্যান্ড্রয়েড১২

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

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

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

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

এটি অসম্ভাব্য ঘটনা মোকাবেলা করার জন্য যোগ করা একটি অতিরিক্ত সংখ্যা। যদি কোনও নিরাপত্তা বাগ সমাধানের জন্য একই অ্যান্ড্রয়েড রিলিজের মধ্যে 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 রিলিজের অনন্য আইডি। যদি দুটি 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, কার্নেল রিলিজ বা KMI সংস্করণ স্ট্রিং পার্স করার জন্য একটি C++ ইন্টারফেস প্রদান করে। libkver দ্বারা প্রকাশিত API গুলির তালিকার জন্য, packages/modules/Gki/libkver/include/kver দেখুন।

ভিআইএনটিএফ চেক

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

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

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

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

OTA মেটাডেটাতে বুট ইমেজ ভার্সন

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

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

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

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