คุณสามารถอัปเดต GKI และโมดูล GKI แยกจากพาร์ติชันอื่นๆ ได้เนื่องจากโมดูล GKI อยู่ในพาร์ติชันแบบไดนามิกแยกต่างหากในอิมเมจซุปเปอร์ที่ชื่อ system_dlkm
Google รับรองโมดูล GKI โดยใช้เคอร์เนล
คู่คีย์เวลาบิลด์และใช้งานได้กับ GKI ที่สร้างมาด้วยเท่านั้น
โมดูล GKI และ GKI จะไม่มีความเสถียรของ ABI สำหรับโมดูลที่จะโหลด
อย่างถูกต้องในระหว่างรันไทม์ โมดูล GKI และ GKI ต้องสร้างและอัปเดต
ใช้การรองรับพาร์ติชัน system_dklm
พาร์ติชัน system_dlkm
อยู่ในซูเปอร์พาร์ติชันเป็นไดนามิกอื่น
พาร์ติชัน พาร์ติชันนี้อาจมีสิ่งต่อไปนี้
- โมดูลเคอร์เนลที่รับรองเวลาบิลด์ของ Google
- อาร์ติแฟกต์
depmod
รายการ
บิลด์ system_dlkm
การสร้าง system_dlkm
เป็นกระบวนการที่คล้ายกับการสร้างไดนามิกอื่นๆ
พาร์ติชัน ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่ม system_dlkm
ไปยังบิลด์
ใน
BoardConfig.mk
ให้เพิ่มรายการต่อไปนี้BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE) TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
เพิ่ม
system_dlkm
ในรายการพาร์ติชันBOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(ไม่บังคับ) สำหรับอุปกรณ์ A/B และ A/B เสมือน ให้เพิ่มบรรทัดต่อไปนี้ใน
device.mk
ไฟล์สำหรับอุปกรณ์ของคุณAB_OTA_PARTITIONS += system_dlkm
ระบุโมดูลเคอร์เนลที่จะคัดลอกไปยัง system_dlkm
ต้องสร้างโมดูล GKI และ GKI เพื่อให้โหลดโมดูลเสร็จสมบูรณ์ขณะรันไทม์
ดังนั้นคุณต้องระบุโมดูลเคอร์เนลในบิลด์ GKI สำหรับ
สถาปัตยกรรมเป้าหมายและระบุเป็นแหล่งที่มาสำหรับพาร์ติชัน system_dlkm
ระหว่างการสร้างแพลตฟอร์ม
สำหรับ Android 13
ชี้ BOARD_SYSTEM_DLKM_SRC
ไปยังโฟลเดอร์ที่มีโมดูล GKI ที่จำเป็น
ไฟล์ออบเจ็กต์เคอร์เนลสำหรับอุปกรณ์เป็นอินพุตไปยังระบบบิลด์เพื่อสร้าง
พาร์ติชัน system_dlkm
เช่น
ระบุแหล่งที่มาของโมดูล GKI ในโฟลเดอร์ แล้วชี้ BOARD_SYSTEM_DLKM_SRC
ไปที่
โฟลเดอร์นั้น เช่น
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
ในเวลาบิลด์ จะมีการติดตั้งโมดูลที่แสดงใน BOARD_SYSTEM_DLKM_SRC
ใน
$ANDROID_PRODUCT_OUT/system_dlkm
สำหรับ Android 14
เราได้ปรับปรุงการติดตั้งใช้งานด้วยมาโคร (BOARD_*_KERNEL_MODULES
) ที่ใช้สำหรับพาร์ติชัน *_dlkm
อื่นๆ รายการโมดูล GKI ที่จําเป็นสําหรับอุปกรณ์ควรอ้างอิงโดยมาโคร BOARD_SYSTEM_KERNEL_MODULES
ในเวลาบิลด์ โมดูลเหล่านี้
จะติดตั้งใน $ANDROID_PRODUCT_OUT/system_dlkm
โมดูลใดก็ตามในพาร์ติชัน vendor_dlkm
ที่ต้องอาศัยโมดูลในพาร์ติชัน system_dlkm
จะสร้างการอ้างอิงที่ถูกต้องในไฟล์ modules.dep
สําหรับพาร์ติชัน vendor_dlkm
เนื่องจากมีการแสดงทรัพยากร Dependency แบบข้ามพาร์ติชัน
โดย modules.dep
เมื่อ
ระบบจะโหลดโมดูลผู้ให้บริการ และโมดูล GKI ใดๆ ที่จำเป็นจะโหลดโดยอัตโนมัติ
ตัวอย่างเช่น หากต้องการติดตั้งโมดูล GKI ทั้งหมดในพาร์ติชัน system_dlkm
สำหรับเคอร์เนล GKI arm64
5.15
จากเวอร์ชันที่สร้างไว้ล่วงหน้า ให้ทำดังนี้
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
ต่อเชื่อม system_dlkm
ขณะรันไทม์
เพิ่ม ขึ้นอยู่กับระบบไฟล์ที่ใช้เป็นระบบไฟล์แบบอ่านอย่างเดียว
ข้อมูลต่อไปนี้ใน fstab
เพื่อต่อเชื่อมพาร์ติชัน system_dlkm
ขณะรันไทม์
ext4
เป็นระบบไฟล์แบบอ่านอย่างเดียว
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
erofs
เป็นระบบไฟล์แบบอ่านอย่างเดียว
system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
การต่อเชื่อมพาร์ติชันและการโหลดโมดูล
ในระหว่าง first_stage_init
ระบบจะต่อเชื่อมพาร์ติชัน system_dlkm
ใน
/system_dlkm
เป็นระบบไฟล์แบบอ่านอย่างเดียว บนตัวยึดที่สำเร็จ มีสัญลักษณ์สัญลักษณ์
ลิงก์ที่ /system/lib/modules
ซึ่งชี้ไปยัง /system_dlkm/lib/modules
คือ
พร้อมใช้งาน
กระบวนการของผู้ให้บริการ เช่น สคริปต์ .rc
จะโหลดโมดูลเคอร์เนลได้
ตามลำดับที่ระบุไว้ใน modules.load
กระบวนการของผู้ให้บริการต้องใช้ลิงก์สัญลักษณ์ /system/lib/modules
เพื่อโหลดโมดูล
หากจำเป็น กระบวนการของผู้ให้บริการสามารถโหลดโมดูลในภายหลังได้
SELinux
ทุกไฟล์ในพาร์ติชัน system_dlkm
มีป้ายกำกับบริบทไฟล์ของ
system_dlkm_file
หากต้องการโหลดไฟล์โมดูล GKI ในพาร์ติชัน system_dlkm
กระบวนการของผู้ให้บริการที่รับผิดชอบการโหลดโมดูลจำเป็นต้องมี sepolicy
โดเมนผู้ให้บริการ
ตัวอย่างเช่น dlkm_loader
ที่ Cuttlefish ใช้ในการโหลดโมดูล GKI จะมีแอตทริบิวต์
สิทธิ์ต่อไปนี้ในไฟล์นโยบายที่
shared/sepolicy/vendor/dlkm_loader.te
:
allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;
ตรวจสอบพาร์ติชัน system-dlkm
Google มีกรอบการทดสอบ GKI VTS เพื่อยืนยันพาร์ติชัน system_dlkm
ถึง
เรียกใช้การทดสอบด้วยตนเอง โดยใช้คำสั่ง atest
ต่อไปนี้
atest -c vts_dlkm_partition_test