GBL ডিপ্লয় করা

এই পৃষ্ঠা থেকে জানা যায় যে কীভাবে জেনেরিক বুটলোডার (GBL) বাইনারি ডিপ্লয় করতে হয়।

বুট ফার্মওয়্যার সংক্রান্ত প্রয়োজনীয়তা

GBL ব্যবহার করতে, বুট ফার্মওয়্যারকে নিম্নলিখিত শর্তাবলী পূরণ করতে হবে:

  • ইউনিফায়েড এক্সটেনসিবল ফার্মওয়্যার ইন্টারফেস (UEFI) মেনে চলা। ফার্মওয়্যারকে অবশ্যই প্রয়োজনীয় UEFI প্রোটোকল প্রয়োগ ও ব্যবহার করতে হবে। এছাড়াও, ফার্মওয়্যারকে অবশ্যই নির্ধারিত UEFI প্রোটোকল ব্যবহার করে ভেন্ডর-নির্দিষ্ট এক্সটেনশন যোগ করার অনুমতি দিতে হবে।

  • নিরাপত্তা। ফার্মওয়্যারকে Android যাচাই করা বুট (AVB)-এর সব প্রয়োজনীয়তা পূরণ করতে হবে, যাতে GBL বুট ইমেজ যাচাই করতে পারে।

  • বুট মোড। বাইনারি বিভিন্ন বুট মোড ম্যানেজ করতে সক্ষম হতে হবে, যেমন সাধারণ বুট, রিকভারি বুট এবং ফাস্টবুট।

  • ডায়নামিক পার্টিশনিং। বুট ফার্মওয়্যারে স্লট বেছে নেওয়ার লজিক প্রয়োগ করতে হবে যাতে সেটি সঠিক A/B বুট স্লট পড়তে পারে এবং সুপার পার্টিশনে ডায়নামিক পার্টিশন ও ইউজারডেটার সাথে মানানসই হয়।

  • OS কনফিগারেশন। ডিভাইস বুট করার জন্য প্রয়োজনীয় OEM কাস্টমাইজেশন সহ কার্নেল কমান্ড লাইন, ডিভাইস ট্রি (DTB) এবং bootconfig পরিবর্তন করার ক্ষমতা ফার্মওয়্যারের থাকতে হবে।

  • সুরক্ষিত VM লোড হচ্ছে। সুরক্ষিত VM উপস্থিত থাকলে, Android কার্নেলের আগে বাইনারি সঠিকভাবে আগে থেকেই যাচাই করা সুরক্ষিত VM ফার্মওয়্যার লোড করবে। আরও তথ্যের জন্য, Microdroid বুট সিকোয়েন্স দেখুন।

  • মেমরি ম্যানেজমেন্ট। বুট ফার্মওয়্যারে অবশ্যই UEFI মেমরি অ্যালোকেশন API কাজ করতে হবে।

প্রয়োগ সংক্রান্ত প্রয়োজনীয়তা

আপনার ডিভাইসে GBL সঠিকভাবে প্রয়োগ করতে, আপনাকে নিম্নলিখিত প্রয়োজনীয়তা পূরণ করতে হবে:

  • আপনার ডিভাইসে ৮ MB (বা এর থেকে বড়) সাইজের দুটি FAT পার্টিশন থাকতে হবে যেগুলির নাম android_esp_a ও android_esp_b এবং SOC-এর অ্যাক্সেস করা যায় এমন ব্লক ডিভাইসে থাকতে হবে।

    • ব্লক ডিভাইস হল এমন একটি স্টোরেজ ডিভাইস যা ব্লকের ইউনিট হিসেবে পড়া বা লেখা যায়। উদাহরণ হিসেবে UFS, eMMC ও এসডি কার্ড ডিভাইসের কথা বলা যায়।
    • FAT ব্যবহার করা হয় কারণ এটি একটি সর্বব্যাপী ও সহজ ফাইল সিস্টেম।
    • আমরা সাজেস্ট করি যে আপনি FAT12, FAT16 এবং FAT32 থেকে আপনার প্রয়োজন অনুযায়ী উপযুক্ত FAT ফাইল সিস্টেম বেছে নিন।
    • এই Android ভার্সনের সাপোর্ট উইন্ডোর সময়সীমা পর্যন্ত ওভার-দ্য-এয়ার (OTA) আপডেট ও রোলব্যাকের জন্য দুটি পার্টিশনই প্রয়োজন।
    • GBL-এর সাইজ কম্প্রেস না করা অবস্থায় আনুমানিক ২ এমবি। পরবর্তী সাত বছরে অতিরিক্ত ফিচারের কারণে কোনও বৃদ্ধি হলে তা ৮ MB-এর মধ্যে হয়ে যাবে।
    • GBL আপডেট হলে, আপনাকে অবশ্যই সম্পূর্ণ android_esp_${SLOT_SUFFIX} পার্টিশন আপডেট করতে হবে। Android OTA-তে শুধু GBL আপডেট কাজ করে না।
    • দুটি FAT পার্টিশনের জন্য ব্যবহৃত পার্টিশন টাইপ GUID অবশ্যই EFI সিস্টেম পার্টিশন GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B-এর সাথে সামঞ্জস্যপূর্ণ হতে হবে।
  • GBL-এর যে ভার্সনটি ডেপ্লয় করা হয়েছে সেটি অবশ্যই সংশ্লিষ্ট GBL রিলিজ ব্রাঞ্চ থেকে পাওয়া লেটেস্ট সার্টিফায়েড প্রোডাকশন বিল্ড হতে হবে। আমরা সাজেস্ট করি যে আপনি নিজের পছন্দের সাইনিং সলিউশন ব্যবহার করে GBL-এর Google-সার্টিফায়েড কপিতে স্বাক্ষর করুন এবং ফলাফল হিসেবে পাওয়া বিল্ড ও স্বাক্ষর মেটাডেটা android_esp_${SLOT_SUFFIX} পার্টিশনের মধ্যে স্টোর করুন।

    • OEM স্বাক্ষর দিয়ে GBL সার্টিফিকেট অক্ষত রাখতে হবে এবং বাইনারিতে কোনও হেডার প্রয়োগ করা যাবে না।
    • ডেভেলপার GBL বিল্ড শুধুমাত্র ডেভেলপমেন্ট ও ডিবাগ করার উদ্দেশ্যে ব্যবহার করা হয়। বিল্ডটি শিপ করা যাবে না এবং Google দ্বারা সার্টিফাই করা হবে না।
  • GBL অবশ্যই FAT পার্টিশনের মধ্যে /EFI/BOOT/BOOTAA64.EFI পাথে স্টোর করতে হবে।

  • GBL-এর সাথে কাজ করার জন্য প্রয়োজনীয় UEFI ও Android UEFI প্রোটোকল প্রয়োগ করুন। এইসব ইন্টারফেস কাজ না করলে GBL-এর প্রোডাকশন বিল্ড বুট করতে পারে না।

    • EFI_BLOCK_IO_PROTOCOL বা EFI_BLOCK_IO2_PROTOCOL ডিস্ক থেকে বুট ইমেজ ও pvmfw ইমেজ নেয়
    • স্ট্যাক ক্যানারি, KASLR সিড ও RNG সিডের জন্য EFI_RNG_PROTOCOL
    • AVB ও DICE কম্পিউটেশন করার জন্য স্ক্র্যাচ মেমরি অ্যালোকেট করার জন্য মেমরি অ্যালোকেশন পরিষেবা
    • EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL নো-অপ ইমপ্লিমেন্টেশনের জন্য বিকল্প প্রদান করে, তবে GBL ডিফল্ট হিসেবে এই প্রোটোকলের মাধ্যমে লগ করে
    • GBL_EFI_AVB_PROTOCOL বুট ইমেজ যাচাই করতে পাবলিক কী ও রোলব্যাক ইনডেক্স অ্যাক্সেস করে
    • GBL_EFI_BOOT_CONTROL_PROTOCOL ফার্মওয়্যার থেকে স্লট মেটাডেটা এবং বুট করার কারণ সংক্রান্ত তথ্য সংগ্রহ করে
    • GBL_EFI_AVF_PROTOCOL DICE চেন থেকে AVF কনফিগার ডেটা জেনারেট করে
  • ফার্মওয়্যারকে অবশ্যই GBL-কে UEFI ভেরিয়েবল প্রদান করতে হবে। এইসব ভেরিয়েবেলকে অবশ্যই GBL_EFI_VENDOR_GUID ভ্যালু 5a6d92f3-a2d0-4083-91a1-a50f6c3d9830 দিয়ে সেট করতে হবে।

    • gbl_fw_api_level অবশ্যই প্ল্যাটফর্ম ফার্মওয়্যারের API লেভেলে সেট করতে হবে, যা ভেন্ডর সফ্টওয়্যারের API লেভেল নির্দেশ করে। এই ভেরিয়েবলের মান ro.board.api_level সিস্টেম প্রপার্টির মানের সমান হতে হবে।
  • GBL ইন্টিগ্রেট করার সময় যেসব UEFI প্রোটোকল ব্যবহার করার জন্য বিশেষভাবে সাজেস্ট করা হয় সেগুলি GBL UEFI প্রোটোকল ডকুমেন্টে উল্লেখ করা আছে।

বুট ফার্মওয়্যার সংক্রান্ত সহায়তা

আগের বিভাগে প্রয়োজনীয়তা পূরণের জন্য প্রয়োজনীয় পরিবর্তন সহ, নিম্নলিখিত UEFI ফার্মওয়্যার প্রয়োগ GBL-এর সাথে কাজ করে:

  • EDK2 (Tianocore). EDK2 হল একটি জনপ্রিয় ওপেন-সোর্স UEFI ইমপ্লিমেন্টেশন। EDK2-ভিত্তিক বুটলোডারের জন্য GBL সাপোর্ট প্রয়োজন এবং UEFI সাপোর্ট আগে থেকেই আছে।
  • U-Boot. একটি সহজে কাস্টমাইজ করা যায় এবং বহুল ব্যবহৃত ওপেন-সোর্স বুটলোডার প্রোজেক্ট যা GBL ব্যবহারের জন্য UEFI মানানসই হওয়ার সুবিধা পাচ্ছে।
  • LittleKernel (LK). কিছু ভেন্ডর ব্যবহার করে এমন একটি ওপেন-সোর্স বুটলোডার।

GBL চালান

আপনি রান করার জন্য প্রি-বিল্ট GBL বাইনারি পেতে পারেন অথবা নিজের তৈরি করে রান করতে পারেন।

GBL বাইনারি পাওয়া ও চালানো

GBL একটি একক UEFI অ্যাপ বাইনারি হিসেবে বিতরণ করা হয়। Android-এর স্ট্যান্ডার্ড আপডেট মেকানিজম ব্যবহার করে আপনি ডিভাইসের বেস ফার্মওয়্যার থেকে আলাদাভাবে এই বাইনারি আপডেট করতে পারবেন।

Android 16 থেকে শুরু করে, আপনি যদি ARM-64 চিপসেটের উপর ভিত্তি করে কোনও ডিভাইস শিপ করেন, তাহলে আমরা আপনাকে GBL-এর লেটেস্ট Google-সার্টিফায়েড ভার্সন ডেপ্লয় করতে এবং এটিকে আপনার বুট চেনে ইন্টিগ্রেট করতে সাজেস্ট করি।

এই GBL বিল্ড ডিবাগ করতে, আপনি ডিবাগ করার জন্য সাহায্য পেতে এইসব আর্টিফ্যাক্ট ডাউনলোড করতে পারেন:

  • সিম্বল টেবিল Google-সার্টিফায়েড GBL বিল্ডের জন্য হার্ডওয়্যার ডিবাগার ও GDB ব্যবহার করে।
  • মেনিফেস্ট repo ব্যবহার করে সোর্স থেকে এই GBL বিল্ডটি আবার তৈরি করার মাধ্যমে সাইন করা বিল্ডে পরিবর্তন করে।
  • সংশ্লিষ্ট GBL ডেভেলপার বিল্ড হল সাইন করা প্রোডাকশন বিল্ডে প্রভাব ফেলা কোনও সমস্যার কম জটিল ডিবাগিংয়ের জন্য উপযোগী।
  • সিম্বল টেবিল, হার্ডওয়্যার ডিবাগার ও GDB সহ GBL ডেভেলপার বিল্ডের জন্য উপযোগী।

সব রিলিজ জুড়ে সার্টিফায়েড বাইনারি ও সিম্বল দেখতে, GBL রিলিজ বিল্ড দেখুন।

GBL তৈরি করা

GBL তৈরি করতে:

  1. আপনার কাছে repo টুল এবং Bazel বুটস্ট্র্যাপ ইনস্টল করা আছে কিনা তা যাচাই করুন:

    sudo apt install repo bazel-bootstrap
    
  2. uefi-gbl-mainline ম্যানিফেস্ট ফাইল ব্যবহার করে সোর্স কন্ট্রোলের জন্য আপনার বর্তমান ডিরেক্টরি ইনিশিয়ালাইজ করুন:

    repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline
    repo sync -j16
    
  3. UEFI অ্যাপ তৈরি করুন:

    tools/bazel run //bootable/libbootloader:gbl_efi_dist
    

Android ভার্চুয়াল ডিভাইসে GBL পরীক্ষা করা

  1. Cuttlefish-এর মধ্যে GBL রান করানো:

    cvd start --android_efi_loader=path_to_the_UEFI_app ...
    

    সরাসরি Android বুট করার পরিবর্তে, এই cvd start কমান্ড Android বুট করার জন্য UEFI অ্যাপ ব্যবহার করে।

সমস্যা ফাইল করুন এবং বুটলোডার টিমের সাথে যোগাযোগ করুন

GBL-এর জন্য কোনও বাগের ব্যাপারে অভিযোগ জানাতে, Buganizer-এ Android Generic Bootloader কম্পোনেন্ট-এ নেভিগেট করুন।

প্রশ্ন থাকলে, GBL টিমের সাথে যোগাযোগ করুন, android-gbl@google.com-এ ইমেল পাঠান।