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

การรักษาอินเทอร์เฟซโมดูลเคอร์เนล (KMI) ที่เสถียรสำหรับโมดูลของผู้ให้บริการเป็นสิ่งสําคัญ มีการคอมไพล์เคอร์เนล GKI และจัดส่งในรูปแบบไบนารี รวมถึงสร้างโมดูลที่โหลดได้ของผู้จำหน่ายในต้นไม้แยกต่างหาก เคอร์เนล GKI และโมดูลของผู้ให้บริการที่ได้ต้องทํางานราวกับว่าสร้างขึ้นด้วยกัน

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

  • คุณใช้การกำหนดค่า gki_defconfig เพียงรายการเดียวเพื่อสร้างเคอร์เนลได้

  • KMI จะเสถียรเฉพาะในเคอร์เนลเวอร์ชัน LTS และ Android เดียวกัน เช่น android14-6.1, android15-6.6 หรือ android16-6.12

    • ไม่มีความเสถียรของ KMI สำหรับ android-mainline
  • มีการใช้เฉพาะเครื่องมือ Clang ที่เฉพาะเจาะจงซึ่งให้มาใน AOSP และกำหนดไว้สำหรับสาขาที่เกี่ยวข้องในการสร้างเคอร์เนลและโมดูล

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

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

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

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

กระบวนการสร้างแบบปิดผนึกช่วยให้มั่นใจได้ว่า KMI จะเสถียรเนื่องจากrepoไฟล์ Manifest ใน kernel/manifestจะอธิบายสภาพแวดล้อมการสร้างอย่างสมบูรณ์ เช่น ไฟล์ Manifest สำหรับ android16-6.12 ประกอบด้วยชุดเครื่องมือ ระบบการสร้าง และทุกอย่างที่จำเป็นในการสร้างเคอร์เนล Generic Kernel Image (GKI) การกําหนดค่าบิลด์ ซึ่งส่วนใหญ่คือ BUILD.bazel จะตรวจสอบว่าใช้เครื่องมือที่รวมไว้อย่างถูกต้องเพื่อสร้างผลลัพธ์การสร้างที่สอดคล้องกัน

การใช้กระบวนการบิลด์แบบปิดผนึกยังช่วยให้มั่นใจได้ว่าคำอธิบาย ABI สำหรับต้นไม้จะสอดคล้องกันไม่ว่าจะสร้างขึ้นโดย Google (เช่น gki/aarch64/abi.stg สำหรับ android16-6.12) หรือสร้างขึ้นในต้นไม้ในเครื่องซึ่งมีโมดูลของผู้ให้บริการ นอกจากนี้ยังมีเครื่องมือสร้างและเปรียบเทียบคำอธิบาย ABI สำหรับอินเทอร์เฟซโมดูลเคอร์เนล (KMI) อยู่ในที่เก็บซึ่งอธิบายโดยไฟล์ Manifest ด้วย

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

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