หน้านี้ครอบคลุมถึงวิธีกำหนดค่าคุณสมบัติเคอร์เนลใหม่เป็นโมดูล GKI หรือกำหนดค่าคุณสมบัติเคอร์เนลในตัวที่มีอยู่เป็นโมดูล GKI
กำหนดค่าคุณสมบัติใหม่เป็นโมดูล GKI
สำหรับคุณสมบัติใหม่ ให้แก้ไข
gki_defconfig
และตั้งค่ารายการกำหนดค่าของคุณสมบัติเคอร์เนลที่ต้องการจากn
ถึงm
(=m
) ตั้งค่านี้ทั้งในarch/arm64/configs/gki_defconfig
และarch/x86/configs/gki_defconfig
เพิ่มไฟล์ KO (
.ko
) ที่สร้างขึ้นสำหรับคุณลักษณะนี้ไปยังส่วนCOMMON_GKI_MODULES_LIST
ของcommon/modules.bzl
เพิ่มไฟล์ตามลำดับการจัดเรียง หากคุณไม่แน่ใจเกี่ยวกับไฟล์ทั้งหมดที่สร้างขึ้น บิลด์จะล้มเหลวและแสดงรายการไฟล์ KO ที่จำเป็นทั้งหมดที่จะเพิ่มลงในรายการเพิ่มไฟล์ KO ชุดเดียวกันจากขั้นตอนที่ 2 โดยเรียงลำดับจากน้อยไปมากสำหรับการค้นหาไบนารี ณ รันไทม์ ไปที่
common/android/gki_{ARCH}_protected_modules
เพื่อกำหนดโมดูลเป็นโมดูล GKI ที่มีการป้องกัน อัปเดตรายการการส่งออกที่ได้รับการป้องกันเพื่อรวมรายการจากโมดูลที่เพิ่มใหม่ในcommon/android/abi_gki_protected_exports_{ARCH}
โดยใช้tools/bazel run //common:kernel_aarch64_abi_update_protected_exports
สำหรับaarch64
โมดูลที่กำหนดให้เป็นโมดูล GKI ที่ได้รับการป้องกันยังคงต้องได้รับการอนุมัติจาก Google เพื่อเป็นโมดูลที่ได้รับการป้องกันอย่างเป็นทางการตรวจสอบให้แน่ใจว่าไฟล์ KO ที่เพิ่มใหม่จากขั้นตอนที่ 2 ถูกคัดลอกไปยังเคอร์เนล
out/<androidX-YZ>/dist/system_dlkm.img
และout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
โมดูลในไฟล์เก็บถาวรsystem_dlkm_staging_archive.tar.gz
สามารถใช้เป็นอินพุตเพื่อสร้างsystem_dlkm.img
ในแพลตฟอร์มบิลด์ส่งการเปลี่ยนแปลงของคุณเพื่อรับการตรวจทาน โมดูล GKI เป็นฟีเจอร์เคอร์เนลสำหรับ Android เท่านั้น ดังนั้นจึงไม่จำเป็นต้องส่งแพตช์การแปลงโมดูลแบบอัปสตรีม อย่างไรก็ตาม คุณต้องปฏิบัติตามหลักเกณฑ์อื่นๆ เพื่อส่ง แพตช์ Android Common Kernel (ACK)
กำหนดค่าคุณสมบัติเคอร์เนลในตัวเป็นโมดูล GKI
สำหรับคุณลักษณะเคอร์เนลในตัวที่มีอยู่ ให้แก้ไข
gki_defconfig
และตั้งค่ารายการกำหนดค่าของคุณลักษณะเคอร์เนลที่ต้องการจากy
เป็นm
(=m
) ตั้งค่านี้ทั้งในarch/arm64/configs/gki_defconfig
และarch/x86/configs/gki_defconfig
เพิ่มไฟล์ KO (
.ko
) ที่สร้างขึ้นสำหรับคุณลักษณะนี้ไปยังส่วนCOMMON_GKI_MODULES_LIST
ของcommon/modules.bzl
เพิ่มไฟล์ตามลำดับการจัดเรียง หากคุณไม่แน่ใจเกี่ยวกับไฟล์ทั้งหมดที่สร้างขึ้น บิลด์จะล้มเหลวและแสดงรายการไฟล์ KO ที่จำเป็นทั้งหมดที่จะเพิ่มลงในรายการเพิ่มไฟล์ KO ชุดเดียวกันจากขั้นตอนที่ 2 โดยเรียงลำดับจากน้อยไปมากสำหรับการค้นหาไบนารี ณ รันไทม์ ไปที่
common/android/gki_{ARCH}_protected_modules
เพื่อกำหนดโมดูลเป็นโมดูล GKI ที่มีการป้องกัน อัปเดตรายการการส่งออกที่ได้รับการป้องกันเพื่อรวมรายการจากโมดูลที่เพิ่มใหม่ในcommon/android/abi_gki_protected_exports_{ARCH}
โดยใช้tools/bazel run //common:kernel_aarch64_abi_update_protected_exports
สำหรับaarch64
โมดูลที่กำหนดให้เป็นโมดูล GKI ที่ได้รับการป้องกันยังคงต้องได้รับการอนุมัติจาก Google เพื่อเป็นโมดูลที่ได้รับการป้องกันอย่างเป็นทางการตรวจสอบให้แน่ใจว่าไฟล์ KO ของโมดูลที่แปลงใหม่จากขั้นตอนที่ 2 ถูกคัดลอกไปยังเคอร์เนล
out/<androidX-YZ>/dist/system_dlkm.img
และout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
โมดูลในไฟล์เก็บถาวรsystem_dlkm_staging_archive.tar.gz
สามารถใช้เป็นอินพุตเพื่อสร้างsystem_dlkm.img
ในแพลตฟอร์มบิลด์ส่งการเปลี่ยนแปลงของคุณเพื่อรับการตรวจทาน โมดูล GKI เป็นฟีเจอร์เคอร์เนลสำหรับ Android เท่านั้น ดังนั้นจึงไม่จำเป็นต้องส่งแพตช์การแปลงโมดูลแบบอัปสตรีม อย่างไรก็ตาม คุณต้องปฏิบัติตามหลักเกณฑ์อื่นๆ เพื่อส่ง แพตช์ Android Common Kernel (ACK)
แปลงโมดูล GKI ที่ได้รับการป้องกันเป็นแบบไม่มีการป้องกัน
ลบโมดูลที่ถูกแปลงจาก protected ไปเป็น unprotected ออกจากรายการโมดูลที่ได้รับการป้องกันที่
common/android/gki_protected_modules
อัปเดตรายการการส่งออกที่ได้รับการป้องกันเพื่อแยกรายการออกจากโมดูลที่ไม่มีการป้องกันที่เพิ่งแปลงใหม่ใน
common/android/abi_gki_protected_exports_{ARCH}
โดยใช้tools/bazel run //common:kernel_aarch64_abi_update_protected_exports
สำหรับaarch64
ส่งการเปลี่ยนแปลงของคุณเพื่อรับการตรวจทาน โมดูล GKI เป็นฟีเจอร์เคอร์เนลสำหรับ Android เท่านั้น ดังนั้นจึงไม่จำเป็นต้องส่งแพตช์การแปลงโมดูลแบบอัปสตรีม อย่างไรก็ตาม คุณต้องปฏิบัติตามหลักเกณฑ์อื่นๆ เพื่อส่ง แพตช์ Android Common Kernel (ACK)
คู่มือการแก้ไขการละเมิดสัญลักษณ์โมดูล GKI อย่างรวดเร็ว
เมื่อโมดูลที่ไม่ได้ลงนามละเมิดการป้องกันสัญลักษณ์สำหรับโมดูล GKI อาจพบข้อผิดพลาดสองประเภทในระหว่างการโหลดโมดูล ส่งผลให้เกิดความล้มเหลว
1. โมดูลที่ไม่ได้ลงนามโดยใช้สัญลักษณ์ที่มีการป้องกัน
ข้อผิดพลาด:
module: Protected symbol: some_kernel_function (err -13)
สาเหตุ:
ไฟล์ module.ko
เป็นโมดูลผู้ขายที่ไม่ได้ลงนาม และพยายามแก้ไขสัญลักษณ์ที่ส่งออกของโมดูล GKI some_kernel_function
ระหว่างการโหลด โดยไม่แสดงอยู่ในรายการสัญลักษณ์ผู้ขาย
ปณิธาน:
หาก module.ko
ไม่ใช่โมดูล GKI ที่ได้รับการป้องกัน การอัปเดตรายการสัญลักษณ์จะแก้ไขข้อผิดพลาดโดยรวม some_kernel_function
ไว้ในรายการสัญลักษณ์ของผู้ขาย หรือใช้ module.ko
เวอร์ชัน GKI
2. โมดูลที่ไม่ได้ลงนามส่งออกสัญลักษณ์ที่ได้รับการป้องกัน
ข้อผิดพลาด:
module: exports protected symbol some_kernel_function
สาเหตุ:
โมดูลที่ส่งออก some_kernel_function
เป็นโมดูล GKI ที่ได้รับการป้องกัน และ module.ko
น่าจะเป็นเวอร์ชันที่กำหนดเองที่ไม่ได้ลงนามของโมดูลนั้น เมื่อ module.ko
พยายามส่งออก some_kernel_function
ซึ่งสามารถส่งออกได้โดยโมดูล GKI ที่ลงนามเท่านั้น การโหลดล้มเหลวพร้อมกับข้อความนี้
ปณิธาน:
สิ่งนี้สามารถแก้ไขได้โดยใช้เวอร์ชัน GKI ของโมดูลที่ส่งออก some_kernel_function
หากโมดูลที่ไม่ได้ลงชื่อเป็นเวอร์ชันที่กำหนดเอง