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 ซึ่งคุณสามารถ นำไปใช้ได้
การซ้อนทับแผนผังอุปกรณ์ (DTO) การซ้อนทับ Device Tree ช่วยให้โปรแกรมโหลดระบบปฏิบัติการ รองรับการกำหนดค่าฮาร์ดแวร์ที่แตกต่างกันได้ DTO จะคอมไพล์เป็น device tree blob (DTB) ซึ่งใช้โดย Bootloader
การสุ่มที่อยู่เสมือนของอิมเมจเคอร์เนล Bootloader รองรับ การสุ่มที่อยู่เสมือนที่โหลดอิมเมจเคอร์เนล หากต้องการ สุ่มที่อยู่ ให้ตั้งค่า
RANDOMIZE_BASE
เป็นtrue
ในการกำหนดค่าเคอร์เนล Bootloader ต้องให้เอนโทรปีโดยส่งค่า u64 แบบสุ่มใน/chosen/kaslr-seed
โหนด Device Treeการเปิดเครื่องที่ได้รับการยืนยัน การเปิดเครื่องที่ได้รับการยืนยันช่วยให้ โปรแกรมโหลดระบบปฏิบัติการตรวจสอบได้ว่าโค้ดที่เรียกใช้นั้นมาจากแหล่งที่มาที่เชื่อถือได้
การกำหนดค่าการบูต การกำหนดค่าการบูต พร้อมใช้งานใน Android 12 ขึ้นไป และเป็นกลไกสำหรับส่ง รายละเอียดการกำหนดค่าจากบิลด์และ Bootloader ไปยังระบบปฏิบัติการ ก่อน Android 12 จะใช้พารามิเตอร์บรรทัดคำสั่งของเคอร์เนลที่มีคำนำหน้า
androidboot
การอัปเดตผ่านอากาศ (OTA) อุปกรณ์ Android ในภาคสนามสามารถรับและ ติดตั้งการอัปเดต OTA ในระบบ ซอฟต์แวร์แอป และ กฎเขตเวลาได้ ฟีเจอร์นี้มีผลต่อการใช้งาน Bootloader ดูข้อมูลทั่วไปเกี่ยวกับ OTA ได้ที่ การอัปเดต OTA ดูรายละเอียดการติดตั้งใช้งาน OTA เฉพาะ Bootloader ได้ที่ การรองรับการอัปเดต OTA
การเชื่อมโยงเวอร์ชัน การเชื่อมโยงเวอร์ชันจะเชื่อมโยง คีย์ความปลอดภัยกับระบบปฏิบัติการและเวอร์ชันระดับแพตช์ การเชื่อมโยงเวอร์ชัน ช่วยให้มั่นใจได้ว่าผู้โจมตีที่ค้นพบจุดอ่อนในระบบเวอร์ชันเก่า หรือซอฟต์แวร์ TEE จะไม่สามารถย้อนเวอร์ชันอุปกรณ์กลับไปเป็นเวอร์ชันที่มีช่องโหว่ และใช้คีย์ที่สร้างด้วยเวอร์ชันใหม่กว่าได้ Bootloader ต้องให้ข้อมูลบางอย่างเพื่อรองรับการเชื่อมโยงเวอร์ชัน ดูข้อมูลเพิ่มเติมได้ที่ ข้อมูลเวอร์ชันในพร็อพเพอร์ตี้ AVB
บรรทัดคำสั่งเคอร์เนล
ต่อบรรทัดคำสั่งเคอร์เนลจากตำแหน่งต่อไปนี้
บรรทัดคำสั่งของ Bootloader: ชุดพารามิเตอร์แบบคงที่และแบบไดนามิกที่กำหนดโดย Bootloader
แผนผังอุปกรณ์: จากโหนด
chosen/bootargs
defconfig
: จากCONFIG_CMDLINE
boot.img
: จากบรรทัดคำสั่ง (ดูออฟเซ็ตและขนาดได้ที่system/core/mkbootimg/bootimg.h
ตั้งแต่ Android 12 เป็นต้นไป สำหรับพารามิเตอร์ androidboot.*
ที่เราต้องส่งไปยังพื้นที่ผู้ใช้ Android เราสามารถใช้ bootconfig แทนบรรทัดคำสั่งของเคอร์เนลได้