เคอร์เนลผลิตภัณฑ์ หรือที่เรียกว่า เคอร์เนลอุปกรณ์ หรือ เคอร์เนล OEM เป็นเคอร์เนลที่คุณจัดส่งบนอุปกรณ์ของคุณ ก่อน GKI เคอร์เนลผลิตภัณฑ์ได้มาจากชุดของการเปลี่ยนแปลงเคอร์เนลอัปสตรีม รูปที่ 1 แสดงให้เห็นว่าการเพิ่มเคอร์เนลทำให้ได้เคอร์เนลผลิตภัณฑ์อย่างไร (OEM/เคอร์เนลอุปกรณ์):
รูปที่ 1 การสร้างเคอร์เนลผลิตภัณฑ์ก่อน GKI
- เคอร์เนล Linux Long Term Supported (LTS) จาก kernel.org ได้รับการแก้ไขด้วยแพตช์เฉพาะของ Android ส่งผลให้เป็น Android Common Kernel (ACK)
- ACK ได้รับการแก้ไขโดยผู้ขายที่เพิ่มการรองรับสำหรับ System-on-a-Chip (SoC) ของพวกเขา ผู้ขายอาจเพิ่มประสิทธิภาพหรือเพิ่มประสิทธิภาพพลังงาน เคอร์เนลผลลัพธ์เรียกว่า เคอร์เนลผู้ขาย
- ในที่สุด เคอร์เนลของผู้จำหน่ายได้รับการแก้ไขเพิ่มเติมโดย OEM ด้วยไดรเวอร์อุปกรณ์เพิ่มเติมและการปรับแต่งที่พวกเขาเห็นว่าจำเป็น เคอร์เนลผลลัพธ์เรียกว่า เคอร์เนลผลิตภัณฑ์
การแก้ไขทั้งหมดเหล่านี้อาจส่งผลให้โค้ดเคอร์เนลมากถึง 50% เป็นโค้ดนอกโครงสร้างและไม่ได้มาจากเคอร์เนลลินุกซ์ต้นน้ำหรือ ACK ก่อน GKI อุปกรณ์เกือบทุกชนิดมีเคอร์เนลแบบกำหนดเองซึ่งส่งผลให้เคอร์เนลแยกส่วน
ค่าใช้จ่ายในการแยกส่วน
การกระจายตัวของเคอร์เนลมีผลเสียหลายประการต่อชุมชน Android
การอัปเดตความปลอดภัยต้องใช้แรงงานมาก
แพตช์ความปลอดภัยที่อ้างถึงใน Android Security Bulletin (ASB) จะต้องถูกแบ็คพอร์ทเข้าไปในเคอร์เนลของอุปกรณ์แต่ละตัว อย่างไรก็ตาม เนื่องจากการกระจายตัวของเคอร์เนล การเผยแพร่การแก้ไขความปลอดภัยไปยังอุปกรณ์ Android ในภาคสนามจึงมีราคาแพงอย่างห้ามไม่ได้
ยากที่จะรวมการอัปเดตที่รองรับระยะยาว
รุ่นที่สนับสนุนระยะยาว (LTS) มีการแก้ไขด้านความปลอดภัยและการแก้ไขจุดบกพร่องที่สำคัญอื่นๆ การติดตาม LTS ที่เผยแพร่ล่าสุดได้รับการพิสูจน์แล้วว่าเป็นวิธีที่มีประสิทธิภาพสูงสุดในการแก้ไขการรักษาความปลอดภัย บนอุปกรณ์ Pixel พบว่า 90% ของปัญหาด้านความปลอดภัยของเคอร์เนลที่รายงานใน ASB ได้รับการแก้ไขแล้วสำหรับอุปกรณ์ที่อัปเดตอยู่เสมอ
อย่างไรก็ตาม ด้วยการปรับเปลี่ยนแบบกำหนดเองทั้งหมดในเคอร์เนลของอุปกรณ์ การรวมการแก้ไข LTS เข้ากับเคอร์เนลของอุปกรณ์จึงเป็นเรื่องยาก
ยับยั้งการอัปเกรดการเปิดตัวแพลตฟอร์ม Android
การแยกส่วนทำให้คุณสมบัติใหม่ของ Android ที่ต้องการการเปลี่ยนแปลงเคอร์เนลต้องเพิ่มลงในอุปกรณ์ในสนามทำได้ยาก โค้ด Android Framework ต้องถือว่ารองรับเคอร์เนลได้มากถึงห้าเวอร์ชัน และไม่มีการเปลี่ยนแปลงเคอร์เนลสำหรับแพลตฟอร์มใหม่ (Android 10 รองรับเคอร์เนล 3.18, 4.4, 4.9, 4.14 และ 4.19 ซึ่งในบางกรณียังไม่รองรับ ปรับปรุงด้วยคุณสมบัติใหม่ตั้งแต่ Android 8 ในปี 2560)
ยากที่จะสนับสนุนการเปลี่ยนแปลงเคอร์เนลกลับไปเป็นอัพสตรีมลินุกซ์
ด้วยการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับเคอร์เนล อุปกรณ์เรือธงส่วนใหญ่จะมาพร้อมกับเวอร์ชันเคอร์เนลที่มีอายุอย่างน้อย 18 เดือนอยู่แล้ว ตัวอย่างเช่น เคอร์เนล 4.14 เปิดตัวโดย kernel.org
ในเดือนพฤศจิกายน 2017 และโทรศัพท์ Android เครื่องแรกที่ใช้เคอร์เนล 4.14 วางจำหน่ายในฤดูใบไม้ผลิปี 2019
ความล่าช้าที่ยาวนานระหว่างการเปิดตัวเคอร์เนลอัปสตรีมและผลิตภัณฑ์ทำให้ชุมชน Android ป้อนคุณสมบัติและไดรเวอร์ที่จำเป็นลงในเคอร์เนลอัปสตรีมได้ยาก
แก้ไขการกระจายตัว: รูปภาพเคอร์เนลทั่วไป
โครงการ Generic Kernel Image (GKI) จัดการกับการกระจายตัวของเคอร์เนลโดยการรวมเคอร์เนลหลักและย้ายการสนับสนุน SoC และบอร์ดออกจากเคอร์เนลหลักไปยังโมดูลผู้ขายที่โหลดได้ GKI ยังนำเสนอ Kernel Module Interface (KMI) ที่เสถียรสำหรับโมดูลผู้ขาย ดังนั้นโมดูลและเคอร์เนลสามารถอัปเดตได้อย่างอิสระ คุณลักษณะบางอย่างของเคอร์เนล GKI คือ:
- เคอร์เนล GKI ถูกสร้างขึ้นจากแหล่ง ACK
- เคอร์เนล GKI เป็นไบนารีแบบเคอร์เนลเดียวบวกกับโมดูลที่โหลดได้ที่เกี่ยวข้องต่อสถาปัตยกรรม ต่อการปล่อย LTS (ปัจจุบันมีเพียง arm64 สำหรับ
android11-5.4
และandroid12-5.4
) - เคอร์เนล GKI ได้รับการทดสอบกับ Android Platform ทุกรุ่นที่รองรับ ACK ที่เกี่ยวข้อง ไม่มีการเลิกใช้งานฟีเจอร์ตลอดอายุการใช้งานของเวอร์ชันเคอร์เนล GKI
- เคอร์เนล GKI เปิดเผย KMI ที่เสถียรแก่ไดรเวอร์ภายใน LTS ที่กำหนด
- เคอร์เนล GKI ไม่มีโค้ดเฉพาะ SoC หรือเฉพาะบอร์ด
สำหรับรูปภาพของสถาปัตยกรรม GKI โปรดดู ภาพรวมของเคอร์เนล
GKI เป็นการเปลี่ยนแปลงที่ซับซ้อนที่เกิดขึ้นในหลายขั้นตอน โดยเริ่มจากเคอร์เนล v5.4 ในการเปิดตัวแพลตฟอร์ม Android 11
ขณะนี้มีสองขั้นตอน GKI:
- 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 หรือใหม่กว่า
จีเคไอ 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
จีเคไอ 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
,เคอร์เนลผลิตภัณฑ์ หรือที่เรียกว่า เคอร์เนลอุปกรณ์ หรือ เคอร์เนล OEM เป็นเคอร์เนลที่คุณจัดส่งบนอุปกรณ์ของคุณ ก่อน GKI เคอร์เนลผลิตภัณฑ์ได้มาจากชุดของการเปลี่ยนแปลงเคอร์เนลอัปสตรีม รูปที่ 1 แสดงให้เห็นว่าการเพิ่มเคอร์เนลทำให้ได้เคอร์เนลผลิตภัณฑ์อย่างไร (OEM/เคอร์เนลอุปกรณ์):
รูปที่ 1 การสร้างเคอร์เนลผลิตภัณฑ์ก่อน GKI
- เคอร์เนล Linux Long Term Supported (LTS) จาก kernel.org ได้รับการแก้ไขด้วยแพตช์เฉพาะของ Android ส่งผลให้เป็น Android Common Kernel (ACK)
- ACK ได้รับการแก้ไขโดยผู้ขายที่เพิ่มการรองรับสำหรับ System-on-a-Chip (SoC) ของพวกเขา ผู้ขายอาจเพิ่มประสิทธิภาพหรือเพิ่มประสิทธิภาพพลังงาน เคอร์เนลผลลัพธ์เรียกว่า เคอร์เนลผู้ขาย
- ในที่สุด เคอร์เนลของผู้จำหน่ายได้รับการแก้ไขเพิ่มเติมโดย OEM ด้วยไดรเวอร์อุปกรณ์เพิ่มเติมและการปรับแต่งที่พวกเขาเห็นว่าจำเป็น เคอร์เนลผลลัพธ์เรียกว่า เคอร์เนลผลิตภัณฑ์
การแก้ไขทั้งหมดเหล่านี้อาจส่งผลให้โค้ดเคอร์เนลมากถึง 50% เป็นโค้ดนอกโครงสร้างและไม่ได้มาจากเคอร์เนลลินุกซ์ต้นน้ำหรือ ACK ก่อน GKI อุปกรณ์เกือบทุกชนิดมีเคอร์เนลแบบกำหนดเองซึ่งส่งผลให้เคอร์เนลแยกส่วน
ค่าใช้จ่ายในการแยกส่วน
การกระจายตัวของเคอร์เนลมีผลเสียหลายประการต่อชุมชน Android
การอัปเดตความปลอดภัยต้องใช้แรงงานมาก
แพตช์ความปลอดภัยที่อ้างถึงใน Android Security Bulletin (ASB) จะต้องถูกแบ็คพอร์ทเข้าไปในเคอร์เนลของอุปกรณ์แต่ละตัว อย่างไรก็ตาม เนื่องจากการกระจายตัวของเคอร์เนล การเผยแพร่การแก้ไขความปลอดภัยไปยังอุปกรณ์ Android ในภาคสนามจึงมีราคาแพงอย่างห้ามไม่ได้
ยากที่จะรวมการอัปเดตที่รองรับระยะยาว
รุ่นที่สนับสนุนระยะยาว (LTS) มีการแก้ไขด้านความปลอดภัยและการแก้ไขจุดบกพร่องที่สำคัญอื่นๆ การติดตาม LTS ที่เผยแพร่ล่าสุดได้รับการพิสูจน์แล้วว่าเป็นวิธีที่มีประสิทธิภาพสูงสุดในการแก้ไขการรักษาความปลอดภัย บนอุปกรณ์ Pixel พบว่า 90% ของปัญหาด้านความปลอดภัยของเคอร์เนลที่รายงานใน ASB ได้รับการแก้ไขแล้วสำหรับอุปกรณ์ที่อัปเดตอยู่เสมอ
อย่างไรก็ตาม ด้วยการปรับเปลี่ยนแบบกำหนดเองทั้งหมดในเคอร์เนลของอุปกรณ์ การรวมการแก้ไข LTS เข้ากับเคอร์เนลของอุปกรณ์จึงเป็นเรื่องยาก
ยับยั้งการอัปเกรดการเปิดตัวแพลตฟอร์ม Android
การแยกส่วนทำให้คุณสมบัติใหม่ของ Android ที่ต้องการการเปลี่ยนแปลงเคอร์เนลต้องเพิ่มลงในอุปกรณ์ในสนามทำได้ยาก โค้ด Android Framework ต้องถือว่ารองรับเคอร์เนลได้มากถึงห้าเวอร์ชัน และไม่มีการเปลี่ยนแปลงเคอร์เนลสำหรับแพลตฟอร์มใหม่ (Android 10 รองรับเคอร์เนล 3.18, 4.4, 4.9, 4.14 และ 4.19 ซึ่งในบางกรณียังไม่รองรับ ปรับปรุงด้วยคุณสมบัติใหม่ตั้งแต่ Android 8 ในปี 2560)
ยากที่จะสนับสนุนการเปลี่ยนแปลงเคอร์เนลกลับไปเป็นอัพสตรีมลินุกซ์
ด้วยการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับเคอร์เนล อุปกรณ์เรือธงส่วนใหญ่จะมาพร้อมกับเวอร์ชันเคอร์เนลที่มีอายุอย่างน้อย 18 เดือนอยู่แล้ว ตัวอย่างเช่น เคอร์เนล 4.14 เปิดตัวโดย kernel.org
ในเดือนพฤศจิกายน 2017 และโทรศัพท์ Android เครื่องแรกที่ใช้เคอร์เนล 4.14 วางจำหน่ายในฤดูใบไม้ผลิปี 2019
ความล่าช้าที่ยาวนานระหว่างการเปิดตัวเคอร์เนลอัปสตรีมและผลิตภัณฑ์ทำให้ชุมชน Android ป้อนคุณสมบัติและไดรเวอร์ที่จำเป็นลงในเคอร์เนลอัปสตรีมได้ยาก
แก้ไขการกระจายตัว: รูปภาพเคอร์เนลทั่วไป
โครงการ Generic Kernel Image (GKI) จัดการกับการกระจายตัวของเคอร์เนลโดยการรวมเคอร์เนลหลักและย้ายการสนับสนุน SoC และบอร์ดออกจากเคอร์เนลหลักไปยังโมดูลผู้ขายที่โหลดได้ GKI ยังนำเสนอ Kernel Module Interface (KMI) ที่เสถียรสำหรับโมดูลผู้ขาย ดังนั้นโมดูลและเคอร์เนลสามารถอัปเดตได้อย่างอิสระ คุณลักษณะบางอย่างของเคอร์เนล GKI คือ:
- เคอร์เนล GKI ถูกสร้างขึ้นจากแหล่ง ACK
- เคอร์เนล GKI เป็นไบนารีแบบเคอร์เนลเดียวบวกกับโมดูลที่โหลดได้ที่เกี่ยวข้องต่อสถาปัตยกรรม ต่อการปล่อย LTS (ปัจจุบันมีเพียง arm64 สำหรับ
android11-5.4
และandroid12-5.4
) - เคอร์เนล GKI ได้รับการทดสอบกับ Android Platform ทุกรุ่นที่รองรับ ACK ที่เกี่ยวข้อง ไม่มีการเลิกใช้งานฟีเจอร์ตลอดอายุการใช้งานของเวอร์ชันเคอร์เนล GKI
- เคอร์เนล GKI เปิดเผย KMI ที่เสถียรแก่ไดรเวอร์ภายใน LTS ที่กำหนด
- เคอร์เนล GKI ไม่มีโค้ดเฉพาะ SoC หรือเฉพาะบอร์ด
สำหรับรูปภาพของสถาปัตยกรรม GKI โปรดดู ภาพรวมของเคอร์เนล
GKI เป็นการเปลี่ยนแปลงที่ซับซ้อนที่เกิดขึ้นในหลายขั้นตอน โดยเริ่มจากเคอร์เนล v5.4 ในการเปิดตัวแพลตฟอร์ม Android 11
ขณะนี้มีสองขั้นตอน GKI:
- 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 หรือใหม่กว่า
จีเคไอ 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
จีเคไอ 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