รักษา Kernel Module Interface (KMI) ที่เสถียร

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

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

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

  • KMI จะเสถียรเฉพาะภายในเคอร์เนล LTS และ Android เวอร์ชันเดียวกันเท่านั้น เช่น android13-5.10 , android12-5.10 หรือ android13-5.15

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

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

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

    • เปลี่ยนแปลงการกำหนดค่า
    • การเปลี่ยนแปลงรหัสเคอร์เนล
    • การเปลี่ยนแปลง Toolchain (รวมถึงการอัพเดต)

ใช้กระบวนการสร้างสุญญากาศและ toolchain LLVM

กระบวนการสร้างที่ปิดสนิททำให้ KMI มีความเสถียรโดยการมีรายการ repo ใน kernel/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 ทั้งหมดจะต้องสร้างด้วย Toolchain LLVM ด้วย GKI ห่วงโซ่เครื่องมือ LLVM ที่ใช้ในการสร้างเคอร์เนลผลิตภัณฑ์และโมดูลผู้ขายจะต้องสร้าง ABI เดียวกันกับห่วงโซ่เครื่องมือ LLVM จาก AOSP และคู่ค้าจะต้องตรวจสอบให้แน่ใจว่า KMI เข้ากันได้กับเคอร์เนล GKI ขอแนะนำให้ใช้เครื่องมือสร้างที่ให้มาเนื่องจากรับประกันความเข้ากันได้

อะไรต่อไป?

  • สำหรับคำแนะนำในการสร้างเคอร์เนลโดยใช้กระบวนการสร้างสุญญากาศและ toolchain LLVM โปรดดูที่ Build Kernels

  • หากต้องการคำแนะนำเกี่ยวกับวิธีตรวจสอบ ABI และแก้ไขปัญหา โปรดดูที่ การตรวจสอบ ABI เคอร์เนลของ Android