Bootloader คืออิมเมจที่เป็นกรรมสิทธิ์ของผู้ให้บริการซึ่งมีหน้าที่เรียกใช้เคอร์เนลในอุปกรณ์ บูตโหลดเดอร์จะปกป้องสถานะของอุปกรณ์และมีหน้าที่ในการเริ่มต้นสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE) และเชื่อมโยงรูทของความน่าเชื่อถือ นอกจากนี้ บูตโหลดเดอร์จะตรวจสอบความสมบูรณ์ของพาร์ติชัน boot
และ recovery
ก่อนย้ายการดำเนินการไปยังเคอร์เนล
ตัวอย่างขั้นตอนของ Bootloader
ตัวอย่างขั้นตอนการทำงานของโปรแกรมโหลดบูตมีดังนี้
โหลดและเริ่มต้นหน่วยความจำ
ยืนยันอุปกรณ์ตามขั้นตอนการเปิดเครื่องที่ยืนยันแล้ว
ยืนยันพาร์ติชันสำหรับบูต ซึ่งรวมถึง
boot
,dtbo
,init_boot
และrecovery
ตามขั้นตอนการเปิดเครื่องที่ได้รับการยืนยัน ในขั้นตอนนี้ ให้ตรวจสอบเวอร์ชันของส่วนหัวของภาพสำหรับบูตและแยกวิเคราะห์ส่วนหัวดังกล่าวหากใช้การอัปเดต A/B ให้ระบุช่องปัจจุบันที่จะบูต
พิจารณาว่าควรบูตโหมดการกู้คืนหรือไม่ ดูข้อมูลเพิ่มเติมได้ในการรองรับการอัปเดต OTA
โหลดอิมเมจบูต เช่น
boot.img
,vendor_boot.img
,init_boot.img
และอิมเมจบูตของผู้ให้บริการที่เป็นกรรมสิทธิ์อื่นๆ รูปภาพสำหรับบูตเหล่านี้จะมีรูปภาพเคอร์เนลและแรมดิสก์โหลดเคอร์เนลลงในหน่วยความจำเป็นไบนารีที่บีบอัดซึ่งสามารถทำงานได้เอง เคอร์เนลจะคลายการบีบอัดตัวเองและเริ่มดำเนินการในหน่วยความจำ
โหลด RAM disk และส่วน bootconfig ลงในหน่วยความจำเพื่อสร้าง
initramfs
ฟีเจอร์เพิ่มเติมที่เกี่ยวข้องกับบูตโหลดเดอร์
ต่อไปนี้คือรายการฟีเจอร์เพิ่มเติมที่เกี่ยวข้องกับบูตโหลดเดอร์ที่คุณนำไปใช้ได้
การวางซ้อนแผนผังอุปกรณ์ (DTO) การวางซ้อน Device Tree ช่วยให้โปรแกรมโหลดบูตรองรับการกำหนดค่าฮาร์ดแวร์ที่แตกต่างกัน DTO จะคอมไพล์เป็น device tree blob (DTB) ซึ่งบูตโหลดเดอร์ใช้
การสุ่มที่อยู่เสมือนของภาพเคอร์เนล บูตโหลดเดอร์รองรับการทำให้ที่อยู่เสมือนที่จะโหลดรูปภาพเคอร์เนลเป็นแบบสุ่ม หากต้องการสุ่มที่อยู่ ให้ตั้งค่า
RANDOMIZE_BASE
เป็นtrue
ในการกำหนดค่าเคอร์เนล บูตโหลดเดอร์ต้องระบุข้อมูลความผันผวนโดยการส่งค่า u64 แบบสุ่มในโหนด/chosen/kaslr-seed
Device Treeการเปิดเครื่องที่ได้รับการยืนยัน การเปิดเครื่องที่ได้รับการยืนยันช่วยให้บูตโหลดเดอร์ตรวจสอบได้ว่าโค้ดที่เรียกใช้ทั้งหมดมาจากแหล่งที่มาที่เชื่อถือได้
การกําหนดค่าการบูต การกำหนดค่าการบูตพร้อมใช้งานใน Android 12 ขึ้นไป และเป็นกลไกในการส่งรายละเอียดการกำหนดค่าจากบิลด์และบูตโหลดเดอร์ไปยังระบบปฏิบัติการ ก่อนที่จะมี Android 12 ระบบจะใช้พารามิเตอร์บรรทัดคำสั่งของเคอร์เนลที่มีคำนำหน้าเป็น
androidboot
การอัปเดตผ่านอากาศ (OTA) อุปกรณ์ Android ที่ใช้อยู่สามารถรับและติดตั้งการอัปเดต OTA ของระบบ ซอฟต์แวร์แอป และกฎเขตเวลา ฟีเจอร์นี้ส่งผลต่อการใช้งานบูตโหลดเดอร์ ดูข้อมูลทั่วไปเกี่ยวกับ 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