Bootloader คืออิมเมจที่เป็นกรรมสิทธิ์ของผู้จำหน่ายซึ่งมีหน้าที่ในการนำเคอร์เนลขึ้นมาในอุปกรณ์ Bootloader จะปกป้องสถานะของอุปกรณ์และมีหน้าที่ในการเริ่มต้นสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE)และผูกรูทของความน่าเชื่อถือ นอกจากนี้ Bootloader ยังตรวจสอบความสมบูรณ์ของพาร์ติชัน boot และ recovery ก่อนที่จะย้ายการดำเนินการไปยังเคอร์เนล
ตัวอย่างโฟลว์ของ Bootloader
ตัวอย่างโฟลว์ของ Bootloader มีดังนี้
โหลดและเริ่มต้นหน่วยความจำ
ยืนยันอุปกรณ์ตามโฟลว์การเปิดเครื่องที่ได้รับการยืนยัน
ยืนยันพาร์ติชันการบูต ซึ่งรวมถึง
boot,dtbo,init_bootและrecoveryตามโฟลว์การเปิดเครื่องที่ได้รับการยืนยัน ในขั้นตอนนี้ ให้ตรวจสอบ เวอร์ชันส่วนหัวของอิมเมจบูต และแยกวิเคราะห์ส่วนหัวตามนั้นหากใช้การอัปเดต A/B ให้กำหนดสล็อตปัจจุบันที่จะ บูต
กำหนดว่าจะบูตโหมดการกู้คืนหรือไม่ ดูข้อมูลเพิ่มเติมได้ที่ หัวข้อ การสนับสนุนการอัปเดต OTA
โหลดอิมเมจการบูต เช่น
boot.img,vendor_boot.img,init_boot.imgและอิมเมจการบูตของผู้จำหน่ายที่เป็นกรรมสิทธิ์อื่นๆ อิมเมจการบูตเหล่านี้มีเคอร์เนลและอิมเมจ ramdiskโหลดเคอร์เนลลงในหน่วยความจำเป็นไบนารีที่บีบอัดและเรียกใช้ได้ด้วยตัวเอง เคอร์เนลจะคลายการบีบอัดตัวเองและเริ่มดำเนินการในหน่วยความจำ
โหลด ramdisk และส่วน bootconfig ลงในหน่วยความจำเพื่อสร้าง
initramfs
ฟีเจอร์เพิ่มเติมที่เกี่ยวข้องกับ Bootloader
ต่อไปนี้คือรายการฟีเจอร์เพิ่มเติมที่เกี่ยวข้องกับ Bootloader ที่คุณสามารถนำไปใช้ได้
Device Tree Overlay (DTO) Device Tree Overlay ช่วยให้ Bootloader รองรับการกำหนดค่าฮาร์ดแวร์ที่แตกต่างกัน DTO จะคอมไพล์เป็น Device Tree Blob (DTB) ซึ่ง Bootloader ใช้
การสุ่มที่อยู่เสมือนของอิมเมจเคอร์เนล Bootloader รองรับการสุ่มที่อยู่เสมือนที่โหลดอิมเมจเคอร์เนล หากต้องการสุ่มที่อยู่ ให้ตั้งค่า
RANDOMIZE_BASEเป็นtrueในการกำหนดค่าเคอร์เนล Bootloader ต้องให้เอนโทรปีโดยส่งค่า u64 แบบสุ่มในโหนดแผนผังอุปกรณ์/chosen/kaslr-seedการเปิดเครื่องที่ได้รับการยืนยัน การเปิดเครื่องที่ได้รับการยืนยันช่วยให้ Bootloader มั่นใจได้ว่าโค้ดที่เรียกใช้ทั้งหมดมาจากแหล่งที่มาที่เชื่อถือได้
การกำหนดค่าการบูต การกำหนดค่าการบูต มีให้บริการใน Android 12 ขึ้นไป และเป็นกลไกในการส่ง รายละเอียดการกำหนดค่าจากบิลด์และ Bootloader ไปยังระบบปฏิบัติการ ก่อน Android 12 จะใช้พารามิเตอร์บรรทัดคำสั่งเคอร์เนลที่มีคำนำหน้า
androidbootการอัปเดตผ่านอากาศ (OTA) อุปกรณ์ Android ที่ใช้งานจริงสามารถรับและติดตั้งการอัปเดต OTA สำหรับระบบ ซอฟต์แวร์แอป และกฎเขตเวลา ฟีเจอร์นี้ส่งผลต่อการใช้งาน Bootloader ดูข้อมูลทั่วไปเกี่ยวกับ OTA ได้ที่ หัวข้อการอัปเดต OTA ดูรายละเอียดการใช้งาน OTA ที่เฉพาะเจาะจงสำหรับ Bootloader ได้ที่ หัวข้อการสนับสนุนการอัปเดต OTA
การผูกเวอร์ชัน การผูกเวอร์ชันจะผูก คีย์ความปลอดภัยกับระบบปฏิบัติการและเวอร์ชันระดับแพตช์ การผูกเวอร์ชันช่วยให้มั่นใจได้ว่าผู้โจมตีที่ค้นพบจุดอ่อนในระบบเวอร์ชันเก่าหรือซอฟต์แวร์ TEE จะไม่สามารถย้อนอุปกรณ์กลับไปเป็นเวอร์ชันที่มีช่องโหว่และใช้คีย์ที่สร้างด้วยเวอร์ชันใหม่กว่าได้ Bootloader ต้องให้ข้อมูลบางอย่างเพื่อรองรับการผูกเวอร์ชัน ดูข้อมูลเพิ่มเติมได้ที่ หัวข้อข้อมูลเวอร์ชันในพร็อพเพอร์ตี้ AVB
บรรทัดคำสั่งเคอร์เนล
เชื่อมบรรทัดคำสั่งเคอร์เนลจากตำแหน่งต่อไปนี้
บรรทัดคำสั่ง Bootloader: ชุดพารามิเตอร์แบบคงที่และแบบไดนามิกที่กำหนดโดย Bootloader
แผนผังอุปกรณ์: จากโหนด
chosen/bootargsdefconfig: จากCONFIG_CMDLINEboot.img: จากบรรทัดคำสั่ง (สำหรับออฟเซ็ตและขนาด โปรดดูsystem/core/mkbootimg/bootimg.h
ตั้งแต่ Android 12 เป็นต้นมา สำหรับพารามิเตอร์ androidboot.* ที่
เราต้องส่งไปยังพื้นที่ผู้ใช้ Android เราสามารถใช้
bootconfig แทน
บรรทัดคำสั่งเคอร์เนลได้