โปรเจ็กต์อิมเมจเคอร์เนลทั่วไป (GKI)

หน้านี้อธิบายโปรเจ็กต์ Generic Kernel Image (GKI) และวิธีที่โปรเจ็กต์นี้ช่วยเพิ่มความเสถียรของ Android และปรับปรุงการรักษาความปลอดภัย

ประวัติ

อุปกรณ์ทุกเครื่องที่ใช้ Android ต้องมีเคอร์เนลเวอร์ชันที่ใช้งานจริง ก่อน GKI เคอร์เนล เป็นแบบกำหนดเองและอิงตาม Android Common Kernel (ACK) โดยมีการเปลี่ยนแปลง เฉพาะอุปกรณ์ที่ดำเนินการโดยผู้จำหน่ายระบบวงจรรวมบนชิป (SoC) และ OEM

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

ค่าใช้จ่ายในการแยกส่วน

การแยกส่วนเคอร์เนลส่งผลเสียหลายประการต่อชุมชน Android

การอัปเดตความปลอดภัยต้องใช้แรงงานจำนวนมาก

ต้องมีการพอร์ตแพตช์ความปลอดภัยที่อ้างอิงใน กระดานข่าวความปลอดภัยของ Android (ASB) กลับไปยังเคอร์เนลของอุปกรณ์แต่ละเครื่อง อย่างไรก็ตาม เนื่องจากเคอร์เนล มีการกระจายตัว การเผยแพร่การแก้ไขด้านความปลอดภัยไปยัง อุปกรณ์ Android ในภาคสนามจึงมีค่าใช้จ่ายสูงมาก

การผสานรวมการอัปเดตที่รองรับระยะยาวทำได้ยาก

รุ่นที่รองรับระยะยาว (LTS) มีการแก้ไขด้านความปลอดภัยและ การแก้ไขข้อบกพร่องที่สำคัญอื่นๆ การอัปเดตเวอร์ชัน LTS อยู่เสมอเป็นวิธีที่มีประสิทธิภาพมากที่สุดในการแก้ไขด้านความปลอดภัย ในอุปกรณ์ Pixel เราพบว่าปัญหาด้านความปลอดภัยของเคอร์เนล 90% ที่รายงานใน ASB ได้รับการแก้ไขแล้วสำหรับอุปกรณ์ที่อัปเดตอยู่เสมอ

อย่างไรก็ตาม การแก้ไขที่กำหนดเองทั้งหมดในเคอร์เนลของอุปกรณ์ทำให้การผสานรวมการแก้ไข LTS เข้ากับเคอร์เนลของอุปกรณ์เป็นเรื่องยาก

ยับยั้งการอัปเกรดรุ่นของแพลตฟอร์ม Android

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

ส่งการเปลี่ยนแปลงเคอร์เนลกลับไปยัง Linux ต้นทางได้ยาก

การดึงแพตช์ไปยังเคอร์เนลเวอร์ชันที่ใช้งานจริงแบบแยกส่วนทำให้เกิด ความล่าช้าสูงสุด 18 เดือนนับจากจุดที่ LTS พร้อมใช้งาน ในต้นทางจนถึงเวลาที่อยู่ในอุปกรณ์ ความล่าช้าที่ยาวนานระหว่างการเผยแพร่เคอร์เนลต้นทางกับผลิตภัณฑ์ทำให้ชุมชน Android ป้อนฟีเจอร์และไดรเวอร์ที่จำเป็นลงในเคอร์เนลต้นทางได้ยาก เมื่อผู้ใช้ส่งคำแนะนำในการปรับปรุง ฐานโค้ดมีการเปลี่ยนแปลงแล้ว ทำให้แสดงความเกี่ยวข้องของแพตช์ได้ยาก

แก้ไขการแยกส่วน: รูปภาพเคอร์เนลทั่วไป

โปรเจ็กต์ Generic Kernel Image (GKI) แก้ปัญหาการแยกส่วนของเคอร์เนลโดย รวมเคอร์เนลหลักและย้ายการรองรับ SoC และบอร์ดออกจากเคอร์เนลหลัก ไปยังโมดูลของผู้ให้บริการที่โหลดได้ นอกจากนี้ GKI ยังมี Kernel Module Interface (KMI) ที่เสถียรสำหรับโมดูลของผู้ให้บริการด้วย เพื่อให้สามารถอัปเดตโมดูลและเคอร์เนล แยกกันได้ ลักษณะบางอย่างของเคอร์เนล GKI มีดังนี้

  • เคอร์เนล GKI สร้างจากแหล่งที่มาของ ACK
  • เคอร์เนล GKI เป็นไบนารีเคอร์เนลเดียวและโมดูลที่โหลดได้ที่เกี่ยวข้อง ต่อสถาปัตยกรรม ต่อรุ่น LTS
  • ระบบจะทดสอบเคอร์เนล GKI กับ Android Platform ทุกรุ่นที่ รองรับ ACK ที่ เกี่ยวข้อง ไม่มีการเลิกใช้งานฟีเจอร์ตลอดอายุการใช้งานของเคอร์เนลเวอร์ชัน GKI
  • เคอร์เนล GKI จะแสดง KMI ที่เสถียรต่อไดรเวอร์ภายใน LTS ที่กำหนด
  • เคอร์เนล GKI ไม่มีโค้ดที่เฉพาะเจาะจง SoC หรือบอร์ด

ดูรูปภาพสถาปัตยกรรม GKI ได้ที่ ภาพรวมของเคอร์เนล

รูปภาพทั่วไป

ตั้งแต่ Android 12 เป็นต้นไป อุปกรณ์ที่จัดส่งพร้อมเคอร์เนลเวอร์ชัน 5.10 ขึ้นไป ต้องจัดส่งพร้อมเคอร์เนล GKI รุ่น Generic Kernel Image (GKI) builds จะได้รับการอัปเดตเป็นประจำ และได้รับการอัปเดตเป็นประจำด้วย LTS และการแก้ไขข้อบกพร่องที่สำคัญ เนื่องจาก KMI มีความเสถียรของไบนารี คุณจึงติดตั้งอิมเมจการบูตเหล่านี้ได้โดยไม่ต้องทำการเปลี่ยนแปลงอิมเมจของผู้ให้บริการ โปรเจ็กต์ GKI มีเป้าหมายดังนี้

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