ภาพรวมโมดูลเคอร์เนล

โมดูลเคอร์เนลมี 2 ประเภท ได้แก่ โมดูล GKI ที่ไม่ขึ้นอยู่กับฮาร์ดแวร์ และโมดูลของผู้ให้บริการเฉพาะสำหรับฮาร์ดแวร์ หน้านี้จะแสดงภาพรวมของข้อบังคับทั้ง 2 ประเภท

โมดูล GKI

โมดูลอิมเมจเคอร์เนลทั่วไป (GKI) ใช้เพื่อส่งมอบความสามารถของเคิร์นัลที่ไม่ต้องใช้การบูตแยกต่างหากจากเคอร์เนลหลักทั่วไป โมดูล GKI ช่วยให้คุณเลือกความสามารถของเคอร์เนลที่ต้องการใช้ได้ ซึ่งมักจะช่วยลดขนาดของภาพเคอร์เนลและการใช้หน่วยความจำรันไทม์ การลดขนาดทำให้ GKI เหมาะสําหรับอุปกรณ์ Android Go และอุปกรณ์รูปแบบอื่นๆ ที่มีทรัพยากรจํากัด

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

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

โมดูล GKI มี 2 ประเภท ได้แก่ โมดูล GKI ที่มีการป้องกันและโมดูล GKI ที่ไม่มีการป้องกัน

โมดูล GKI ที่มีการป้องกัน

โมดูล GKI ที่ปกป้องจะส่งโดย Google โดยไม่มีข้อจำกัดใดๆ และทำงานเหมือนกับว่าสร้างขึ้นด้วยเคอร์เนลหลังจากโหลด นอกจากนี้ โมดูล GKI ที่ปกป้องแล้วยังมีลักษณะต่อไปนี้

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

โมดูล GKI ที่มีการป้องกันคือคลาสเริ่มต้นของโมดูล GKI ระบบจะถือว่าข้อบังคับของ GKI ทั้งหมดได้รับการปกป้อง ณ เวลาที่หยุด KMI

โมดูล GKI ที่ไม่มีการป้องกัน

โมดูลผู้ให้บริการลบล้างโมดูล GKI ที่ไม่มีการป้องกันได้ หลังจากหยุดให้บริการ KMI แล้ว โมดูล GKI ที่ปกป้องไว้อาจได้รับการจัดประเภทใหม่ว่าไม่ได้รับการปกป้องหากทีม GKI ตัดสินใจว่าผู้ให้บริการต้องลบล้างการติดตั้งใช้งานเริ่มต้นด้วยเวอร์ชันที่มีฟีเจอร์ใหม่จาก Linux เวอร์ชันที่พัฒนาขึ้น ในรุ่น GKI ถัดไป ระบบจะจัดประเภทโมดูลที่ไม่มีการป้องกันใหม่เป็น "มีการป้องกัน" หลังจากที่โค้ดจาก upstream เข้าสู่ Android Common Kernel (ACK) โมดูล GKI ที่ไม่มีการป้องกันมีลักษณะดังนี้

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

โมดูลของผู้ให้บริการ

พาร์ทเนอร์จะส่งโมดูลของผู้ให้บริการเพื่อใช้ความสามารถของ SoC และความสามารถเฉพาะอุปกรณ์ โมดูลเคอร์เนลที่มีอยู่ซึ่งไม่ได้นำส่งเป็นส่วนหนึ่งของเคอร์เนล GKI นำส่งเป็นโมดูลผู้ให้บริการได้

เนื่องจากเป้าหมายหลักประการหนึ่งของโปรเจ็กต์ GKI คือการลดโค้ดเฉพาะฮาร์ดแวร์ในเคอร์เนลหลัก ผู้ให้บริการจึงมั่นใจได้ว่าเคอร์เนล GKI จะไม่รวมโมดูลที่จัดการฮาร์ดแวร์ของตนเองอย่างชัดเจน ตัวอย่างเช่น ผู้ให้บริการ ABC Inc. อาจคาดหวังว่าการกําหนดค่า เช่น CONFIG_ABC_SOC_SUPPORT จะเปิดใช้ไม่ได้ไม่ว่าจะเป็นโมดูล GKI ในตัวหรือที่โหลดได้ หากไม่มีการสนับสนุนจากผู้ให้บริการ

หากมีไดรเวอร์หรือเฟรมเวิร์กเคอร์เนลใน ACK แต่ไม่ได้ส่งเป็นส่วนหนึ่งของเคอร์เนล GKI เวนเดอร์จะแก้ไขไดรเวอร์และส่งเป็นโมดูลเวนเดอร์ได้ ไม่แนะนําให้แก้ไขโมดูลที่ไม่ใช่ของผู้ให้บริการ เนื่องจากความสามารถเดียวกันนี้อาจมาพร้อมกับเคอร์เนล GKI ในรุ่นถัดไป เมื่อเคอร์เนล GKI มีความสามารถที่โมดูลของผู้ให้บริการให้ไว้ โมดูลของผู้ให้บริการจะไม่โหลด เช่น CONFIG_GREYBUS ไม่ได้ตั้งค่าสำหรับ GKI ใน Android 11 ดังนั้นผู้ให้บริการจึงอาจส่งโมดูลผู้ให้บริการ Greybus อย่างไรก็ตาม ระบบอาจเปิดใช้ CONFIG_GREYBUS เป็น GKI ในตัวหรือเป็นโมดูลใน Android 12 ซึ่งในกรณีนี้ระบบจะไม่โหลดโมดูลของผู้ให้บริการ Greybus แนวทางปฏิบัติแนะนำคือให้ใช้ไดรเวอร์เวอร์ชันอัปสตรีมที่ไม่เจาะจงผู้ให้บริการ หากมีการนําส่งเป็นข้อบังคับของผู้ให้บริการ

คุณนำส่งโมดูลผู้ให้บริการได้ใน vendor หรือรูปภาพ vendor_boot โมดูลที่จําเป็นในช่วงต้นของกระบวนการบูตต้องอยู่ใน vendor_boot โหลดโมดูลจาก vendor_boot จะมีค่าใช้จ่ายที่เกี่ยวข้องกับเวลาในการบูต