Android 11 แนะนำแนวคิดของ Generic Kernel Image และพาร์ติชันสำหรับบูตของผู้จำหน่าย พาร์ติชันสำหรับเริ่มระบบของผู้จำหน่ายจัดเก็บโมดูลเคอร์เนลที่เข้ากันได้กับ 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 เพิ่ม vendor_dlkm
ไปยัง 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 เพิ่ม odm_dlkm
ไปยัง 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 ของผู้จำหน่าย) โปรดดูที่ Kernel Module Support