Android ইমপ্লিমেন্টেশনে বুটলোডারের ব্যবহারের জন্য ডিভাইস ট্রি ব্লব (DTB) ইমেজ অন্তর্ভুক্ত থাকতে পারে। DTB ছবির লোকেশন (এবং DTB ছবির প্যারামিটার নির্দিষ্ট করার বিকল্প) Android রিলিজের মধ্যে আলাদা হয়।
Android 11-এ, জেনেরিক কার্নেল ইমেজ (GKI) ব্যবহার করা ডিভাইসকে অবশ্যই ভেন্ডর বুট পার্টিশন-এ কাজ করতে হবে, যার মধ্যে বুট পার্টিশন থেকে রিলোকেট করা সমস্ত ভেন্ডর-নির্দিষ্ট তথ্য অন্তর্ভুক্ত থাকে। DTB ইমেজে ভেন্ডর-নির্দিষ্ট ডেটা থাকে, তাই এটি এখন ভেন্ডর বুট পার্টিশনের অংশ। DTB ইমেজ প্যারামিটার নির্দিষ্ট করতে, ভেন্ডর বুট হেডার দেখুন।
Android 10-এ, ডিভাইস বুট পার্টিশনে DTB ইমেজ অন্তর্ভুক্ত করতে পারে। DTB ছবির প্যারামিটার নির্দিষ্ট করতে, বুটের ছবিতে DTB ছবি অন্তর্ভুক্ত করা দেখুন।
Android 9 ও তার আগের ভার্সনে, DTB ছবি এর নিজস্ব পার্টিশনে থাকতে পারে অথবা কার্নেলের সাথে যুক্ত করে
image.gzকার্নেল + DTB ছবি তৈরি করা হতে পারে (যা পরেmkbootimg-এ পাস করেboot.imgতৈরি করা হয়)।
DTB ছবির ফর্ম্যাট
Android 10 এবং তার পরবর্তী ভার্সনে, DTB ছবিতে অবশ্যই নিম্নলিখিত ফর্ম্যাটগুলির মধ্যে একটি ব্যবহার করতে হবে:
DT ব্লব একটির পরে একটি কনক্যাটেনেট করা হয়। বুটলোডার প্রতিটি FDT হেডারের
totalsizeফিল্ড ব্যবহার করে সংশ্লিষ্ট ব্লব পড়ে ও পার্স করে।DTB/DTBO পার্টিশন। এন্ট্রি শনাক্তকারী তথ্যের জন্য বুটলোডার
dt_table_entrystruct (id,revএবংcustomফিল্ড থাকে) পরীক্ষা করে সঠিক DT ব্লোব বেছে নেওয়ার একটি কার্যকর উপায় আছে। আরও বিবরণের জন্য, DTB/DTBO পার্টিশন দেখুন।
বুট ইমেজে DTB ইমেজ অন্তর্ভুক্ত করুন
Android 10 ভার্সনে চলা ডিভাইসে বুট ইমেজে DTB ইমেজ
অন্তর্ভুক্ত থাকতে পারে। এর ফলে, Android-এর এমন স্ক্রিপ্ট আর প্রয়োজন হয় না যা কার্নেলে image.gz-এর সাথে DTB ইমেজ যোগ করে এবং DTB
প্লেসমেন্ট যাচাই (ও স্ট্যান্ডার্ডাইজ) করার জন্য Vendor Test
Suite (VTS) টেস্ট ব্যবহার করা যায়।
এছাড়াও, নন-A/B ডিভাইসের ক্ষেত্রে, DTB-কে আলাদা পার্টিশনে রাখার পরিবর্তে রিকভারি ইমেজের অংশ হিসেবে রাখলে, ইন্টারাপ্টেড OTA-র কারণে হওয়া সমস্যাগুলি এড়ানো যায়। OTA চলাকালীন, DTB পার্টিশন আপডেট করার পরে (কিন্তু সম্পূর্ণ আপডেট শেষ হওয়ার আগে) কোনও সমস্যা হলে, OTA সম্পূর্ণ করার জন্য ডিভাইস রিকভারি মোডে বুট করার চেষ্টা করে; তবে, DTB পার্টিশন আগে থেকেই আপডেট করা থাকার কারণে, রিকভারি ইমেজের (যা এখনও আপডেট করা হয়নি) সাথে অমিল হতে পারে। বুট ইমেজ ফর্ম্যাটের অংশ হিসেবে DTB ইমেজ থাকলে রিকভারি ইমেজকে স্বয়ংসম্পূর্ণ করে (অর্থাৎ, এটি অন্য কোনও পার্টিশনের উপর নির্ভর করে না) এই ধরনের সমস্যা প্রতিরোধ করা যায়।
বুট ইমেজ স্ট্রাকচার
Android 10 চালিত ডিভাইসে নিম্নলিখিত বুট ইমেজ স্ট্রাকচার ব্যবহার করে DTB ইমেজ অন্তর্ভুক্ত করা যেতে পারে।
| বুট ইমেজ বিভাগ | পৃষ্ঠার সংখ্যা |
|---|---|
| বুট হেডার (১টি পৃষ্ঠা) | 1 |
| কার্নেল (l পৃষ্ঠা) | l = (kernel_size + page_size -
1) / page_size |
| Ramdisk (m pages) | m = (ramdisk_size + page_size -
1) / page_size |
| সেকেন্ড স্টেজ বুটলোডার (n পৃষ্ঠা) | n = (second_size + page_size -
1) / page_size |
| রিকভারি DTBO (o পৃষ্ঠা) | o = (recovery_dtbo_size + page_size -
1) / page_size |
| DTB (পৃষ্ঠা) | p = (dtb_size + page_size -
1) / page_size |
DTB ইমেজ পাথ
Android 10-এ চলা ডিভাইসের জন্য, আপনি
mkbootimg.py টুল এবং নিম্নলিখিত আর্গুমেন্ট ব্যবহার করে DTB ইমেজের পাথ নির্দিষ্ট করতে পারেন।
| আর্গুমেন্ট | বর্ণনা |
|---|---|
dtb |
বুট/রিকভারি ইমেজে অন্তর্ভুক্ত করার জন্য DTB ইমেজের পাথ। |
dtb_offset |
base আর্গুমেন্টে যোগ করা হলে, চূড়ান্ত ডিভাইস ট্রি-এর জন্য ফিজিক্যাল লোড
অ্যাড্রেস প্রদান করে। যেমন, base
আর্গুমেন্ট 0x10000000 হলে এবং dtb_offset আর্গুমেন্ট
0x01000000 হলে, বুট ইমেজ
হেডারে dtb_addr_field হিসেবে 0x11000000 পপুলেট করা হয়। |
DTB ইমেজের পাথ নির্দিষ্ট করতে
বোর্ড কনফিগার ভেরিয়েবল BOARD_PREBUILT_DTBIMAGE_DIR ব্যবহার করতে হবে। *.dtb এক্সটেনশন সহ একাধিক ফাইল BOARD_PREBUILT_DTBIMAGE_DIR ডিরেক্টরিতে
থাকলে, Android বিল্ড সিস্টেম
ফাইলগুলিকে একত্রিত করে বুট ইমেজ
তৈরি করার জন্য ব্যবহৃত চূড়ান্ত DTB ইমেজ তৈরি করে।
BOARD_PREBUILT_DTBIMAGE_DIR দ্বারা নির্দিষ্ট করা ডিরেক্টরি থেকে DTB ইমেজ সহ mkbootimg.py-এ dtb আর্গুমেন্ট পাস করতে, বোর্ড কনফিগারেশন ভেরিয়েবল
BOARD_INCLUDE_DTB_IN_BOOTIMG অবশ্যই true-এ সেট করতে হবে। যেমন:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
আপনি dtb_offset আর্গুমেন্টটি BOARD_MKBOOTIMG_ARGS বোর্ড কনফিগারেশন ভেরিয়েবলে অন্যান্য অফসেট এবং হেডার ভার্সনের সাথে যোগ করতে পারেন। যেমন:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
বুটলোডার সংক্রান্ত সহায়তা
Android
10 ভার্সনে চলা ডিভাইসে VTS সঠিকভাবে চালানোর জন্য, বুটলোডারকে অবশ্যই আপডেট করা বুট ইমেজ
সাপোর্ট করতে হবে এবং বেছে নেওয়া ডিভাইস ট্রি (DT)-এর ইন্ডেক্স
বোঝাতে androidboot.dtb_idx কার্নেল কমান্ড লাইন প্যারামিটার যোগ করতে হবে। আপনি শুধুমাত্র একটি (১)
ইনডেক্স নির্দিষ্ট করতে পারবেন। যেমন, androidboot.dtb_idx=N প্যারামিটার N-কে বুট ইমেজে উপস্থিত DTB-এর সেট থেকে বুটলোডারের মাধ্যমে বেছে নেওয়া ডিভাইস ট্রির জিরো-বেসড ইন্ডেক্স হিসেবে রিপোর্ট করে।