Android 11 นำเสนอแนวคิดของอิมเมจ Kernel ทั่วไปและพาร์ติชันการเปิดเครื่องของผู้ให้บริการ พาร์ติชันบูตของผู้ให้บริการจะจัดเก็บโมดูลเคอร์เนลที่เข้ากันได้กับ GKI และโหลดโดย init ระยะแรก โมดูลเคอร์เนลก่อนการเปิดตัว Android 11 จะจัดเก็บไว้ในพาร์ติชันของผู้ให้บริการและ ODM และโหลดโดยกระบวนการของผู้ให้บริการ
สำหรับ Android 11 ขึ้นไป คุณสามารถอัปเดตเคอร์เนลและโมดูลเคอร์เนลทั้งหมดแยกจากพาร์ติชันอื่นๆ ได้ หากต้องการเปิดใช้การอัปเดตสำหรับโมดูลเคอร์เนลที่จัดเก็บไว้ในพาร์ติชันของผู้ให้บริการ (โดยไม่ต้องอัปเดตพาร์ติชันของผู้ให้บริการ) ให้ย้ายโมดูลพาร์ติชันของผู้ให้บริการทั้งหมดไปยังพาร์ติชันใหม่ที่เรียกว่า Vendor DLKM (โมดูลเคอร์เนลที่โหลดแบบไดนามิก) จากนั้นคุณจะอัปเดตพาร์ติชันนี้แยกต่างหากได้ ในทํานองเดียวกัน คุณสามารถย้ายโมดูลเคอร์เนลทั้งหมดที่จัดเก็บไว้ในพาร์ติชัน ODM ไปยังพาร์ติชันใหม่ชื่อ ODM DLKM ได้ คุณอัปเดตพาร์ติชันนี้แยกต่างหากได้ด้วย
ตำแหน่งพาร์ติชัน
พาร์ติชัน vendor_dlkm
และ odm_dlkm
อยู่ในพาร์ติชันหลักในฐานะพาร์ติชันแบบไดนามิกอีกพาร์ติชันหนึ่ง
เนื้อหา vendor_dlkm ใน /vendor/lib/modules
- โมดูลเคอร์เนลของผู้ให้บริการ
modprobe
ไฟล์การกําหนดค่า- ไฟล์
modules.load
เนื้อหา odm_dlkm ใน /odm/lib/modules
- โมดูลเคอร์เนล ODM
modprobe
ไฟล์การกําหนดค่า- ไฟล์
modules.load
ดูรายละเอียดเพิ่มเติมเกี่ยวกับไฟล์การกำหนดค่าโมดูลเคอร์เนลที่การสนับสนุนโมดูลเคอร์เนล
สร้างการสนับสนุน
การสร้าง vendor_dlkm
และ odm_dlkm
มีกระบวนการคล้ายกับการสร้างพาร์ติชันแบบไดนามิกอื่นๆ
ตัวอย่างการสร้าง vendor_dlkm
บิลด์ vendor_dlkm
ดังที่แสดงในตัวอย่างต่อไปนี้
BoardConfig.mk
BOARD_USES_VENDOR_DLKMIMAGE := true
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
BOARD_<GROUP_NAME>_PARTITION_LIST += vendor_dlkm
แทนที่ <GROUP_NAME>
ด้วยชื่อที่เหมาะสมของกลุ่มอัปเดต กลุ่มการอัปเดตควรเป็นกลุ่มที่มีพาร์ติชันของผู้ให้บริการ
สำหรับอุปกรณ์ A/B และ A/B เสมือน ให้ใช้ device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
เพิ่มรายการต่อไปนี้สำหรับ vendor_dlkm
ไปยัง fstab เปลี่ยนสถานะตามอุปกรณ์ ใช้ CL Add vendor_dlkm
to
CF
เป็นตัวอย่าง
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
ตัวอย่างการสร้าง odm_dlkm
สร้าง odm_dlkm
ดังที่แสดงในตัวอย่างต่อไปนี้
BoardConfig.mk
BOARD_USES_ODM_DLKIMAGE := true
BOARD_ODM_DLKIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_ODM_DLKM := odm_dlkm
BOARD_<group_name>_PARTITION_LIST += odm_dlkm
สําหรับอุปกรณ์ A/B และ A/B เสมือนจริง device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
เพิ่มรายการต่อไปนี้สำหรับ odm_dlkm
ลงใน fstab เปลี่ยนสถานะตามอุปกรณ์ ใช้ CL Add odm_dlkm
to
CF
เป็นตัวอย่าง
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
คัดลอกโมดูลเคอร์เนลลงในพาร์ติชัน
หากต้องการเลือกโมดูลเคอร์เนลที่ต้องการคัดลอกลงในพาร์ติชัน vendor_dlkm
ให้ระบุโมดูลดังกล่าวใน BOARD_VENDOR_KERNEL_MODULES
หากต้องการลบล้างเนื้อหาของ modules.load
คุณสามารถระบุได้ใน BOARD_VENDOR_KERNEL_MODULES_LOAD
ในเวลาบิลด์ โมดูลที่แสดงใน BOARD_VENDOR_KERNEL_MODULES
จะติดตั้งใน $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
ระบบจะสร้างลิงก์สัญลักษณ์ที่ /vendor/lib/modules
ซึ่งนำไปยัง /vendor_dlkm/lib/modules
ในทำนองเดียวกัน หากต้องการเลือกโมดูลเคอร์เนลที่ต้องการคัดลอกลงในพาร์ติชัน odm_dlkm
ให้ระบุไว้ใน BOARD_ODM_KERNEL_MODULES
บิลด์แพลตฟอร์มจะทำงาน depmod
ในโมดูลและคัดลอกไฟล์เอาต์พุต depmod
ไปยังอิมเมจ
บิลด์จะสร้างไฟล์ modules.load
และจัดเก็บไว้ในอิมเมจ
ไฟล์นี้มีโมดูลทั้งหมดที่แสดงใน BOARD_ODM_KERNEL_MODULES
หากต้องการลบล้างเนื้อหาของ modules.load
ให้ระบุใน
BOARD_ODM_KERNEL_MODULES_LOAD
เมื่อมีการสร้าง โมดูลที่แสดงใน BOARD_ODM_KERNEL_MODULES
จะติดตั้งใน
$ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
ระบบจะสร้างลิงก์สัญลักษณ์ที่ /odm/lib/modules
ซึ่งนำไปยัง /odm_dlkm/lib/modules
ใช้ /vendor/lib/modules
และ /odm/lib/modules
สำหรับโมดูลเคอร์เนลของผู้ให้บริการและ ODM เสมอ
อย่าใช้ /vendor_dlkm/lib/modules อุปกรณ์ที่ไม่มีพาร์ติชัน vendor_dlkm
จะติดตั้ง BOARD_VENDOR_KERNEL_MODULES
ลงใน /vendor/lib/modules
โดยตรง การดำเนินการนี้ทำให้เกิดปัญหาเนื่องจากไม่มี /vendor_dlkm/lib/modules
อย่าใช้ /odm_dlkm/lib/modules
อุปกรณ์ที่ไม่มีพาร์ติชัน odm_dlkm
ให้ติดตั้ง BOARD_ODM_KERNEL_MODULES
เป็น /odm/lib/modules
โดยตรง การดำเนินการนี้ทำให้เกิดปัญหาเนื่องจากไม่มี /odm_dlkm/lib/modules
การต่อเชื่อมพาร์ติชันและการโหลดโมดูล
ในระหว่าง first_stage_init
ระบบจะเมานต์พาร์ติชัน vendor_dlkm
และ odm_dlkm
ในไดเรกทอรี /vendor_dlkm
และ /odm_dlkm
ตามลำดับ เมื่อเป็นเช่นนั้น สัญลักษณ์ลิงก์ที่ /vendor/lib/modules
และ /odm/lib/modules
จะพร้อมใช้งาน
จากนั้นกระบวนการของผู้ให้บริการ (เช่น สคริปต์ .rc
) จะโหลดโมดูลเคอร์เนลตามลําดับที่ระบุใน modules.load
ได้ กระบวนการของผู้ให้บริการยังโหลดข้อบังคับในภายหลังได้หากจำเป็น
เอกสารประกอบที่เกี่ยวข้อง
ดูเอกสารประกอบเกี่ยวกับการสร้างพาร์ติชันสำหรับบูตของผู้ให้บริการ (ซึ่งมี RAMDisk ของผู้ให้บริการ) ได้ที่การสนับสนุนข้อบังคับของเคอร์เนล