নন-এ/বি ডিভাইসগুলিতে, রিকভারি ইমেজে একটি ডিভাইস ট্রি ব্লব (DTB) বা অ্যাডভান্সড কনফিগারেশন অ্যান্ড পাওয়ার ইন্টারফেস (ACPI) ওভারলে ইমেজ থেকে তথ্য থাকা উচিত। যখন এই ধরনের ডিভাইসগুলি রিকভারি মোডে বুট করে, তখন বুটলোডার রিকভারি ইমেজের সাথে সামঞ্জস্যপূর্ণ ওভারলে ইমেজটি লোড করতে পারে। যে ডিভাইসগুলি এ/বি (সিমলেস) আপডেট সমর্থন করে, সেগুলিতে একটি পৃথক রিকভারি পার্টিশনের পরিবর্তে বুট হিসেবে রিকভারি ব্যবহার করা উচিত (বিস্তারিত জানতে, ‘ইমপ্লিমেন্টিং এ/বি আপডেটস’ দেখুন)।
বুট/রিকভারি ইমেজের অংশ হিসেবে রিকভারি DTBO/ACPIO অন্তর্ভুক্ত করার বিকল্পগুলো বিভিন্ন অ্যান্ড্রয়েড রিলিজের মধ্যে ভিন্ন হয়।
| মুক্তি | স্কিম আপডেট করুন | জিকেআই সম্মতি | বুট হেডার সংস্করণ (ডিভাইস চালু করার সময়) | বুট হেডার সংস্করণ (ডিভাইস আপগ্রেড করার সময়) | ডেডিকেটেড রিকভারি ইমেজ প্রয়োজন |
|---|---|---|---|---|---|
| ১১ | এ/বি, ভার্চুয়াল এ/বি | হ্যাঁ | ৩ * | প্রযোজ্য নয় | না |
| এ/বি, ভার্চুয়াল এ/বি | না | ২, ৩ | ০, ১, ২, ৩ | না | |
| নন-এ/বি | হ্যাঁ | ৩ | প্রযোজ্য নয় | হ্যাঁ | |
| নন-এ/বি | না | ২, ৩ | ০, ১, ২, ৩ | হ্যাঁ | |
| ১০ (প্রশ্ন) | এ/বি | প্রযোজ্য নয় | ২ | ০, ১, ২ | না |
| নন-এ/বি | প্রযোজ্য নয় | ২ | ০, ১, ২ | হ্যাঁ | |
| ৯ (পি) | এ/বি | প্রযোজ্য নয় | ১ | ০, ১ | না |
| নন-এ/বি | প্রযোজ্য নয় | ১ | ০, ১ | হ্যাঁ | |
| ৮ (ও) | এ/বি | প্রযোজ্য নয় | প্রযোজ্য নয় (০ হিসাবে বিবেচিত) | প্রযোজ্য নয় (০ হিসাবে বিবেচিত) | না |
| নন-এ/বি | প্রযোজ্য নয় | প্রযোজ্য নয় (০ হিসাবে বিবেচিত) | প্রযোজ্য নয় (০ হিসাবে বিবেচিত) | হ্যাঁ |
ভেন্ডর বুট পার্টিশনের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য, অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণে চালিত এবং জেনেরিক কার্নেল ইমেজ (GKI) ব্যবহারকারী A / B ডিভাইসগুলোকে অবশ্যই প্রাইমারি বুট হেডার ভার্সন ৩ ব্যবহার করতে হবে।
মূল বিষয়গুলো:
A/B ডিভাইসগুলোর জন্য রিকভারি ইমেজ নির্দিষ্ট করার প্রয়োজন হয় না, কারণ A/B আপডেটগুলো দুই সেট পার্টিশন (
bootএবংdtboসহ) ব্যবহার করে এবং আপডেটের সময় সেগুলোর মধ্যে পরিবর্তন করে, ফলে রিকভারি ইমেজের প্রয়োজনীয়তা দূর হয়। তবে, A/B ডিভাইসগুলো চাইলে একটি ডেডিকেটেড রিকভারি ইমেজও ব্যবহার করতে পারে।যেসব নন-এ/বি ডিভাইস অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণ দিয়ে চালু হয় এবং বুট হেডার ভার্সন ৩ ব্যবহার করে, সেগুলোকে রিকভারি ইমেজের জন্য আলাদাভাবে বুট হেডার ভার্সন ২ স্পষ্টভাবে উল্লেখ করতে হবে। উদাহরণস্বরূপ:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2যেসব আর্কিটেকচার ডিভাইস ট্রি সমর্থন করে না, সেগুলোর ক্ষেত্রে রিকভারি ইমেজে DTBO ইমেজের পরিবর্তে একটি ACPIO ইমেজ অন্তর্ভুক্ত থাকতে পারে।
OTA ব্যর্থতা এবং পুনরুদ্ধার চিত্র সম্পর্কে
নন-এ/বি ডিভাইসগুলিতে ওভার-দ্য-এয়ার (OTA) ব্যর্থতা রোধ করতে, রিকভারি ইমেজটি স্বয়ংসম্পূর্ণ এবং অন্যান্য ইমেজ থেকে স্বাধীন হওয়া উচিত। একটি OTA আপডেটের সময়, যদি ওভারলে ইমেজ আপডেট হওয়ার পরে (কিন্তু সম্পূর্ণ আপডেট শেষ হওয়ার আগে) কোনো সমস্যা দেখা দেয়, তবে ডিভাইসটি OTA আপডেটটি সম্পন্ন করার জন্য রিকভারি মোডে বুট করার চেষ্টা করে। কিন্তু, যেহেতু ওভারলে পার্টিশনটি ইতিমধ্যে আপডেট হয়ে গেছে, তাই রিকভারি ইমেজের (যা এখনও আপডেট হয়নি) সাথে একটি অমিল দেখা দিতে পারে।
আপডেটের সময় রিকভারি যাতে DTBO/ACPIO পার্টিশনের উপর নির্ভর না করে, সেজন্য Android 9 বা তার উচ্চতর সংস্করণে চালিত নন-A/B ডিভাইসগুলো বুট ইমেজ ফরম্যাটে একটি পৃথক সেকশন হিসেবে ওভারলে ইমেজের তথ্য সম্বলিত একটি রিকভারি DTBO/ACPIO ইমেজ নির্দিষ্ট করতে পারে (এর জন্য অবশ্যই বুট হেডার ভার্সন ১ বা ২ ব্যবহার করতে হবে)।
বুট ইমেজ পরিবর্তন
অ্যান্ড্রয়েড ৯ বা তার উচ্চতর সংস্করণে চালিত নন-এ/বি ডিভাইসগুলিতে রিকভারি ইমেজে রিকভারি DTBO বা ACPIO অন্তর্ভুক্ত করার অনুমতি দিতে, বুট ইমেজের কাঠামোটি নিম্নরূপভাবে আপডেট করুন।
| বুট ইমেজ বিভাগ | পৃষ্ঠার সংখ্যা |
|---|---|
| বুট হেডার (১ পৃষ্ঠা) | ১ |
| কার্নেল (l পৃষ্ঠা) | l = ( kernel_size + page_size - 1) / page_size |
| র্যামডিস্ক (m পৃষ্ঠা) | 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 বাস্তবায়ন করুন
৯ বা তার উচ্চতর সংস্করণে চালিত নন-এ/বি ডিভাইসগুলো রিকভারি ইমেজের recovery_dtbo সেকশনটি পূরণ করতে পারে। recovery.img তে recovery_dtbo ইমেজটি অন্তর্ভুক্ত করতে, ডিভাইসের BoardConfig.mk ফাইলে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:
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 ইমেজের পাথে সেট করা আছে। অ্যান্ড্রয়েড বিল্ড সিস্টেম রিকভারি ইমেজ তৈরির সময়mkbootimgটুলেরrecovery_dtboআর্গুমেন্ট সেট করার জন্য এই ভেরিয়েবলটি ব্যবহার করে।
যদি BOARD_INCLUDE_RECOVERY_DTBO , BOARD_MKBOOTIMG_ARGS , এবং BOARD_PREBUILT_DTBOIMAGE ভেরিয়েবলগুলো সঠিকভাবে সেট করা থাকে, তাহলে অ্যান্ড্রয়েড বিল্ড সিস্টেম recovery.img ফাইলে BOARD_PREBUILT_DTBOIMAGE ভেরিয়েবল দ্বারা নির্দিষ্ট DTBO-টিকে অন্তর্ভুক্ত করে।
ACPIO বাস্তবায়ন করুন
অ্যান্ড্রয়েড ৯ বা তার উচ্চতর সংস্করণে চালিত নন-এ/বি ডিভাইসগুলো একটি ACPIO ওভারলে ইমেজ (DTBO ইমেজের পরিবর্তে) ব্যবহার করতে পারে এবং রিকভারি ইমেজের recovery_dtbo সেকশনের পরিবর্তে recovery_acpio সেকশনটি পূরণ করতে পারে। 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 ইমেজের পাথে সেট করা আছে। অ্যান্ড্রয়েড বিল্ড সিস্টেম রিকভারি ইমেজ তৈরির সময়mkbootimgটুলেরrecovery_acpioআর্গুমেন্ট সেট করার জন্য এই ভেরিয়েবলটি ব্যবহার করে।
যদি BOARD_INCLUDE_RECOVERY_ACPIO , BOARD_MKBOOTIMG_ARGS , এবং BOARD_RECOVERY_ACPIO ভ্যারিয়েবলগুলো সঠিকভাবে সেট করা থাকে, তাহলে অ্যান্ড্রয়েড বিল্ড সিস্টেম recovery.img ফাইলে BOARD_RECOVERY_ACPIO ভ্যারিয়েবল দ্বারা নির্দিষ্ট ACPIO অন্তর্ভুক্ত করে।