GKI ভার্সনিং স্কিম

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

শর্তাবলীর সারসংক্ষেপ

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

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

নিচের সারণীতে রেফারেন্স হিসেবে অন্যান্য সম্পর্কিত শব্দ তালিকাভুক্ত করা হয়েছে।

নাম প্রতীক উদাহরণ বিবরণ
w.x.y w.x.y 5.4.42

বিস্তারিত জানতে, Linux Kernel Makefiles দেখুন ("KERNELRELEASE" সার্চ করুন)।

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

এই ভেরিয়েবলকে libkver-এ kernel_version_tuple বলা হয়।

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

কার্নেল ব্রাঞ্চ zzz-w.x android12-5.4 এই শব্দটি সাধারণ কার্নেল ব্রাঞ্চের ধরন-এ ব্যবহার করা হয়।
ভার্সন সপ্তাহ 5 এই ডকুমেন্টে এই শব্দটি ব্যবহার করা হয়নি। এই ভেরিয়েবলকে libkver-এ version বলা হয়।
প্যাচ লেভেল x 4 এই ডকুমেন্টে এই শব্দ ব্যবহার করা হয়নি। এই ভেরিয়েবলকে libkver-এ patch_level বলা হয়।
Android রিলিজ zzz android12

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

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

OTA বা মেইনলাইন সহ কোনও আপডেটেই Android রিলিজ নম্বর কমানো যাবে না।

KMI জেনারেশন k 0

এটি হল একটি অতিরিক্ত নম্বর যা অপ্রত্যাশিত ইভেন্ট সামলানোর জন্য যোগ করা হয়েছে। নিরাপত্তা সংক্রান্ত সমস্যার সমাধান করার জন্য একই Android রিলিজের মধ্যে KMI-তে পরিবর্তন করতে হলে, 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 ভার্সন

সংজ্ঞা

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-এর আউটপুটকে নিম্নলিখিত রেজেক্স দিয়ে পার্স করা হয় (ধরে নেওয়া হয় যে zzz সবসময় "android" দিয়ে শুরু হয়):

^(?P<w>\d+)[.](?P<x>\d+)[.](?P<y>\d+)-(?P<z>android\d+)-(?P<k>\d+).*$

এড়িয়ে যাওয়া তথ্যের মধ্যে ci.android.com বিল্ড নম্বর, বেসলাইন কার্নেলের উপরে প্যাচের সংখ্যা এবং git কমিটের SHA হ্যাশের মতো তথ্য থাকতে পারে।

libkver

libkver লাইব্রেরি, কার্নেল রিলিজ বা KMI ভার্সন স্ট্রিং পার্স করার জন্য C++ ইন্টারফেস প্রদান করে। libkver যেসব API দেখায় সেগুলির তালিকা দেখতে, packages/modules/Gki/libkver/include/kver দেখুন।

VINTF চেক

Android 11 বা এর আগের যেকোনও ভার্সনের জন্য, KMI ভার্সনের Android রিলিজ পার্টটি ডিভাইস প্রস্তুতকারক ডিভাইসের ম্যানিফেস্টে ম্যানুয়ালি নির্দিষ্ট করে। বিস্তারিত জানতে, VINTF কার্নেল ম্যাচ সংক্রান্ত নিয়ম দেখুন।

Android S থেকে, KMI ভার্সনের Android রিলিজ পার্টটি কার্নেল থেকে এক্সট্র্যাক্ট করা যাবে এবং বিল্ড করার সময় ডিভাইস ম্যানিফেস্টে ইনজেক্ট করা যাবে।

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

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

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

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

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

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

OTA আপডেটের আগে, OTA ক্লায়েন্ট অন্য যেকোনও পার্টিশনের মতো একই পদ্ধতিতে বুট ইমেজ ভার্সন চেক করে।