รักษาอินเทอร์เฟซโมดูลเคอร์เนลให้เสถียร

สิ่งสำคัญคือต้องรักษาอินเทอร์เฟซโมดูลเคอร์เนล (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
  • มีการใช้เฉพาะเครื่องมือ Clang ที่เฉพาะเจาะจงซึ่งให้มาใน AOSP และกำหนดไว้สำหรับสาขาที่เกี่ยวข้องในการสร้างเคอร์เนลและโมดูล

  • ระบบจะตรวจสอบเฉพาะสัญลักษณ์ที่ทราบว่าโมดูลใช้ตามที่ระบุไว้ในรายการสัญลักษณ์เพื่อดูความเสถียรและพิจารณาว่าเป็นสัญลักษณ์ KMI

    • ผลที่ตามมาคือข้อบังคับว่าโมดูลของผู้ให้บริการต้องใช้สัญลักษณ์ KMI เท่านั้น ระบบจะบังคับใช้ข้อจำกัดนี้โดยการโหลดโมดูลไม่สำเร็จหากต้องใช้สัญลักษณ์ที่ไม่ใช่ KMI
  • หลังจากแช่แข็งสาขา KMI แล้ว ระบบจะอนุญาตให้ทำการเปลี่ยนแปลงได้ แต่จะเปลี่ยนแปลงในลักษณะที่ทำลาย KMI ไม่ได้ การเปลี่ยนแปลงดังกล่าวรวมถึงสิ่งต่อไปนี้

    • การเปลี่ยนแปลงการกําหนดค่า
    • การเปลี่ยนแปลงโค้ดเคอร์เนล
    • การเปลี่ยนแปลงใน Toolchain (รวมถึงการอัปเดต)

ใช้กระบวนการบิลด์แบบปิดผนึกและชุดเครื่องมือ LLVM

กระบวนการสร้างแบบปิดผนึกช่วยให้มั่นใจได้ว่า KMI จะเสถียรเนื่องจากrepoไฟล์ Manifest ใน 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 สำหรับอินเทอร์เฟซโมดูลเคอร์เนล (KMI) อยู่ในที่เก็บซึ่งอธิบายโดยไฟล์ Manifest ด้วย

เครื่องมือที่ใช้สร้างเคอร์เนล GKI ต้องเข้ากันได้กับเครื่องมือที่ใช้สร้างโมดูลของผู้ให้บริการอย่างสมบูรณ์ ตั้งแต่ Android 10 เป็นต้นไป จะต้องสร้างเคอร์เนล Android ทั้งหมดด้วยชุดเครื่องมือ LLVM เมื่อใช้ GKI เครื่องมือ LLVM ที่ใช้ในการสร้างเคอร์เนลของผลิตภัณฑ์และโมดูลผู้ให้บริการต้องสร้าง ABI เดียวกับเครื่องมือเชน LLVM จาก AOSP และพาร์ทเนอร์ต้องตรวจสอบว่า KMI เข้ากันได้กับเคอร์เนล GKI เราขอแนะนำให้ใช้เครื่องมือสร้างที่ให้มา เนื่องจากเครื่องมือเหล่านี้มีความเข้ากันได้ดีที่สุด

สิ่งต่อไปที่ควรทำ