A/B নয় এমন ডিভাইসে, রিকভারি ইমেজে ডিভাইস ট্রি ব্লব (DTB) বা অ্যাডভান্সড কনফিগারেশন ও পাওয়ার ইন্টারফেস (ACPI) ওভারলে ইমেজ থেকে তথ্য থাকতে হবে। এই ধরনের ডিভাইস রিকভারি মোডে বুট করার সময়, বুটলোডার ওভারলে ইমেজ লোড করতে পারে যা রিকভারি ইমেজের সাথে মানানসই। যেসব ডিভাইস A/B (সিমলেস) আপডেট সাপোর্ট করে, সেগুলিতে আলাদা রিকভারি পার্টিশনের পরিবর্তে বুট হিসেবে রিকভারি ব্যবহার করা উচিত (বিস্তারিত জানতে, A/B আপডেট প্রয়োগ করা দেখুন)।
বুট/রিকভারি ইমেজের অংশ হিসেবে রিকভারি DTBO/ACPIO অন্তর্ভুক্ত করার বিকল্পগুলি Android রিলিজের মধ্যে আলাদা আলাদা হয়।
| রিলিজ | স্কিম আপডেট করা | GKI মেনে চলা | বুট হেডার ভার্সন (ডিভাইস লঞ্চ করা হচ্ছে) | বুট হেডার ভার্সন (ডিভাইস আপগ্রেড করা) | ডেডিকেটেড রিকভারি ইমেজ প্রয়োজন |
|---|---|---|---|---|---|
| 11 | A/B, ভার্চুয়াল A/B |
হ্যাঁ | ৩* | N/A | না |
| A/B, ভার্চুয়াল A/B |
না | ২, ৩ | ০, ১, ২, ৩ | না | |
| নন-A/B | হ্যাঁ | 3 | N/A | হ্যাঁ | |
| নন-A/B | না | ২, ৩ | ০, ১, ২, ৩ | হ্যাঁ | |
| ১০ (Q) | A/B | N/A | 2 | ০, ১, ২ | না |
| নন-A/B | N/A | 2 | ০, ১, ২ | হ্যাঁ | |
| ৯ (P) | A/B | N/A | 1 | ০, ১ | না |
| নন-A/B | N/A | 1 | ০, ১ | হ্যাঁ | |
| 8 (O) | A/B | N/A | প্রযোজ্য নয় (০ হিসেবে বিবেচনা করা হয়) | প্রযোজ্য নয় (০ হিসেবে বিবেচনা করা হয়) | না |
| নন-A/B | N/A | প্রযোজ্য নয় (০ হিসেবে বিবেচনা করা হয়) | প্রযোজ্য নয় (০ হিসেবে ধরা হয়েছে) | হ্যাঁ |
* Android 11 বা এর পরের যেকোনও ভার্সনে চলে এমন A/B ডিভাইস এবং জেনেরিক কার্নেল ইমেজ (GKI) ব্যবহার করে এমন ডিভাইসকে ভেন্ডর বুট পার্টিশনের সাথে মানানসই হতে অবশ্যই প্রাথমিক বুট হেডার ভার্সন 3 ব্যবহার করতে হবে।
গুরুত্বপূর্ণ বিষয়:
A/B ডিভাইসে রিকভারি ইমেজ নির্দিষ্ট করার প্রয়োজন নেই, কারণ A/B আপডেট দুটি সেট পার্টিশন (
bootওdtboসহ) ব্যবহার করে এবং আপডেট করার সময় সেগুলির মধ্যে পরিবর্তন করে, এর ফলে রিকভারি ইমেজের প্রয়োজন হয় না। A/B ডিভাইস এখনও একটি ডেডিকেটেড রিকভারি ইমেজ ব্যবহার করতে পারে।Android 11 বা তার পরবর্তী ভার্সন সহ লঞ্চ হওয়া নন-A/B ডিভাইস এবং বুট হেডার ভার্সন 3 ব্যবহার করা ডিভাইসকে অবশ্যই রিকভারি ইমেজের জন্য আলাদাভাবে বুট হেডার ভার্সন 2 উল্লেখ করতে হবে। যেমন:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2যেসব আর্কিটেকচারে ডিভাইস ট্রি কাজ করে না, সেগুলির ক্ষেত্রে রিকভারি ইমেজে DTBO ইমেজের পরিবর্তে ACPIO ইমেজ থাকতে পারে।
OTA সংক্রান্ত সমস্যা ও রিকভারি ইমেজ সম্পর্কে
A/B নয় এমন ডিভাইসে ওভার-দ্য-এয়ার (OTA) আপডেট ব্যর্থ হওয়া আটকাতে, রিকভারি ইমেজকে স্বনির্ভর ও অন্যান্য ইমেজ থেকে আলাদা হতে হবে। OTA আপডেট চলাকালীন, ওভারলে ছবি আপডেট করার পরে (কিন্তু সম্পূর্ণ আপডেট শেষ হওয়ার আগে) কোনও সমস্যা হলে, OTA আপডেট সম্পূর্ণ করতে ডিভাইস রিকভারি মোডে বুট করার চেষ্টা করে। তবে, ওভারলে পার্টিশন আগেই আপডেট করা হয়ে যাওয়ার কারণে, রিকভারি ইমেজের সাথে কোনও মিল নাও থাকতে পারে (যেটি এখনও আপডেট করা হয়নি)।
আপডেট করার সময় DTBO/ACPIO পার্টিশনের উপর নির্ভর করে রিকভারি আটকানোর জন্য, Android 9 বা তার পরবর্তী যেকোনও ভার্সনে রান করা নন-A/B ডিভাইস ওভারলে ইমেজ থেকে তথ্য সহ রিকভারি DTBO/ACPIO ইমেজকে বুট ইমেজ ফর্ম্যাটে (বুট হেডার ভার্সন ১ বা ২ ব্যবহার করতে হবে) আলাদা বিভাগ হিসেবে নির্দিষ্ট করতে পারে।
বুট ইমেজ পরিবর্তন
Android 9 বা তার পরের যেকোনও ভার্সনে চলে এমন নন-A/B ডিভাইসে রিকভারি DTBO বা ACPIO থাকতে দেওয়ার জন্য, নিম্নলিখিত উপায়ে বুট ইমেজ স্ট্রাকচার আপডেট করুন।
| বুট ইমেজ বিভাগ | পৃষ্ঠার সংখ্যা |
|---|---|
| বুট হেডার (১ পৃষ্ঠা) | 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 বা ACPIO ফিরিয়ে আনা (o পৃষ্ঠা) | o = (recovery_[dtbo|acpio]_size + page_size -
1) / page_size |
mkbootimgবুট ইমেজ
হেডার ভার্সন ও ওভারলে ইমেজ পাথ নির্দিষ্ট করার জন্য টুল আর্গুমেন্ট সম্পর্কে বিস্তারিত জানতে, বুট ইমেজ হেডার
ভার্সনিং দেখুন।
DTBO প্রয়োগ করা
9 বা তার পরবর্তী ভার্সনে রান করা নন-A/B ডিভাইস রিকভারি ইমেজের
recovery_dtbo বিভাগ পূরণ করতে পারে। ডিভাইসে BoardConfig.mk, recovery.img-এ recovery_dtbo
ছবি যোগ করতে:
BOARD_INCLUDE_RECOVERY_DTBOকনফিগারেশনকেtrueহিসেবে সেট করুন:BOARD_INCLUDE_RECOVERY_DTBO := trueবুট ইমেজ হেডার ভার্সন নির্দিষ্ট করতে
BOARD_MKBOOTIMG_ARGSভেরিয়েবল এক্সটেন্ড করুন:BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)নিশ্চিত করুন যে
BOARD_PREBUILT_DTBOIMAGEভেরিয়েবলটি DTBO ইমেজের পাথে সেট করা আছে। রিকভারি ইমেজ তৈরি করার সময় Android বিল্ড সিস্টেম ভেরিয়েবল ব্যবহার করেmkbootimgটুলেরrecovery_dtboআর্গুমেন্ট সেট করে।
BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS এবং
BOARD_PREBUILT_DTBOIMAGE ভেরিয়েবল সঠিকভাবে সেট করা থাকলে, Android বিল্ড সিস্টেম
recovery.img-এ BOARD_PREBUILT_DTBOIMAGE ভেরিয়েবল দ্বারা নির্দিষ্ট করা DTBO
অন্তর্ভুক্ত করে।
ACPIO প্রয়োগ করা
Android 9 বা তার পরবর্তী ভার্সনে চলা নন-A/B ডিভাইস
ACPIO ওভারলে ইমেজ (DTBO ইমেজের পরিবর্তে) ব্যবহার করতে পারে এবং
রিকভারি ইমেজের recovery_acpio বিভাগ (recovery_dtbo বিভাগের পরিবর্তে)
পপুলেট করতে পারে। recovery.img-এ recovery_acpio ছবি অন্তর্ভুক্ত করতে, ডিভাইস BoardConfig.mk-এ:
BOARD_INCLUDE_RECOVERY_ACPIOকনফিগারেশনকেtrueহিসেবে সেট করুন:BOARD_INCLUDE_RECOVERY_ACPIO := trueবুট ইমেজ হেডার ভার্সন নির্দিষ্ট করতে
BOARD_MKBOOTIMG_ARGSভেরিয়েবল বাড়ান। রিকভারি ACPIO-কে সাপোর্ট করার জন্য ভেরিয়েবলটি ১ বা তার বেশি হতে হবে।BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)BOARD_RECOVERY_ACPIOভেরিয়েবলটি যেন ACPIO ইমেজের পাথ হিসেবে সেট করা থাকে তা নিশ্চিত করুন। Android বিল্ড সিস্টেম, রিকভারি ইমেজ তৈরি করার সময়recovery_acpioটুলের আর্গুমেন্ট সেট করতে ভেরিয়েবল ব্যবহার করে।mkbootimg
BOARD_INCLUDE_RECOVERY_ACPIO, BOARD_MKBOOTIMG_ARGS এবং
BOARD_RECOVERY_ACPIO ভেরিয়েবল সঠিকভাবে সেট করা থাকলে, Android বিল্ড সিস্টেম
recovery.img-এ BOARD_RECOVERY_ACPIO ভেরিয়েবল দ্বারা নির্দিষ্ট করা ACPIO
অন্তর্ভুক্ত করে।