เคอร์เนลของผลิตภัณฑ์หรือที่เรียกว่าเคอร์เนลของอุปกรณ์หรือเคอร์เนล OEM คือเคอร์เนลที่คุณจัดส่งในอุปกรณ์ ก่อนที่จะมี GKI เคอร์เนลของผลิตภัณฑ์ได้มาจากชุดการเปลี่ยนแปลงเคอร์เนลอัปสตรีม รูปที่ 1 แสดงวิธีที่การเพิ่มเคอร์เนลทำให้ได้เคอร์เนลของผลิตภัณฑ์ (เคอร์เนล OEM/อุปกรณ์)
รูปที่ 1 การสร้างเคอร์เนลผลิตภัณฑ์ก่อน GKI
- มีการแก้ไขเคอร์เนล Linux Long Term Supported (LTS) จาก kernel.org ด้วยแพตช์เฉพาะ Android ส่งผลให้เกิด Android Common Kernel (ACK)
- ACK ได้รับการแก้ไขโดยผู้ให้บริการที่เพิ่มการรองรับระบบบนชิป (SoC) ผู้ให้บริการอาจเพิ่มการเพิ่มประสิทธิภาพหรือการเพิ่มกำลังไฟฟ้าด้วย เคอร์เนลที่แสดงผลอยู่เรียกว่าเคอร์เนลของผู้ให้บริการ
- สุดท้าย OEM ได้แก้ไขเคอร์เนลของผู้ให้บริการเพิ่มเติมด้วยโปรแกรมควบคุมอุปกรณ์และการปรับเปลี่ยนเพิ่มเติมตามที่เห็นว่าจำเป็น เคอร์เนลที่ได้จะเรียกว่าเคอร์เนลของผลิตภัณฑ์
การแก้ไขทั้งหมดนี้อาจส่งผลให้รหัสเคอร์เนลมากถึง 50% เป็นโค้ดแบบไม่อยู่ในโครงสร้าง และไม่ได้มาจากเคอร์เนลต้นทางของ Linux หรือ ACK ก่อนที่จะมี GKI อุปกรณ์เกือบทุกเครื่องมีเคอร์เนลที่กำหนดเองซึ่งส่งผลให้เกิดการแยกชิ้นส่วนเคอร์เนล
ค่าใช้จ่ายของการแยกส่วน
การแยกส่วนเคอร์เนลส่งผลเสียต่อชุมชน Android หลายประการ
การอัปเดตความปลอดภัยต้องใช้แรงงานมาก
ต้องพอร์ตแพตช์ความปลอดภัยที่ระบุไว้ในกระดานข่าวสารความปลอดภัยของ Android (ASB) ไปยังเคอร์เนลของอุปกรณ์แต่ละรุ่น อย่างไรก็ตาม การกระจายการแก้ไขความปลอดภัยไปยังอุปกรณ์ Android ที่มีอยู่นั้นเป็นเรื่องที่มีค่าใช้จ่ายสูงเนื่องจากมีการแยกส่วนเคอร์เนล
การผสานการอัปเดตที่รองรับในระยะยาวทำได้ยาก
เวอร์ชันมีการสนับสนุนระยะยาว (LTS) จะมีการแก้ไขด้านความปลอดภัยและการแก้ไขข้อบกพร่องที่สำคัญอื่นๆ การอัปเดตเวอร์ชัน LTS ล่าสุดได้รับการพิสูจน์แล้วว่าเป็นวิธีที่มีประสิทธิภาพมากที่สุดในการแก้ไขด้านความปลอดภัย ในอุปกรณ์ Pixel เราพบว่าปัญหาด้านความปลอดภัยของเคอร์เนล 90% ที่รายงานใน ASB ได้รับการแก้ไขแล้วสำหรับอุปกรณ์ที่อัปเดตอยู่เสมอ
อย่างไรก็ตาม การแก้ไขที่กำหนดเองทั้งหมดในเคอร์เนลของอุปกรณ์ทำให้การผสานการแก้ไข LTS เข้ากับเคอร์เนลของอุปกรณ์เป็นเรื่องยาก
ยับยั้งการอัปเกรดรุ่นแพลตฟอร์ม Android
การกระจายตัวทำให้เพิ่มฟีเจอร์ใหม่ของ Android ที่ต้องเปลี่ยนแปลงเคอร์เนลลงในอุปกรณ์ภาคสนามได้ยาก โค้ด Android Framework ต้องสันนิษฐานว่ามีเคอร์เนลที่รองรับได้สูงสุด 5 เวอร์ชัน และไม่มีการเปลี่ยนแปลงเคอร์เนลสำหรับแพลตฟอร์มรุ่นใหม่ (Android 10 รองรับ 3.18, 4.4, 4.9, 4.14 และ 4.19 ซึ่งในบางกรณีก็ไม่ได้ปรับปรุงด้วยฟีเจอร์ใหม่ๆ ตั้งแต่ Android 8 ในเวอร์ชัน 20)
การส่งการเปลี่ยนแปลงเคอร์เนลกลับไปให้ Linux เวอร์ชันต้นทางทำได้ยาก
เมื่อมีการเปลี่ยนแปลงทั้งหมดในเคอร์เนล อุปกรณ์เรือธงส่วนใหญ่จะมาพร้อมกับเคอร์เนลเวอร์ชันที่มีอายุอย่างน้อย 18 เดือน ตัวอย่างเช่น kernel.org
เปิดตัวเคอร์เนล 4.14 ในเดือนพฤศจิกายน 2017 และโทรศัพท์ Android รุ่นแรกที่ใช้เคอร์เนล 4.14 ซึ่งจัดส่งในฤดูใบไม้ผลิปี 2019
ความล่าช้าที่ยาวนานระหว่างการเผยแพร่เคอร์เนลอัปสตรีมและผลิตภัณฑ์ทำให้ชุมชน Android ป้อนข้อมูลฟีเจอร์และไดรเวอร์ที่จำเป็นลงในเคอร์เนลอัปสตรีมได้ยาก
แก้ไขการแยกส่วน: รูปภาพเคอร์เนลทั่วไป
โปรเจ็กต์ Generic Kernel Image (GKI) จัดการการแยกส่วนของเคิร์นเนลโดยการรวมเคอร์เนลหลักและย้ายการรองรับ SoC และบอร์ดออกจากเคอร์เนลหลักไปยังโมดูลของผู้ให้บริการที่โหลดได้ นอกจากนี้ GKI ยังแสดงอินเทอร์เฟซโมดูลเคอร์เนล (KMI) ที่เสถียรสำหรับโมดูลของผู้ให้บริการ เพื่อให้อัปเดตโมดูลและเคิร์นเนลได้อิสระ ลักษณะบางอย่างของเคอร์เนล GKI มีดังนี้
- เคอร์เนล GKI สร้างขึ้นจากแหล่งที่มาของ ACK
- เคอร์เนล GKI คือไบนารีของเคอร์เนลเดี่ยวและโมดูลที่เกี่ยวข้องซึ่งโหลดได้ต่อสถาปัตยกรรมตามรุ่น LTS (ขณะนี้มีเพียง arm64 สำหรับ
android11-5.4
และandroid12-5.4
) - เคอร์เนล GKI ได้รับการทดสอบกับแพลตฟอร์ม Android ทุกรุ่นที่รองรับ ACK ที่เกี่ยวข้อง ไม่มีการเลิกใช้งานฟีเจอร์ตลอดอายุการใช้งานของเวอร์ชันเคอร์เนล GKI
- เคอร์เนล GKI จะแสดง KMI ที่เสถียรต่อไดรเวอร์ภายใน LTS หนึ่งๆ
- เคอร์เนล GKI ไม่มีโค้ดสำหรับ SoC หรือบอร์ดโดยเฉพาะ
ดูรูปภาพของสถาปัตยกรรม GKI ได้ที่ภาพรวมเคอร์เนล
GKI เป็นการเปลี่ยนแปลงที่ซับซ้อนซึ่งเปิดตัวในหลายระยะ โดยเริ่มจากเคอร์เนล v5.4 ในรุ่นแพลตฟอร์ม Android 11
GKI มี 2 ระยะดังนี้
- GKI 1.0 เปิดตัวใน Android 11 สำหรับอุปกรณ์ที่มีเคอร์เนล 5.4 GKI 1.0 มีผลกับอุปกรณ์ทั้งหมดที่มาพร้อมกับเคอร์เนล 5.4 แม้ว่าจะเป็นอุปกรณ์ที่เปิดตัวมาพร้อมกับ Android 12 หรือ Android 13 ก็ตาม
- GKI 2.0 เปิดตัวใน Android 12 สำหรับอุปกรณ์ที่ใช้เคอร์เนล 5.10 และเป็นมาตรฐานใหม่สำหรับอุปกรณ์ทั้งหมดที่มาพร้อมกับเคอร์เนล 5.10 ขึ้นไป
GKI 1.0
ใน GKI 1.0 อุปกรณ์ที่เปิดตัวด้วยเคอร์เนลเวอร์ชัน 5.4 ต้องผ่านการทดสอบ GKI (แพลตฟอร์ม Android 11 ขึ้นไป) เป้าหมายของ GKI 1.0 มีดังนี้
- หลีกเลี่ยงการถดถอยใน Vendor Test Suite (VTS) หรือCompatibility Test Suite (CTS) เมื่อเปลี่ยนเคอร์เนลของผลิตภัณฑ์เป็นเคอร์เนล GKI
- ลดความยุ่งยากของพาร์ทเนอร์ในการดูแลรักษาเคอร์เนลให้ทันสมัยอยู่เสมอด้วยเคอร์เนลทั่วไปของ AOSP
- รวมการเปลี่ยนแปลงหลักของ Android ในเคอร์เนลสำหรับอุปกรณ์ที่อัปเกรดและเปิดตัวด้วย Android เวอร์ชันใหม่
- อย่าทำให้พื้นที่ผู้ใช้ Android เสียหาย
- แยกคอมโพเนนต์เฉพาะฮาร์ดแวร์ออกจากเคอร์เนลหลักเป็นโมดูลที่โหลดได้
สำหรับเอกสารเกี่ยวกับ GKI 1.0 โปรดดู ส่วน GKI 1.0
GKI 2.0
ใน GKI 2.0 อุปกรณ์ที่เปิดตัวด้วยเคอร์เนลเวอร์ชัน 5.10 ขึ้นไปต้องมาพร้อมกับเคอร์เนล GKI (เริ่มต้นด้วย Android 12) บูต อิมเมจที่เซ็นชื่อพร้อมใช้งานและได้รับการอัปเดตเป็นประจำด้วย LTS และการแก้ไขข้อบกพร่องที่สำคัญ เนื่องจาก KMI มีการคงความเสถียรของไบนารีไว้ คุณจึงติดตั้งบูตอิมเมจเหล่านี้ได้โดยไม่ต้องเปลี่ยนแปลงอิมเมจของผู้ให้บริการ เป้าหมายของ GKI 2.0 มีดังนี้
- อย่าทำให้เกิดการถดถอยด้านประสิทธิภาพหรือพลังงานที่มีนัยสำคัญเมื่อแทนที่เคอร์เนลของผลิตภัณฑ์ด้วยเคอร์เนล GKI
- ช่วยให้พาร์ทเนอร์ส่งการแก้ไขด้านความปลอดภัยของเคอร์เนลและแก้ไขข้อบกพร่องได้โดยไม่ต้องให้ผู้ให้บริการมีส่วนเกี่ยวข้อง
- ลดค่าใช้จ่ายในการอัปเดตเวอร์ชันเคอร์เนลหลักสำหรับอุปกรณ์ (เช่น จากเวอร์ชัน 5.10 เป็นเคอร์เนล LTS 2021)
- รักษาไบนารีของเคอร์เนล GKI เดียวต่อสถาปัตยกรรมด้วยการอัปเดตเวอร์ชันเคอร์เนลที่มีขั้นตอนการอัปเกรดที่ชัดเจน
GKI 2.0 แสดงสถานะล่าสุดของเคอร์เนล Android เอกสารประกอบเกี่ยวกับเคอร์เนลที่อยู่นอกส่วนย่อย GKI 1.0 และเคอร์เนลเวอร์ชันก่อนหน้า (<=4.19) แสดงถึงสถาปัตยกรรม GKI 2.0