เราจำเป็นต้องดูแลรักษาอินเทอร์เฟซโมดูลเคอร์เนล (KMI) ให้เสถียรสำหรับผู้ให้บริการ โมดูล เคอร์เนล GKI คือ ที่สร้างและจัดส่งในรูปแบบไบนารี และโมดูลที่โหลดได้ของผู้ให้บริการ แยกต้นไม้ เคอร์เนลและโมดูลผู้ให้บริการ GKI ที่ได้จะต้องทำงานเป็น แม้ว่าผลิตภัณฑ์ทั้งสองจะสร้างขึ้นร่วมกัน
โดยทั่วไป ชุมชน Linux มี ขุ่นเคืองแนวคิดของ ABI ในเคอร์เนล ความเสถียร สำหรับเคอร์เนลเมนไลน์ เมื่อต้องเผชิญกับ เครื่องมือเชน การกำหนดค่า และเคอร์เนลหลักใน Linux ที่มีการเปลี่ยนแปลงอยู่ตลอดเวลา การคงรักษา KMI คงที่ในเมนไลน์ อย่างไรก็ตาม เป็นไปได้ที่จะรักษา KMI ให้คงที่ใน สภาพแวดล้อม GKI ที่มีข้อจํากัดสูงซึ่งมีข้อจํากัดต่อไปนี้
มีเพียง
gki_defconfig
การกำหนดค่าเท่านั้นที่ใช้สร้าง เคอร์เนลKMI คงที่ภายในเคอร์เนล LTS และเวอร์ชัน Android เดียวกันเท่านั้น เช่น
android13-5.10
,android12-5.10
หรือandroid13-5.15
- จะไม่มีความเสถียรของ KMI สำหรับ
android-mainline
- จะไม่มีความเสถียรของ KMI สำหรับ
เฉพาะเครื่องมือเชน Clang ที่เฉพาะเจาะจงที่ให้ไว้ใน AOSP และที่กำหนดไว้สำหรับ ซึ่งใช้สำหรับการสร้างเคอร์เนลและโมดูล
เฉพาะสัญลักษณ์ที่โมดูลใช้ตามที่ระบุไว้ในรายการสัญลักษณ์เท่านั้น ตรวจสอบเรื่องความเสถียรและถือว่าเป็นสัญลักษณ์ KMI
- หลักประกันคือโมดูลผู้ให้บริการต้องใช้สัญลักษณ์ KMI เท่านั้น ช่วงเวลานี้ ระบบจะบังคับใช้ข้อจำกัดโดยการโหลดโมดูลล้มเหลวหากสัญลักษณ์ที่ไม่ใช่ KMI ต้องระบุ
หลังจากตรึงสาขา KMI แล้ว ระบบจะอนุญาตให้ทำการเปลี่ยนแปลงได้ แต่จะทำลาย KMI ไม่ได้ การเปลี่ยนแปลงดังกล่าวรวมถึงสิ่งต่อไปนี้
- การเปลี่ยนแปลงการกำหนดค่า
- การเปลี่ยนแปลงรหัสเคอร์เนล
- การเปลี่ยนแปลง Toolchain (รวมถึงการอัปเดต)
ใช้กระบวนการบิลด์ที่แยกต่างหากและเครื่องมือเชน LLVM
กระบวนการบิลด์แบบแยกส่วนทำให้ KMI มีความมั่นคงด้วยการไฟล์ Manifest repo
ใน
kernel/manifest
อธิบายสภาพแวดล้อมของบิลด์ทั้งหมด ตัวอย่างเช่น พารามิเตอร์
ไฟล์ Manifest สำหรับ android13-5.15
รวมถึง Toolchain, สคริปต์การสร้าง และสิ่งอื่นๆ ที่จำเป็นสำหรับการสร้าง
เคอร์เนลทั่วไปสำหรับอิมเมจเคอร์เนล (GKI) การกำหนดค่า build.config
ที่เกี่ยวข้อง
เช่นการกำหนดค่าบิลด์ GKI build.config.gki.aarch64
ตรวจสอบว่ามีการใช้เครื่องมือที่รวมอยู่อย่างถูกต้องเพื่อสร้างบิลด์ที่สอดคล้องกัน
ผลลัพธ์
การใช้กระบวนการบิลด์ที่แยกต่างหากยังช่วยให้มั่นใจว่าคำอธิบาย ABI สำหรับ
ต้นไม้จะสอดคล้องกันไม่ว่า Google จะสร้าง (เช่น
abi_gki_aarch64.xml
สำหรับ android13-5.15
) หรือสร้างขึ้นในโครงสร้างภายในที่มีผู้ให้บริการ
โมดูล
เครื่องมือในการสร้างและเปรียบเทียบคำอธิบาย ABI
สำหรับ Kernel Module Interface (KMI) ก็ให้บริการเป็นส่วนหนึ่งของที่เก็บเช่นกัน
ที่อธิบายโดยไฟล์ Manifest
เครื่องมือเชนที่ใช้สร้างเคอร์เนล GKI ต้องเข้ากันได้กับ Toolchain ที่ใช้ในการสร้างโมดูลของผู้ให้บริการ สำหรับ Android 10 เคอร์เนล Android ทั้งหมดต้องสร้างขึ้น ด้วยเครื่องมือเชน LLVM GKI เป็นเครื่องมือเชน LLVM ที่ใช้สร้างผลิตภัณฑ์ เคอร์เนลและโมดูลผู้ให้บริการต้องสร้าง ABI เดียวกันกับเครื่องมือเชน LLVM จาก AOSP และพาร์ทเนอร์ต้องตรวจสอบว่า KMI ทำงานร่วมกับเคอร์เนล GKI ได้ ขอแนะนำอย่างยิ่งให้ใช้เครื่องมือสร้างที่มีให้เพราะมี ความเข้ากันได้มากที่สุด
สิ่งต่อไปที่ควรทำ
สำหรับวิธีการสร้างเคอร์เนลโดยใช้กระบวนการสร้างแบบสนิมและ Toolchain ของ LLVM (อ้างอิงถึง) สร้างเคอร์เนล
หากต้องการทราบวิธีตรวจสอบ ABI และแก้ไขปัญหา โปรดดู การตรวจสอบ ABI ของ Kernel ใน Android