ওভার-দ্য-এয়ার (OTA) আপডেট প্রয়োগ করতে, বুট করার সময় বুটলোডারকে অবশ্যই রিকভারি RAM ডিস্ক অ্যাক্সেস করতে হবে। ডিভাইসটি
পরিবর্তিত নয় এমন AOSP রিকভারি ইমেজ ব্যবহার করলে, বুটলোডার misc পার্টিশনের প্রথম ৩২ বাইট
পড়ে; সেখানে থাকা ডেটা boot-recovery-এর সাথে ম্যাচ করলে, বুটলোডার
recovery ইমেজে বুট করে। এই পদ্ধতিটি সম্পূর্ণ না হওয়া পর্যন্ত যেকোনও বাকি থাকা
রিকভারি কাজ (যেমন, OTA প্রয়োগ করা বা ডেটা সরানো) চালিয়ে যেতে
দেয়।
রিকভারি ও বুটলোডার দ্বারা কমিউনিকেশনের জন্য ব্যবহৃত ফ্ল্যাশে ব্লকের কন্টেন্ট সম্পর্কে বিস্তারিত জানতে, এখানে দেখুন: bootable/recovery/bootloader_message/bootloader_message.h.
A/B আপডেট সহ ডিভাইস
A/B আপডেট ব্যবহার করে এমন ডিভাইসে OTA আপডেট কাজ করে তা নিশ্চিত করতে, ডিভাইস বুটলোডার নিম্নলিখিত মানদণ্ড পূরণ করে কিনা তা নিশ্চিত করুন।
সাধারণ মাপকাঠি
OTA-এর মাধ্যমে আপডেট করা সব পার্টিশনকে আপডেট করা যায়, যখন মূল সিস্টেম বুট করা হয় (এবং রিকভারিতে আপডেট করা হয় না)।
systemপার্টিশন বুট করার জন্য, বুটলোডার নিম্নলিখিত ভ্যালু কার্নেল কমান্ড লাইনে পাস করে:ro root=/dev/[node] rootwait init=/init.HAL থেকে
markBootSuccessfulকল করার দায়িত্ব Android ফ্রেমওয়ার্কের। বুটলোডার কখনও কোনও পার্টিশনকে সফলভাবে বুট করা হয়েছে হিসেবে চিহ্নিত করবে না।
বুট কন্ট্রোল HAL-এর জন্য সহায়তা
boot_control-এ বর্ণিত HAL-এর সাথে বুটলোডারকে কাজ করতে হবে
hardware/libhardware/include/hardware/boot_control.h। আপডেটার
বুট কন্ট্রোল
HAL-কে কোয়েরি করে,
ব্যবহার করা হচ্ছে না এমন বুট স্লট আপডেট করে,
HAL ব্যবহার করে অ্যাক্টিভ স্লট পরিবর্তন করে এবং আপডেট করা অপারেটিং সিস্টেমে রিবুট করে। বিস্তারিত জানতে, বুট কন্ট্রোল
HAL প্রয়োগ করা দেখুন।
স্লটের জন্য সহায়তা
পার্টিশন ও স্লট সম্পর্কিত ফাংশনালিটি বুটলোডারকে অবশ্যই সাপোর্ট করতে হবে, এর মধ্যে এগুলি অন্তর্ভুক্ত:
পার্টিশনের নামে অবশ্যই এমন একটি প্রত্যয় থাকতে হবে যা শনাক্ত করে যে কোন পার্টিশন বুটলোডার-এর নির্দিষ্ট স্লটের অন্তর্গত। এই ধরনের প্রতিটি পার্টিশনের জন্য, একটি সংশ্লিষ্ট ভেরিয়েবল
has-slot:partition base nameআছে যার ভ্যালু হলyes। স্লটগুলির নাম বর্ণানুক্রমিকভাবে a, b, c ইত্যাদি হিসাবে রাখা হয় যা_a,_b,_cইত্যাদি প্রত্যয় সহ পার্টিশনের সাথে সম্পর্কিত। বুটলোডারকে অপারেটিং সিস্টেমকে জানাতে হবে যে কোন স্লটটি কমান্ড লাইন প্রপার্টিandroidboot.slot_suffixব্যবহার করে বুট করা হয়েছে। Android 12 বা তার পরবর্তী যেকোনও ভার্সন দিয়ে লঞ্চ করা ডিভাইসের জন্য বুটকনফিগের মাধ্যমে এই প্রপার্টি সেট করা হয়।slot-retry-countভ্যালু একটি ধনাত্মক ভ্যালুতে (সাধারণত3) রিসেট করা হয়,setActiveBootSlotকলব্যাকের মাধ্যমে বুট কন্ট্রোল HAL দ্বারা অথবাfastboot set_activeকমান্ডের মাধ্যমে। স্লটের অংশ এমন কোনও পার্টিশন পরিবর্তন করার সময়, বুটলোডার "সফলভাবে বুট করা হয়েছে" মুছে দেয় এবং স্লটের জন্য আবার চেষ্টা করার সংখ্যা রিসেট করে।
কোন স্লট লোড করতে হবে তা বুটলোডারকে নির্ধারণ করতে হবে। ছবিতে সিদ্ধান্ত নেওয়ার একটি উদাহরণ প্রসেস দেখানো হয়েছে।
কোন স্লটে চেষ্টা করতে হবে তা নির্ধারণ করুন।
slot-unbootableহিসেবে চিহ্নিত স্লট লোড করার চেষ্টা করবেন না। এই স্লটটি fastboot-এর মাধ্যমে রিটার্ন করা ভ্যালুর সাথে সামঞ্জস্যপূর্ণ হতে হবে এবং এটিকে বর্তমান স্লট হিসেবে উল্লেখ করা হয়।বর্তমান স্লটটি
slot-successfulহিসেবে চিহ্নিত করা না থাকলে এবং এতেslot-retry-count = 0থাকলে, বর্তমান স্লটটিslot-unbootableহিসেবে চিহ্নিত করুন। তারপরে,unbootableহিসেবে চিহ্নিত করা হয়নি এবংslot-successfulহিসেবে চিহ্নিত করা হয়েছে এমন অন্য একটি স্লট বেছে নিন; এই স্লটটি এখন বেছে নেওয়া স্লট। বর্তমানে কোনও স্লট উপলভ্য না থাকলে, রিকভারি মোডে বুট করুন অথবা ব্যবহারকারীকে অর্থপূর্ণ সমস্যার মেসেজ দেখান।উপযুক্ত
boot.imgবেছে নিন এবং কার্নেল কমান্ড লাইনে সঠিক সিস্টেম পার্টিশনের পাথ অন্তর্ভুক্ত করুন।কার্নেল কমান্ড লাইন
slot_suffixপ্যারামিটার পপুলেট করুন।বুট করুন।
slot-successfulহিসেবে চিহ্নিত করা না থাকলে,slot-retry-countকমিয়ে দিন।
fastboot ইউটিলিটি নির্ধারণ করে যে কোনও ফ্ল্যাশ কমান্ড চালানোর সময় কোন পার্টিশন ফ্ল্যাশ করতে হবে। যেমন, fastboot flash system system.img
কমান্ড রান করা প্রথমে current-slot ভেরিকে কোয়েরি করে, তারপর ফলাফলকে
সিস্টেমের সাথে কনক্যাটেনেট করে, যাতে ফ্ল্যাশ করা উচিত এমন পার্টিশনের নাম জেনারেট করা যায়
(system_a, system_b, ইত্যাদি)।
fastboot set_active কমান্ড বা
boot control HAL setActiveBootSlot কমান্ড ব্যবহার করে বর্তমান স্লট সেট করার সময়, বুটলোডারকে বর্তমান স্লট
আপডেট করতে হবে, slot-unbootable ও slot-successful মুছে দিতে হবে এবং
আবার চেষ্টা করার সংখ্যা রিসেট করতে হবে (slot-unbootable মুছে দেওয়ার এটিই একমাত্র উপায়)।
A/B আপডেট নেই এমন ডিভাইস
A/B আপডেট ব্যবহার করে না এমন ডিভাইসে OTA আপডেট সাপোর্ট করতে (A/B আপডেট করা যায় না এমন ডিভাইস দেখুন), ডিভাইসের বুটলোডার নিম্নলিখিত শর্ত পূরণ করছে কিনা তা নিশ্চিত করুন।
recoveryপার্টিশনে এমন একটি ছবি থাকতে হবে যা কিছু কাজ করে এমন পার্টিশন (cache,userdata) থেকে সিস্টেম ছবি পড়তে এবংsystemপার্টিশনে সেটি লিখতে পারে।বুটলোডারকে সরাসরি রিকভারি মোডে বুট করার সুবিধা থাকতে হবে।
রেডিও ইমেজ আপডেট কাজ করলে,
recoveryপার্টিশনকেও রেডিও ফ্ল্যাশ করতে পারতে হবে। দুটি উপায়ের মধ্যে একটিতে এটি করা যেতে পারে:বুটলোডার রেডিও ফ্ল্যাশ করে। এই ক্ষেত্রে, আপডেট সম্পূর্ণ করতে রিকভারি পার্টিশন থেকে বুটলোডারে রিবুট করা উচিত।
রিকভারি ইমেজ রেডিও ফ্ল্যাশ করে। এই কার্যকারিতা বাইনারি লাইব্রেরি বা ইউটিলিটি হিসেবে প্রদান করা যেতে পারে।