Android 12-এ বুটকনফিগ প্রয়োগ করুন

অ্যান্ড্রয়েড ১২-এ, বুটকনফিগ (bootconfig) ফিচারটি অ্যান্ড্রয়েড ১১ এবং এর পূর্ববর্তী সংস্করণগুলোতে ব্যবহৃত androidboot.* কার্নেল কমান্ডলাইন অপশনগুলোকে প্রতিস্থাপন করেছে। বুটকনফিগ ফিচারটি হলো বিল্ড এবং বুটলোডার থেকে অ্যান্ড্রয়েড ১২-এ কনফিগারেশনের বিবরণ প্রেরণের একটি পদ্ধতি।

এই বৈশিষ্ট্যটি অ্যান্ড্রয়েড ইউজার-স্পেসের কনফিগারেশন প্যারামিটারগুলোকে কার্নেলের প্যারামিটারগুলো থেকে আলাদা করার একটি উপায় প্রদান করে। দীর্ঘ androidboot.* কার্নেল প্যারামিটারগুলোকে bootconfig ফাইলে স্থানান্তর করলে কার্নেল cmdline-এ জায়গা তৈরি হয় এবং তা ভবিষ্যতের সম্প্রসারণের জন্য উপলব্ধ থাকে।

কার্নেল এবং অ্যান্ড্রয়েড ইউজার-স্পেস উভয়কেই bootconfig সমর্থন করতে হবে।

  • প্রথম সংস্করণ যেখানে এই সমর্থনটি রয়েছে: অ্যান্ড্রয়েড ১২
  • প্রথম কার্নেল সংস্করণ যাতে এই সমর্থনটি রয়েছে: 12-5.4.xx কার্নেল

12-5.10.xx কার্নেল সংস্করণ দিয়ে চালু হওয়া নতুন ডিভাইসগুলির জন্য bootconfig বৈশিষ্ট্যটি প্রয়োগ করুন। আপনি যদি ডিভাইস আপগ্রেড করেন তবে এটি প্রয়োগ করার প্রয়োজন নেই।

উদাহরণ এবং উৎস

এই বিভাগে উদাহরণ এবং সোর্স কোড দেখার সময়, লক্ষ্য করুন যে bootconfig কোডের ফরম্যাটটি Android 11 এবং তার নিচের সংস্করণগুলিতে ব্যবহৃত কার্নেল cmdline-এর ফরম্যাট থেকে সামান্য ভিন্ন। তবে, আপনার ব্যবহারের জন্য নিম্নলিখিত পার্থক্যটি গুরুত্বপূর্ণ:

  • প্যারামিটারগুলোকে স্পেস দিয়ে নয়, বরং নিউলাইন এস্কেপ সিকোয়েন্স \n দিয়ে আলাদা করতে হবে।

বুটলোডার উদাহরণ

বুটলোডার উদাহরণের জন্য, কাটলফিশ ইউ-বুট রেফারেন্সের বুটলোডার ইমপ্লিমেন্টেশনটি দেখুন। রেফারেন্সের দুটি কমিট নিচে তালিকাভুক্ত করা হলো। প্রথমটি বুট হেডার ভার্সন সাপোর্টকে সর্বশেষ ভার্সনে আপরেভ করে। উদাহরণে, প্রথম কমিটটি ভার্সন সাপোর্টকে পরবর্তী ভার্সন, v4-এ আপডেট (বা আপরেভ) করে। দ্বিতীয়টি দুটি কাজ করে; এটি বুটকনফিগ হ্যান্ডলিং যোগ করে এবং রানটাইমে প্যারামিটার যোগ করার পদ্ধতি প্রদর্শন করে:

উদাহরণ তৈরি করুন

ভেন্ডর বুট হেডার v4 সহ vendor_boot.img বিল্ড করার জন্য mkbootimg পরিবর্তনগুলো দেখানো একটি বিল্ড উদাহরণের জন্য, mkbootimg changes for bootconfig দেখুন। নিম্নলিখিত কাজগুলো করার জন্য Cuttlefish-এর পরিবর্তনগুলো দেখুন:

বাস্তবায়ন

পার্টনারদের অবশ্যই তাদের বুটলোডারগুলিতে সাপোর্ট যোগ করতে হবে এবং তাদের বিল্ড-টাইম androidboot.* প্যারামিটারগুলো কার্নেল cmdline থেকে bootconfig ফাইলে স্থানান্তর করতে হবে। এই পরিবর্তনটি বাস্তবায়নের সর্বোত্তম উপায় হলো পর্যায়ক্রমে তা করা; পর্যায়ক্রমিক প্রক্রিয়া অনুসরণের তথ্যের জন্য " পর্যায়ক্রমিক বাস্তবায়ন এবং যাচাইকরণ" বিভাগটি দেখুন।

আপনার কোডে যদি এমন কোনো পরিবর্তন থাকে যা androidboot.* প্যারামিটারগুলো খোঁজার জন্য /proc/cmdline ফাইলটি ব্যবহার করে, তবে সেগুলোকে পরিবর্তে /proc/bootconfig ফাইলটির দিকে নির্দেশ করুন। ro.boot.* প্রোপার্টিগুলো নতুন bootconfig ভ্যালু দিয়ে সেট করা থাকে, তাই যেসব কোডে এই প্রোপার্টিগুলো ব্যবহৃত হয়, সেগুলোতে কোনো পরিবর্তন করার প্রয়োজন নেই।

বিল্ড পরিবর্তন

প্রথমে, আপনার বুট হেডার সংস্করণটি সংস্করণ ৪-এ উন্নীত করুন:

- BOARD_BOOT_HEADER_VERSION := 3

+ BOARD_BOOT_HEADER_VERSION := 4

bootconfig কার্নেল কমান্ডলাইন প্যারামিটারটি যোগ করুন। এর ফলে কার্নেল `bootconfig` সেকশনটি খুঁজে বের করে:

BOARD_KERNEL_CMDLINE += bootconfig

BOARD_BOOTCONFIG ভেরিয়েবলের প্যারামিটারগুলো থেকে bootconfig প্যারামিটারগুলো তৈরি করা হয়, ঠিক যেমন BOARD\_KERNEL\_CMDLINE থেকে কার্নেল cmdline তৈরি করা হয়।

যেকোনো androidboot.* প্যারামিটার নিম্নলিখিতের অনুরূপভাবে সরাসরি সরানো যেতে পারে:

- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing

+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing

বুটলোডার পরিবর্তন

বুটলোডার কার্নেলে যাওয়ার আগে initramfs প্রস্তুত করে। কার্নেল বুট কনফিগারেশন 'bootconfig' সেকশনটি খোঁজে এবং প্রত্যাশিত ট্রেইলারসহ এটিকে initramfs, এর একেবারে শেষে খুঁজে থাকে।

বুটলোডারটি ভেন্ডর বুট ইমেজ হেডার থেকে vendor_boot.img লেআউট সংক্রান্ত তথ্য সংগ্রহ করে।

বুটকনফিগ মেমরি বরাদ্দ বিন্যাসের ডায়াগ্রাম

চিত্র ১. অ্যান্ড্রয়েড ১২ বুটকনফিগ মেমরি বরাদ্দ।

বুটলোডার মেমরিতে বুটকনফিগ সেকশন তৈরি করে। বুটকনফিগ সেকশনে নিম্নলিখিত বিষয়গুলোর জন্য মেমরি বরাদ্দ থাকে:

  • প্যারামিটার
  • ৪ বি আকারের parameters size
  • ৪ বি আকারের parameters checksum
  • ১২ বি বুটকনফিগ ম্যাজিক স্ট্রিং ( #BOOTCONFIG\n )

প্যারামিটারগুলো দুটি উৎস থেকে আসে: বিল্ড করার সময় জানা প্যারামিটার এবং বিল্ড করার সময় অজানা প্যারামিটার। অজানা প্যারামিটারগুলো অবশ্যই যোগ করতে হবে।

বিল্ড করার সময় জানা প্যারামিটারগুলো vendor_boot ইমেজের শেষে bootconfig সেকশনে প্যাকেজ করা হয়। সেকশনটির আকার (বাইট হিসেবে) vendor_bootconfig_size নামক ভেন্ডর বুট হেডার ফিল্ডে সংরক্ষিত থাকে।

যে প্যারামিটারগুলো বিল্ড টাইমে জানা থাকে না, সেগুলো শুধুমাত্র রানটাইমে বুটলোডারে জানা যায়। বুটকনফিগ ট্রেইলার প্রয়োগ করার আগে, এগুলো অবশ্যই বুটকনফিগ প্যারামিটার সেকশনের শেষে যোগ করতে হবে।

bootconfig ট্রেইলারটি প্রয়োগ করার পরে যদি কোনো প্যারামিটার যোগ করার প্রয়োজন হয়, তাহলে ট্রেইলারটি ওভাররাইট করে পুনরায় প্রয়োগ করুন।

ক্রমবর্ধমান বাস্তবায়ন এবং বৈধতা

এই বিভাগে দেওয়া প্রক্রিয়া অনুসরণ করে পর্যায়ক্রমে বুটকনফিগ বৈশিষ্ট্যটি প্রয়োগ করুন। বুটকনফিগ প্যারামিটারগুলি যোগ করার সময় কার্নেল কমান্ডলাইন প্যারামিটারগুলি অপরিবর্তিত রাখুন।

যাচাইকরণ সহ পর্যায়ক্রমিক বাস্তবায়নের ধাপগুলো হলো:

  1. বুটলোডার এবং বিল্ডে পরিবর্তনগুলো করুন , তারপর নিম্নলিখিত কাজগুলো করুন:
    1. নতুন বুটকনফিগ প্যারামিটার যোগ করতে BOARD_BOOTCONFIG ভেরিয়েবলটি ব্যবহার করুন।
    2. কার্নেল কমান্ডলাইন প্যারামিটারগুলো অপরিবর্তিত রাখুন, যাতে ডিভাইসটি সঠিকভাবে বুট হতে পারে। এতে ডিবাগিং এবং যাচাইকরণ অনেক সহজ হয়ে যায়।
  2. /proc/bootconfig এর বিষয়বস্তু পরীক্ষা করে আপনার কাজটি যাচাই করুন । ডিভাইসটি বুট হওয়ার পর নতুন যোগ করা প্যারামিটারটি দেখতে পাচ্ছেন কিনা তা যাচাই করুন।
  3. BOARD_BOOTCONFIG ভেরিয়েবল এবং বুটলোডার ব্যবহার করে androidboot.* প্যারামিটারগুলোকে কার্নেল cmdline থেকে bootconfig-এ স্থানান্তর করুন
  4. যাচাই করুন যে প্রতিটি প্যারামিটার /proc/bootconfig এ আছে এবং সেগুলো /proc/cmdlineনেই । যদি আপনি এটি যাচাই করতে পারেন, তাহলে আপনার বাস্তবায়ন সফল হয়েছে।

OTA আপগ্রেডিং এবং ডাউনগ্রেডিং বিবেচনা

অ্যান্ড্রয়েডের বিভিন্ন সংস্করণ বা কার্নেলের বিভিন্ন সংস্করণের মধ্যে OTA আপগ্রেড এবং ডাউনগ্রেড পরিচালনা করার সময় বিশেষ সতর্কতা অবলম্বন করা উচিত।

অ্যান্ড্রয়েড ১২ হলো বুটকনফিগ সাপোর্টসহ প্রথম সংস্করণ। এর আগের কোনো সংস্করণে ডাউনগ্রেড করতে হলে, বুটকনফিগের পরিবর্তে কার্নেল কমান্ডলাইন প্যারামিটার ব্যবহার করতে হবে।

কার্নেল সংস্করণ ১২-৫.৪ এবং এর পরবর্তী সংস্করণগুলো বুটকনফিগ সমর্থন করে। এর পূর্ববর্তী কোনো সংস্করণে (১১-৫.৪ সহ) ডাউনগ্রেড করতে হলে, কার্নেল কমান্ডলাইন প্যারামিটার ব্যবহার করতে হবে।

অ্যান্ড্রয়েড ১১ ও তার পূর্ববর্তী সংস্করণ থেকে অ্যান্ড্রয়েড ১২ ও তার পরবর্তী সংস্করণে আপগ্রেড করার সময়ও কার্নেল কমান্ডলাইন প্যারামিটার ব্যবহার করা যাবে। কার্নেল সংস্করণ আপগ্রেড করার ক্ষেত্রেও একই নিয়ম প্রযোজ্য।

সমস্যা সমাধান

আপনি যখন যাচাই ধাপটি সম্পন্ন করবেন, তখন যদি /proc/bootconfig এ প্রত্যাশিত প্যারামিটারগুলো দেখতে না পান, তাহলে logcat এ কার্নেল লগগুলো পরীক্ষা করুন। কার্নেল সমর্থন করলে, bootconfig-এর জন্য সর্বদা একটি লগ এন্ট্রি উপস্থিত থাকে।

উদাহরণ লগ আউটপুট

$ adb logcat | grep bootconfig
02-24 17:00:07.610     0     0 I Load bootconfig: 128 bytes 9 nodes

যদি কোনো এরর লগ দেখতে পান, তাহলে বুটকনফিগ লোড করতে সমস্যা হয়েছে। বিভিন্ন ধরনের এরর দেখতে init/main.c ফাইলটি দেখুন।