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

অ্যান্ড্রয়েড 12-এ, বুটকনফিগ বৈশিষ্ট্যটি androidboot.* বুট কনফিগারেশন বৈশিষ্ট্যটি বিল্ড এবং বুটলোডার থেকে অ্যান্ড্রয়েড 12-এ কনফিগারেশনের বিবরণ পাস করার একটি প্রক্রিয়া।

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

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

  • প্রথম রিলিজে এই সমর্থন আছে: Android 12
  • প্রথম কার্নেল সংস্করণে এই সমর্থন রয়েছে: 12-5.4.xx কার্নেল

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

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

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

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

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

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

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

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

বাস্তবায়ন

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

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

পরিবর্তনগুলি তৈরি করুন

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

- BOARD_BOOT_HEADER_VERSION := 3

+ BOARD_BOOT_HEADER_VERSION := 4

bootconfig কার্নেল cmdline প্যারামিটার যোগ করুন। এটি কার্নেলটিকে বুট কনফিগ বিভাগের সন্ধান করে:

BOARD_KERNEL_CMDLINE += bootconfig

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

যেকোন androidboot.* পরামিতিগুলিকে যেমন আছে-সেভাবে সরানো যেতে পারে, নিচের মতো:

- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing

+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing

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

বুটলোডার কার্নেলে যাওয়ার আগে initramfs সেট আপ করে। কার্নেল বুট কনফিগারেশন bootconfig বিভাগটি অনুসন্ধান করে এবং প্রত্যাশিত ট্রেলার সহ initramfs, এর একেবারে শেষের দিকে তা সন্ধান করে।

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

বুটকনফিগ মেমরি বরাদ্দ লেআউটের চিত্র

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

বুটলোডার মেমরিতে bootconfig বিভাগ তৈরি করে। bootconfig বিভাগে নিম্নলিখিত জন্য মেমরি বরাদ্দ রয়েছে:

  • পরামিতি
  • 4 বি আকার parameters size
  • 4 বি সাইজ parameters checksum
  • 12 B বুটকনফিগ ম্যাজিক স্ট্রিং ( #BOOTCONFIG\n )

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

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

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

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

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

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

এইগুলি বৈধকরণ সহ একটি ক্রমবর্ধমান বাস্তবায়নের পদক্ষেপ:

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

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

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

Android 12 বুট কনফিগ সমর্থন সহ প্রথম সংস্করণ। এর আগে কোনো সংস্করণে ডাউনগ্রেড করা হলে, bootconfig-এর পরিবর্তে কার্নেল cmdline প্যারামিটার ব্যবহার করতে হবে।

কার্নেল সংস্করণ 12-5.4 এবং পরবর্তীতে বুট কনফিগ সমর্থন করে। যদি এর আগে যেকোনো সংস্করণে ডাউনগ্রেড করা হয় (11-5.4 সহ), কার্নেল cmdline পরামিতি ব্যবহার করতে হবে।

অ্যান্ড্রয়েড 11 এবং তার থেকে কম থেকে অ্যান্ড্রয়েড 12 এবং উচ্চতর কারনেল cmdline প্যারামিটার ব্যবহার করা চালিয়ে যেতে পারে। কার্নেল সংস্করণ আপগ্রেড করার জন্য একই যায়।

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

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

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

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

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