ภาพรวมของบูตโหลดเดอร์

bootloader เป็นอิมเมจที่เป็นกรรมสิทธิ์ของผู้ขายซึ่งรับผิดชอบในการดึงเคอร์เนลบนอุปกรณ์ โปรแกรมโหลดบูตจะปกป้องสถานะของอุปกรณ์และรับผิดชอบในการเริ่มต้น Trusted Execution Environment (TEE) และเชื่อมโยงรูทของความไว้วางใจ บูตโหลดเดอร์ยังตรวจสอบความสมบูรณ์ของพาร์ติชั่นสำหรับ boot และ recovery ก่อนที่จะย้ายการดำเนินการไปยังเคอร์เนล

ตัวอย่างโฟลว์ bootloader

นี่คือตัวอย่างโฟลว์ bootloader:

  1. โหลดและเริ่มต้นหน่วยความจำ

  2. ตรวจสอบอุปกรณ์ตาม ขั้นตอน Verified Boot

  3. ตรวจสอบพาร์ติชันสำหรับบูต รวมถึง boot , dtbo , init_boot และ recovery ตามขั้นตอน Verified Boot ในขั้นตอนนี้ ให้ตรวจสอบเวอร์ชัน ส่วนหัวของอิมเมจสำหรับบูต และแยกวิเคราะห์ส่วนหัวตามลำดับ

  4. หากใช้ การอัปเดต A/B ให้กำหนดช่องปัจจุบันที่จะบูต

  5. ตรวจสอบว่าควรบูตโหมดการกู้คืนหรือไม่ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การสนับสนุนการอัปเดต OTA

  6. โหลดอิมเมจสำหรับบูต เช่น boot.img , vendor_boot.img , init_boot.img และอิมเมจสำหรับบูตของผู้จำหน่ายที่เป็นกรรมสิทธิ์อื่นๆ อิมเมจสำหรับบูตเหล่านี้ประกอบด้วยอิมเมจเคอร์เนลและ ramdisk

    1. โหลดเคอร์เนลลงในหน่วยความจำเป็นไบนารี่ที่ถูกบีบอัดด้วยตนเอง เคอร์เนลจะขยายขนาดตัวเองและเริ่มดำเนินการในหน่วยความจำ

    2. โหลด ramdisks และส่วน bootconfig ลงในหน่วยความจำเพื่อสร้าง initramfs

คุณสมบัติเพิ่มเติมที่เกี่ยวข้องกับ bootloader

ต่อไปนี้เป็นรายการคุณสมบัติเพิ่มเติมที่เกี่ยวข้องกับ bootloader ที่คุณสามารถใช้ได้:

  • การซ้อนทับแผนผังอุปกรณ์ (DTO) การซ้อนทับแผนผังอุปกรณ์ ช่วยให้ bootloader รองรับการกำหนดค่าฮาร์ดแวร์ที่แตกต่างกัน DTO ถูกคอมไพล์เป็น Device Tree Blob (DTB) ซึ่งใช้โดย Bootloader

  • การสุ่มที่อยู่เสมือนเคอร์เนลอิมเมจ bootloader รองรับการสุ่มที่อยู่เสมือนที่โหลดอิมเมจเคอร์เนล หากต้องการสุ่มที่อยู่ ให้ตั้ง RANDOMIZE_BASE เป็น true ในการกำหนดค่าเคอร์เนล bootloader ต้องจัดเตรียมเอนโทรปีโดยส่งค่า u64 แบบสุ่มในโหนดแผนผังอุปกรณ์ /chosen/kaslr-seed

  • บูตที่ตรวจสอบแล้ว Verified Boot ช่วยให้ bootloader มั่นใจได้ว่าโค้ดที่ดำเนินการทั้งหมดมาจากแหล่งที่เชื่อถือได้

  • การกำหนดค่าการบูต การกำหนดค่าการบูต ใช้งานได้ใน Android 12 ขึ้นไปและเป็นกลไกในการส่งรายละเอียดการกำหนดค่าจากบิลด์และโปรแกรมโหลดบูตไปยังระบบปฏิบัติการ ก่อน Android 12 จะใช้พารามิเตอร์บรรทัดคำสั่งเคอร์เนลที่มีคำนำหน้าเป็น androidboot

  • การอัปเดตแบบ Over-the-air (OTA) อุปกรณ์ Android ในภาคสนามสามารถรับและติดตั้งการอัปเดต OTA ให้กับระบบ ซอฟต์แวร์แอป และกฎเขตเวลาได้ คุณลักษณะนี้มีผลกระทบต่อการใช้งาน Bootloader ของคุณ สำหรับข้อมูลทั่วไปเกี่ยวกับ OTA โปรดดู การอัปเดต OTA สำหรับรายละเอียดการใช้งาน OTA เฉพาะโปรแกรมโหลดบูต โปรดดูที่ การสนับสนุนการอัปเดต OTA

  • การผูกเวอร์ชัน การเชื่อมโยงเวอร์ชัน จะผูกคีย์ความปลอดภัยกับระบบปฏิบัติการและเวอร์ชันระดับแพตช์ การเชื่อมโยงเวอร์ชันช่วยให้แน่ใจว่าผู้โจมตีที่ค้นพบจุดอ่อนในระบบเวอร์ชันเก่าหรือซอฟต์แวร์ TEE จะไม่สามารถย้อนกลับอุปกรณ์กลับไปเป็นเวอร์ชันที่มีช่องโหว่และใช้คีย์ที่สร้างด้วยเวอร์ชันที่ใหม่กว่าได้ bootloader ต้องให้ข้อมูลบางอย่างเพื่อรองรับการผูกเวอร์ชัน สำหรับข้อมูลเพิ่มเติม โปรดดู ข้อมูลเวอร์ชันในคุณสมบัติ AVB

บรรทัดคำสั่งเคอร์เนล

เชื่อมต่อบรรทัดคำสั่งเคอร์เนลจากตำแหน่งต่อไปนี้:

  • บรรทัดคำสั่ง Bootloader: ชุดของพารามิเตอร์คงที่และไดนามิกที่กำหนดโดย bootloader

  • โครงสร้างอุปกรณ์: จากโหนด chosen/bootargs

  • defconfig : จาก CONFIG_CMDLINE

  • boot.img : จากบรรทัดคำสั่ง (สำหรับออฟเซ็ตและขนาด อ้างถึง system/core/mkbootimg/bootimg.h

ตั้งแต่ Android 12 สำหรับพารามิเตอร์ androidboot.* ที่เราต้องส่งผ่านไปยังพื้นที่ผู้ใช้ Android เราสามารถใช้ bootconfig แทนบรรทัดคำสั่งเคอร์เนลได้