OTA আপডেট বাস্তবায়ন করুন

ওভার-দ্য-এয়ার (OTA) আপডেটগুলি কার্যকর করার জন্য, বুট করার সময় বুটলোডারকে অবশ্যই একটি রিকভারি র‍্যাম ডিস্ক অ্যাক্সেস করতে সক্ষম হতে হবে। যদি ডিভাইসটি একটি অপরিবর্তিত 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 কল করা অ্যান্ড্রয়েড ফ্রেমওয়ার্কের দায়িত্ব। বুটলোডার কখনোই কোনো পার্টিশনকে সফলভাবে বুট হওয়া হিসেবে চিহ্নিত করবে না।

বুট নিয়ন্ত্রণ HAL এর জন্য সমর্থন

বুটলোডারকে অবশ্যই hardware/libhardware/include/hardware/boot_control.h এ সংজ্ঞায়িত boot_control HAL সমর্থন করতে হবে। আপডেটার বুট কন্ট্রোল HAL-কে কোয়েরি করে, অব্যবহৃত বুট স্লট আপডেট করে, HAL ব্যবহার করে সক্রিয় স্লট পরিবর্তন করে এবং আপডেট করা অপারেটিং সিস্টেমে রিবুট করে। বিস্তারিত জানতে, Implementing the boot control HAL দেখুন।

স্লটের জন্য সমর্থন

বুটলোডারকে অবশ্যই পার্টিশন এবং স্লট সম্পর্কিত কার্যকারিতা সমর্থন করতে হবে, যার মধ্যে অন্তর্ভুক্ত রয়েছে:

  • পার্টিশনের নামে অবশ্যই একটি সাফিক্স (suffix) থাকতে হবে, যা বুটলোডারের একটি নির্দিষ্ট স্লটে কোন পার্টিশনগুলো রয়েছে তা শনাক্ত করে। এই ধরনের প্রতিটি পার্টিশনের জন্য, has-slot: partition base name একটি সংশ্লিষ্ট ভ্যারিয়েবল থাকে যার মান yes । স্লটগুলোর নামকরণ বর্ণানুক্রমিকভাবে a, b, c, ইত্যাদি করা হয়, যা _a , _b , _c , ইত্যাদি সাফিক্সযুক্ত পার্টিশনগুলোকে নির্দেশ করে। বুটলোডার androidboot.slot_suffix কমান্ড লাইন প্রপার্টি ব্যবহার করে অপারেটিং সিস্টেমকে জানিয়ে দেয় যে কোন স্লটটি বুট করা হয়েছে। অ্যান্ড্রয়েড ১২ বা তার উচ্চতর সংস্করণসহ চালু হওয়া ডিভাইসগুলোর জন্য এই প্রপার্টিটি bootconfig-এর মাধ্যমে সেট করা হয়।

  • slot-retry-count মানটি একটি ধনাত্মক মানে (সাধারণত 3 ) রিসেট করা হয়, যা বুট কন্ট্রোল HAL দ্বারা setActiveBootSlot কলব্যাকের মাধ্যমে অথবা fastboot set_active কমান্ডের মাধ্যমে করা হয়। যখন কোনো স্লটের অংশ এমন একটি পার্টিশন পরিবর্তন করা হয়, তখন বুটলোডার "সফলভাবে বুট হয়েছে" লেখাটি মুছে ফেলে এবং স্লটটির জন্য রিট্রাই কাউন্ট রিসেট করে দেয়।

বুটলোডারকে এটাও নির্ধারণ করতে হবে যে কোন স্লটে লোড করা হবে। চিত্রটিতে একটি উদাহরণমূলক সিদ্ধান্ত গ্রহণ প্রক্রিয়া দেখানো হয়েছে।

বুটলোডার স্লটিং প্রবাহ
চিত্র ১. বুটলোডার স্লটিং প্রবাহ
  1. কোন স্লটে চেষ্টা করবেন তা নির্ধারণ করুন। slot-unbootable হিসেবে চিহ্নিত কোনো স্লট লোড করার চেষ্টা করবেন না। এই স্লটটি fastboot দ্বারা ফেরত দেওয়া মানগুলির সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত এবং এটিকে বর্তমান স্লট বলা হয়।

  2. যদি বর্তমান স্লটটি slot-successful হিসেবে চিহ্নিত না থাকে এবং এর ' slot-retry-count = 0 হয়, তবে বর্তমান স্লটটিকে slot-unbootable আনবুটেবল' হিসেবে চিহ্নিত করুন। এরপর এমন একটি ভিন্ন স্লট নির্বাচন করুন যা unbootable হিসেবে চিহ্নিত নয় এবং slot-successful হিসেবে চিহ্নিত; এই স্লটটিই এখন নির্বাচিত স্লট হবে। যদি কোনো বর্তমান স্লট উপলব্ধ না থাকে, তবে রিকভারি মোডে বুট করুন অথবা ব্যবহারকারীকে একটি অর্থবহ ত্রুটির বার্তা প্রদর্শন করুন।

  3. উপযুক্ত boot.img নির্বাচন করুন এবং কার্নেল কমান্ড লাইনে সঠিক সিস্টেম পার্টিশনের পাথ অন্তর্ভুক্ত করুন।

  4. কার্নেল কমান্ড লাইনের slot_suffix প্যারামিটারটি পূরণ করুন।

  5. বুট করুন। যদি slot-successful হিসেবে চিহ্নিত না করা হয়, তাহলে slot-retry-count ) হ্রাস করুন।

যেকোনো ফ্ল্যাশ কমান্ড চালানোর সময় কোন পার্টিশনটি ফ্ল্যাশ করতে হবে, তা fastboot ইউটিলিটি নির্ধারণ করে। উদাহরণস্বরূপ, fastboot flash system system.img কমান্ডটি চালালে প্রথমে ` current-slot ভেরিয়েবলটি কোয়েরি করা হয় এবং তারপর সেই ফলাফলের সাথে `system` যুক্ত করে ফ্ল্যাশ করার জন্য পার্টিশনের নাম (যেমন system_a , system_b , ইত্যাদি) তৈরি করা হয়।

fastboot set_active কমান্ড অথবা বুট কন্ট্রোল HAL setActiveBootSlot কমান্ড ব্যবহার করে বর্তমান স্লট সেট করার সময়, বুটলোডার বর্তমান স্লট আপডেট করবে, slot-unbootableslot-successful ক্লিয়ার করবে এবং রিট্রাই কাউন্ট রিসেট করবে ( slot-unbootable ক্লিয়ার করার এটিই একমাত্র উপায়)।

A/B আপডেট ছাড়া ডিভাইস

যেসব ডিভাইস A/B আপডেট ব্যবহার করে না (দেখুন : নন-A/B আপডেটেবল ডিভাইস ), সেগুলোতে OTA আপডেট সমর্থন করার জন্য, নিশ্চিত করুন যে ডিভাইসটির বুটলোডার নিম্নলিখিত শর্তগুলো পূরণ করে।

  • recovery পার্টিশনে এমন একটি ইমেজ থাকা উচিত যা কোনো সমর্থিত পার্টিশন ( cache , userdata ) থেকে সিস্টেম ইমেজ রিড করে system পার্টিশনে রাইট করতে সক্ষম।

  • বুটলোডারটিতে সরাসরি রিকভারি মোডে বুট করার সুবিধা থাকা উচিত।

  • যদি রেডিও ইমেজ আপডেট সমর্থিত হয়, তাহলে recovery পার্টিশনটিরও রেডিও ফ্ল্যাশ করার ক্ষমতা থাকা উচিত। এটি দুটি উপায়ের একটিতে সম্পন্ন করা যেতে পারে:

    • বুটলোডারটি রেডিও ফ্ল্যাশ করে। এক্ষেত্রে, আপডেটটি সম্পন্ন করার জন্য রিকভারি পার্টিশন থেকে রিবুট করে আবার বুটলোডারে ফিরে যাওয়া সম্ভব হওয়া উচিত।

    • রিকভারি ইমেজটি রেডিও ফ্ল্যাশ করে। এই কার্যকারিতাটি একটি বাইনারি লাইব্রেরি বা ইউটিলিটি হিসেবে প্রদান করা যেতে পারে।