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