หน้านี้อธิบายโปรเจ็กต์ Generic Kernel Image (GKI) และวิธีที่โปรเจ็กต์นี้ช่วยเพิ่มความเสถียรของ Android และปรับปรุงความปลอดภัย
ประวัติ
อุปกรณ์ Android ทุกเครื่องต้องใช้เคอร์เนลเวอร์ชันที่ใช้งานจริง ก่อน GKI นั้น เคอร์เนลจะกำหนดเองและอิงตามเคอร์เนลทั่วไปของ Android (ACK) โดยมีการเปลี่ยนแปลงเฉพาะอุปกรณ์ซึ่งจัดทำโดยผู้ให้บริการระบบบนชิป (SoC) และ OEM
การปรับแต่งนี้อาจส่งผลให้โค้ดเคอร์เนลถึง 50% เป็นโค้ดนอกต้นไม้และไม่ได้มาจากเคอร์เนลหรือ ACK ของ Linux เวอร์ชันที่พัฒนาขึ้นพร้อมกัน ด้วยเหตุนี้ ลักษณะที่กำหนดเองของเคิร์กัลก่อน GKI จึงส่งผลให้เกิดการแยกชิ้นส่วนเคอร์เนลอย่างมาก
ค่าใช้จ่ายของการแยกส่วน
การแยกส่วนเคอร์เนลส่งผลเสียต่อชุมชน Android หลายประการ
การอัปเดตความปลอดภัยต้องใช้แรงงานมาก
ต้องพอร์ตแพตช์ความปลอดภัยที่ระบุไว้ในกระดานข่าวสารความปลอดภัยของ Android (ASB) ไปยังเคอร์เนลของอุปกรณ์แต่ละรุ่น อย่างไรก็ตาม การกระจายการแก้ไขความปลอดภัยไปยังอุปกรณ์ Android ที่มีอยู่นั้นเป็นเรื่องที่มีค่าใช้จ่ายสูงเนื่องจากมีการแยกส่วนเคอร์เนล
การผสานการอัปเดตที่รองรับในระยะยาวทำได้ยาก
รุ่นที่รองรับในระยะยาว (LTS) จะมีการแก้ไขด้านความปลอดภัยและการแก้ไขข้อบกพร่องร้ายแรงอื่นๆ การอัปเดตเป็นเวอร์ชัน LTS อยู่เสมอพิสูจน์แล้วว่าได้ผลดีที่สุดในการแก้ไขข้อบกพร่องด้านความปลอดภัย ในอุปกรณ์ Pixel เราพบว่าปัญหาด้านความปลอดภัยของเคอร์เนล 90% ที่รายงานใน ASB ได้รับการแก้ไขแล้วสำหรับอุปกรณ์ที่อัปเดตอยู่เสมอ
อย่างไรก็ตาม การแก้ไขที่กำหนดเองทั้งหมดในเคอร์เนลของอุปกรณ์ทำให้การผสานการแก้ไข LTS เข้ากับเคอร์เนลของอุปกรณ์เป็นเรื่องยาก
ป้องกันการอัปเกรดรุ่นแพลตฟอร์ม Android
การที่อุปกรณ์ Android มีหลายรุ่นทำให้เพิ่มฟีเจอร์ใหม่ๆ ของ Android ที่ต้องเปลี่ยนแปลงเคอร์เนลลงในอุปกรณ์ที่ใช้งานจริงได้ยาก โค้ดเฟรมเวิร์ก Android ต้องคำนึงถึงตัวแปรต่างๆ ของเคิร์กัล และไม่สามารถอาศัยฟีเจอร์ใหม่ของ Android ที่ติดตั้งใช้งานในเคอร์เนลได้ ซึ่งทำให้นวัตกรรมช้าลงและทำให้โค้ดมีขนาดใหญ่ขึ้นและซับซ้อนขึ้น
การส่งการเปลี่ยนแปลงเคอร์เนลกลับไปให้ Linux เวอร์ชันต้นทางทำได้ยาก
วิธีการดึงแพตช์ไปยังเคอร์เนลเวอร์ชันที่ใช้งานจริงแบบกระจัดกระจายทำให้เกิดความล่าช้าสูงสุด 18 เดือนนับจากเวลาที่ LTS เวอร์ชันหนึ่งๆ พร้อมใช้งานในอัปสตรีม จนถึงเวลาที่พร้อมใช้งานในอุปกรณ์ ความล่าช้าที่นานมากระหว่างรุ่นเคอร์เนลและผลิตภัณฑ์ที่อัปสตรีมทำให้ชุมชน Android ลำบากในการป้อนฟีเจอร์และไดรเวอร์ที่จำเป็นลงในเคอร์เนลที่อัปสตรีม เมื่อผู้ใช้ส่งคำแนะนำสำหรับการปรับปรุงไปแล้ว ฐานโค้ดก็เปลี่ยนแปลงไป ทำให้แสดงความเกี่ยวข้องของแพตช์ได้ยาก
แก้ไขการแยกส่วน: รูปภาพเคอร์เนลทั่วไป
โปรเจ็กต์ Generic Kernel Image (GKI) จัดการการแยกส่วนของเคิร์นเนลโดยการรวมเคอร์เนลหลักและย้ายการรองรับ SoC และบอร์ดออกจากเคอร์เนลหลักไปยังโมดูลของผู้ให้บริการที่โหลดได้ นอกจากนี้ GKI ยังแสดงอินเทอร์เฟซ (KMI) ของโมดูลเคอร์เนลที่เสถียรสำหรับโมดูลของผู้ให้บริการ เพื่อให้อัปเดตโมดูลและเคิร์นเนลได้อิสระ ลักษณะบางอย่างของเคอร์เนล GKI มีดังนี้
- เคอร์เนล GKI สร้างขึ้นจากแหล่งที่มาของ ACK
- เคอร์เนล GKI เป็นไบนารีแบบเคอร์เนลเดียวพร้อมด้วยโมดูลที่โหลดได้ที่เกี่ยวข้องตามสถาปัตยกรรมต่อรุ่น LTS
- เคอร์เนล GKI ได้รับการทดสอบกับแพลตฟอร์ม Android ทุกรุ่นที่รองรับ ACK ที่เกี่ยวข้อง ไม่มีการเลิกใช้งานฟีเจอร์ตลอดอายุการใช้งานของเวอร์ชันเคอร์เนล GKI
- เคอร์เนล GKI จะแสดง KMI ที่เสถียรต่อไดรเวอร์ภายใน LTS หนึ่งๆ
- เคอร์เนล GKI ไม่มีโค้ดเฉพาะ SoC หรือเฉพาะบอร์ด
ดูรูปภาพสถาปัตยกรรม GKI ได้ที่ภาพรวมเคอร์เนล
รูปภาพทั่วไป
สำหรับ Android 12 เป็นต้นไป อุปกรณ์ที่มาพร้อมกับเคอร์เนลเวอร์ชัน 5.10 ขึ้นไปจะต้องมาพร้อมกับเคอร์เนล GKI รุ่นบิลด์อิมเมจเคอร์เนลทั่วไป (GKI) ได้รับการอัปเดตเป็นประจำ รวมถึงมีการอัปเดต LTS และการแก้ไขข้อบกพร่องที่สำคัญเป็นประจำ เนื่องจาก KMI มีการคงความเสถียรของไบนารีไว้ คุณจึงติดตั้งบูตอิมเมจเหล่านี้ได้โดยไม่ต้องเปลี่ยนแปลงอิมเมจของผู้ให้บริการ โปรเจ็กต์ GKI มีเป้าหมายดังนี้
- อย่าทําให้ประสิทธิภาพหรือกำลังการประมวลผลลดลงอย่างมีนัยสำคัญเมื่อแทนที่เคอร์เนลของผลิตภัณฑ์ด้วยเคอร์เนล GKI
- ช่วยให้พาร์ทเนอร์สามารถส่งการแก้ไขความปลอดภัยของเคอร์เนลและการแก้ไขข้อบกพร่องได้โดยไม่ต้องให้ผู้ให้บริการเข้ามาเกี่ยวข้อง
- ลดต้นทุนในการอัปเกรดเวอร์ชันหลักของเคิร์นเนลสำหรับอุปกรณ์
- ดูแลรักษาไบนารีเคอร์เนล GKI รายการเดียวต่อสถาปัตยกรรมโดยการอัปเดตเวอร์ชันเคอร์เนลด้วยกระบวนการอัปเกรดที่ชัดเจน