กำหนดค่าคุณสมบัติเคอร์เนลเป็นโมดูล GKI

หน้านี้ครอบคลุมถึงวิธีกำหนดค่าคุณสมบัติเคอร์เนลใหม่เป็นโมดูล GKI หรือกำหนดค่าคุณสมบัติเคอร์เนลในตัวที่มีอยู่เป็นโมดูล GKI

กำหนดค่าคุณสมบัติใหม่เป็นโมดูล GKI

  1. สำหรับคุณสมบัติใหม่ ให้แก้ไข gki_defconfig และตั้งค่ารายการกำหนดค่าของคุณสมบัติเคอร์เนลที่ต้องการจาก n ถึง m ( =m ) ตั้งค่านี้ทั้งใน arch/arm64/configs/gki_defconfig และ arch/x86/configs/gki_defconfig

  2. เพิ่มไฟล์ KO ( .ko ) ที่สร้างขึ้นสำหรับคุณลักษณะนี้ไปยังส่วน COMMON_GKI_MODULES_LIST ของ common/modules.bzl เพิ่มไฟล์ตามลำดับการจัดเรียง หากคุณไม่แน่ใจเกี่ยวกับไฟล์ทั้งหมดที่สร้างขึ้น บิลด์จะล้มเหลวและแสดงรายการไฟล์ KO ที่จำเป็นทั้งหมดที่จะเพิ่มลงในรายการ

  3. เพิ่มไฟล์ 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 เพื่อเป็นโมดูลที่ได้รับการป้องกันอย่างเป็นทางการ

  4. ตรวจสอบให้แน่ใจว่าไฟล์ 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 ในแพลตฟอร์มบิลด์

  5. ส่งการเปลี่ยนแปลงของคุณเพื่อรับการตรวจทาน โมดูล GKI เป็นฟีเจอร์เคอร์เนลสำหรับ Android เท่านั้น ดังนั้นจึงไม่จำเป็นต้องส่งแพตช์การแปลงโมดูลแบบอัปสตรีม อย่างไรก็ตาม คุณต้องปฏิบัติตามหลักเกณฑ์อื่นๆ เพื่อส่ง แพตช์ Android Common Kernel (ACK)

กำหนดค่าคุณสมบัติเคอร์เนลในตัวเป็นโมดูล GKI

  1. สำหรับคุณลักษณะเคอร์เนลในตัวที่มีอยู่ ให้แก้ไข gki_defconfig และตั้งค่ารายการกำหนดค่าของคุณลักษณะเคอร์เนลที่ต้องการจาก y เป็น m ( =m ) ตั้งค่านี้ทั้งใน arch/arm64/configs/gki_defconfig และ arch/x86/configs/gki_defconfig

  2. เพิ่มไฟล์ KO ( .ko ) ที่สร้างขึ้นสำหรับคุณลักษณะนี้ไปยังส่วน COMMON_GKI_MODULES_LIST ของ common/modules.bzl เพิ่มไฟล์ตามลำดับการจัดเรียง หากคุณไม่แน่ใจเกี่ยวกับไฟล์ทั้งหมดที่สร้างขึ้น บิลด์จะล้มเหลวและแสดงรายการไฟล์ KO ที่จำเป็นทั้งหมดที่จะเพิ่มลงในรายการ

  3. เพิ่มไฟล์ 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 เพื่อเป็นโมดูลที่ได้รับการป้องกันอย่างเป็นทางการ

  4. ตรวจสอบให้แน่ใจว่าไฟล์ 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 ในแพลตฟอร์มบิลด์

  5. ส่งการเปลี่ยนแปลงของคุณเพื่อรับการตรวจทาน โมดูล GKI เป็นฟีเจอร์เคอร์เนลสำหรับ Android เท่านั้น ดังนั้นจึงไม่จำเป็นต้องส่งแพตช์การแปลงโมดูลแบบอัปสตรีม อย่างไรก็ตาม คุณต้องปฏิบัติตามหลักเกณฑ์อื่นๆ เพื่อส่ง แพตช์ Android Common Kernel (ACK)

แปลงโมดูล GKI ที่ได้รับการป้องกันเป็นแบบไม่มีการป้องกัน

  1. ลบโมดูลที่ถูกแปลงจาก protected ไปเป็น unprotected ออกจากรายการโมดูลที่ได้รับการป้องกันที่ common/android/gki_protected_modules

  2. อัปเดตรายการการส่งออกที่ได้รับการป้องกันเพื่อแยกรายการออกจากโมดูลที่ไม่มีการป้องกันที่เพิ่งแปลงใหม่ใน common/android/abi_gki_protected_exports_{ARCH} โดยใช้ tools/bazel run //common:kernel_aarch64_abi_update_protected_exports สำหรับ aarch64

  3. ส่งการเปลี่ยนแปลงของคุณเพื่อรับการตรวจทาน โมดูล 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 หากโมดูลที่ไม่ได้ลงชื่อเป็นเวอร์ชันที่กำหนดเอง