Android 11 ได้นำเสนอแนวคิดของ Generic Kernel Image และพาร์ติชันการบูตของผู้ให้บริการ พาร์ติชันการบูตของผู้ให้บริการจะจัดเก็บโมดูลเคอร์เนลที่เข้ากันได้กับ GKI และจะโหลดโดย init ในระยะแรก นอกจากนี้ โมดูลเคอร์เนล ก่อนการเปิดตัว Android 11 ยังจัดเก็บไว้ใน พาร์ติชันของผู้ให้บริการและ ODM และโหลดโดยกระบวนการของผู้ให้บริการ
สำหรับ Android 11 ขึ้นไป คุณจะอัปเดตเคอร์เนลและโมดูลเคอร์เนลทั้งหมดแยกจากพาร์ติชันอื่นๆ ได้ หากต้องการเปิดใช้ การอัปเดตสำหรับโมดูลเคอร์เนลที่จัดเก็บไว้ในพาร์ติชันของผู้ให้บริการ (โดยไม่ต้องอัปเดตพาร์ติชันของผู้ให้บริการ) ให้ย้ายโมดูลพาร์ติชันของผู้ให้บริการทั้งหมดไปยังพาร์ติชันใหม่ที่ชื่อว่า Vendor DLKM (โมดูลเคอร์เนลที่โหลดได้แบบไดนามิก) จากนั้นคุณจะอัปเดตพาร์ติชันนี้ แยกกันได้ ในทำนองเดียวกัน คุณสามารถย้ายโมดูลเคอร์เนลทั้งหมดที่จัดเก็บไว้ใน พาร์ติชัน ODM ไปยังพาร์ติชันใหม่ที่ชื่อ ODM DLKM ได้ โดยพาร์ติชันนี้สามารถ อัปเดตแยกกันได้ด้วย
ตำแหน่งพาร์ติชัน
พาร์ติชัน vendor_dlkm และ odm_dlkm อยู่ใน Super Partition เป็น
พาร์ติชันแบบไดนามิกอีกพาร์ติชันหนึ่ง
เนื้อหา 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 และ Virtual 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 และ Virtual 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 ตามลำดับ เมื่อเกิดกรณีนี้ขึ้น Symlink ที่ /vendor/lib/modules และ /odm/lib/modules จะพร้อมใช้งาน
จากนั้นกระบวนการของผู้ให้บริการ (เช่น สคริปต์ .rc) จะโหลดโมดูลเคอร์เนลตาม
ลำดับที่ระบุใน modules.load กระบวนการของผู้ให้บริการยังโหลด
โมดูลในภายหลังได้ด้วย หากจำเป็น
เอกสารประกอบที่เกี่ยวข้อง
ดูเอกสารประกอบเกี่ยวกับการสร้างพาร์ติชัน vendor-boot (ซึ่งมี Vendor RAMDisk) ได้ที่การรองรับโมดูลเคอร์เนล