বুটলোডার হলো বিক্রেতার নিজস্ব একটি ইমেজ, যা কোনো ডিভাইসে কার্নেল চালু করার জন্য দায়ী। বুটলোডার ডিভাইসের অবস্থা সুরক্ষিত রাখে এবং ট্রাস্টেড এক্সিকিউশন এনভায়রনমেন্ট (TEE) ইনিশিয়ালাইজ করা ও এর রুট অফ ট্রাস্ট বাইন্ডিং করার জন্য দায়ী। এছাড়াও, কার্নেলে এক্সিকিউশন স্থানান্তরের আগে বুটলোডার boot এবং recovery পার্টিশনের অখণ্ডতা যাচাই করে।
বুটলোডার প্রবাহের উদাহরণ
এখানে একটি বুটলোডার ফ্লো-এর উদাহরণ দেওয়া হলো:
মেমরি লোড এবং প্রারম্ভিকীকরণ করুন।
ভেরিফায়েড বুট ফ্লো অনুযায়ী ডিভাইসটি যাচাই করুন।
ভেরিফাইড বুট ফ্লো অনুযায়ী
boot,dtbo,init_bootএবংrecoveryসহ বুট পার্টিশনগুলো যাচাই করুন। এই ধাপের অংশ হিসেবে, বুট ইমেজ হেডার ভার্সন পরীক্ষা করুন এবং সেই অনুযায়ী হেডারটি পার্স করুন।যদি A/B আপডেট ব্যবহার করা হয়, তাহলে বুট করার জন্য বর্তমান স্লটটি নির্ধারণ করুন।
রিকভারি মোড বুট করা উচিত কিনা তা নির্ধারণ করুন। আরও তথ্যের জন্য, ‘ওটিএ আপডেট সমর্থন’ দেখুন।
boot.img,vendor_boot.img,init_boot.imgএবং অন্যান্য মালিকানাধীন ভেন্ডর বুট ইমেজগুলো লোড করুন। এই বুট ইমেজগুলোতে কার্নেল এবং র্যামডিস্ক ইমেজ থাকে।কার্নেলটিকে একটি স্ব-নির্বাহযোগ্য সংকুচিত বাইনারি হিসেবে মেমরিতে লোড করুন। কার্নেলটি নিজেকে ডিকম্প্রেস করে এবং মেমরিতে নির্বাহ হতে শুরু করে।
initramfsতৈরি করার জন্য ramdisk এবং bootconfig সেকশনটি মেমরিতে লোড করুন।
অতিরিক্ত বুটলোডার-সম্পর্কিত বৈশিষ্ট্য
নিচে বুটলোডার-সম্পর্কিত আরও কিছু বৈশিষ্ট্যের তালিকা দেওয়া হলো যা আপনি প্রয়োগ করতে পারেন:
ডিভাইস ট্রি ওভারলে (DTO)। একটি ডিভাইস ট্রি ওভারলে বুটলোডারকে বিভিন্ন হার্ডওয়্যার কনফিগারেশন সমর্থন করতে সক্ষম করে। একটি DTO কম্পাইল করে ডিভাইস ট্রি ব্লব (DTB) তৈরি করা হয়, যা বুটলোডার ব্যবহার করে।
কার্নেল ইমেজ ভার্চুয়াল অ্যাড্রেস র্যান্ডমাইজেশন। বুটলোডার সেই ভার্চুয়াল অ্যাড্রেসটি র্যান্ডমাইজ করা সমর্থন করে যেখানে কার্নেল ইমেজ লোড করা হয়। অ্যাড্রেসটি র্যান্ডমাইজ করতে, কার্নেল কনফিগে
RANDOMIZE_BASEকেtrueসেট করুন। বুটলোডারকে অবশ্যই/chosen/kaslr-seedডিভাইস ট্রি নোডে একটি র্যান্ডম u64 ভ্যালু পাস করার মাধ্যমে এনট্রপি সরবরাহ করতে হবে।ভেরিফাইড বুট। ভেরিফাইড বুট বুটলোডারকে এটি নিশ্চিত করতে সাহায্য করে যে, নির্বাহিত সমস্ত কোড একটি বিশ্বস্ত উৎস থেকে আসছে।
বুট কনফিগ অ্যান্ড্রয়েড ১২ এবং এর পরবর্তী সংস্করণগুলোতে উপলব্ধ এবং এটি বিল্ড ও বুটলোডার থেকে অপারেটিং সিস্টেমে কনফিগারেশনের বিবরণ পাঠানোর একটি পদ্ধতি। অ্যান্ড্রয়েড ১২-এর আগে,
androidbootপ্রিফিক্সযুক্ত কার্নেল কমান্ড-লাইন প্যারামিটার ব্যবহার করা হতো।ওভার-দ্য-এয়ার (OTA) আপডেট। ফিল্ডে থাকা অ্যান্ড্রয়েড ডিভাইসগুলো সিস্টেম, অ্যাপ সফটওয়্যার এবং টাইম জোন রুলসের জন্য OTA আপডেট গ্রহণ ও ইনস্টল করতে পারে। এই ফিচারটি আপনার বুটলোডার ইমপ্লিমেন্টেশনের উপর প্রভাব ফেলে। OTA সম্পর্কে সাধারণ তথ্যের জন্য, OTA আপডেট দেখুন। বুটলোডার-নির্দিষ্ট OTA ইমপ্লিমেন্টেশনের বিস্তারিত তথ্যের জন্য, OTA আপডেট সাপোর্ট দেখুন।
ভার্সন বাইন্ডিং নিরাপত্তা কী-গুলোকে অপারেটিং সিস্টেম এবং প্যাচ লেভেল ভার্সনের সাথে সংযুক্ত করে। ভার্সন বাইন্ডিং নিশ্চিত করে যে, কোনো আক্রমণকারী যদি সিস্টেম বা TEE সফটওয়্যারের পুরোনো কোনো ভার্সনে দুর্বলতা খুঁজে পায়, তবে সে যেন ডিভাইসটিকে সেই দুর্বল ভার্সনে ফিরিয়ে নিয়ে যেতে এবং নতুন ভার্সন দিয়ে তৈরি কী-গুলো ব্যবহার করতে না পারে। ভার্সন বাইন্ডিং সমর্থন করার জন্য বুটলোডারকে অবশ্যই নির্দিষ্ট কিছু তথ্য সরবরাহ করতে হবে। আরও তথ্যের জন্য, AVB প্রোপার্টিজ-এ ভার্সন ইনফরমেশন দেখুন।
কার্নেল কমান্ড লাইন
নিম্নলিখিত স্থানগুলি থেকে কার্নেল কমান্ড লাইন সংযুক্ত করুন:
বুটলোডার কমান্ড লাইন: বুটলোডার দ্বারা নির্ধারিত স্থির এবং গতিশীল প্যারামিটারসমূহের সমষ্টি
ডিভাইস ট্রি:
chosen/bootargsনোড থেকেdefconfig:CONFIG_CMDLINEথেকেboot.img: কমান্ড লাইন থেকে (অফসেট এবং আকারের জন্যsystem/core/mkbootimg/bootimg.hদেখুন)
অ্যান্ড্রয়েড ১২ থেকে, অ্যান্ড্রয়েড ইউজারস্পেসে androidboot.* প্যারামিটারগুলো পাঠানোর জন্য আমরা কার্নেল কমান্ড লাইনের পরিবর্তে bootconfig ব্যবহার করতে পারি।