การรักษา KMI ให้คงที่สำหรับโมดูลผู้ขายถือเป็นสิ่งสำคัญ เคอร์เนล GKI ถูกสร้างและจัดส่งในรูปแบบไบนารีและโมดูลที่ผู้ขายโหลดได้นั้นสร้างขึ้นในโครงสร้างที่แยกจากกัน เคอร์เนล GKI และโมดูลผู้ขายที่เป็นผลลัพธ์ต้องทำงานราวกับว่าสร้างขึ้นร่วมกัน
โดยทั่วไป ชุมชน Linux ได้ ขมวดคิ้วกับแนวคิดเรื่องความเสถียรของ ABI ในเคอร์เนล สำหรับเคอร์เนลหลัก เมื่อเผชิญกับ toolchains การกำหนดค่าต่างๆ และเคอร์เนล mainline ของ Linux ที่เปลี่ยนแปลงตลอดเวลา การรักษา KMI ที่เสถียรใน mainline นั้นไม่สามารถทำได้ อย่างไรก็ตาม เป็นไปได้ที่จะรักษา 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 toolchain
กระบวนการบิลด์แบบสุญญากาศช่วยให้มั่นใจถึง KMI ที่เสถียรโดยการแสดงรายการ repo
ใน kernel/manifest
ที่อธิบายสภาพแวดล้อมการสร้างอย่างสมบูรณ์ ตัวอย่างเช่น ไฟล์ Manifest สำหรับ android13-5.15
ประกอบด้วย toolchain สคริปต์สำหรับสร้าง และทุกอย่างที่จำเป็นในการสร้างเคอร์เนล Generic Kernel Image (GKI) ไฟล์คอนฟิกูเรชัน build.config
ที่เกี่ยวข้อง เช่น GKI build config build.config.gki.aarch64
ตรวจสอบให้แน่ใจว่าใช้เครื่องมือที่รวมไว้อย่างถูกต้องเพื่อสร้างผลลัพธ์ของบิลด์ที่สอดคล้องกัน
การใช้กระบวนการบิลด์แบบสุญญากาศยังช่วยให้แน่ใจว่าคำอธิบาย ABI สำหรับแผนผังนั้นสอดคล้องกันไม่ว่าจะสร้างโดย Google (เช่น abi_gki_aarch64.xml
สำหรับ android13-5.15
หรือสร้างขึ้นในทรีโลคัลที่มีโมดูลผู้ขายด้วย) เครื่องมือในการสร้างและเปรียบเทียบ คำอธิบาย ABI สำหรับ Kernel Module Interface (KMI) ยังให้ไว้เป็นส่วนหนึ่งของ repo ที่อธิบายโดย manifest
toolchain ที่ใช้สร้างเคอร์เนล GKI ต้องเข้ากันได้กับ toolchain ที่ใช้สร้างโมดูลผู้ขายอย่างสมบูรณ์ ตั้งแต่ Android 10 เป็นต้นไป เคอร์เนล Android ทั้งหมดจะต้องสร้างด้วย LLVM toolchain ด้วย GKI ชุดเครื่องมือ LLVM ที่ใช้สร้างเคอร์เนลผลิตภัณฑ์และโมดูลผู้ขายต้องสร้าง ABI เดียวกันกับชุดเครื่องมือ LLVM จาก AOSP และพาร์ทเนอร์ต้องมั่นใจว่า KMI เข้ากันได้กับเคอร์เนล GKI ขอแนะนำให้ใช้เครื่องมือสร้างที่ให้มาเนื่องจากมีการรับประกันความเข้ากันได้
อะไรต่อไป?
สำหรับคำแนะนำในการสร้างเคอร์เนลโดยใช้กระบวนการบิลด์แบบสุญญากาศและ LLVM toolchain โปรดดูที่ Build kernels
สำหรับคำแนะนำเกี่ยวกับวิธีการตรวจสอบ ABI และแก้ไขปัญหา โปรดดูที่ Android Kernel ABI Monitoring