คำถามที่พบบ่อยเกี่ยวกับเคอร์เนลของ Android

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

รายการสัญลักษณ์ของอินเทอร์เฟซโมดูลเคอร์เนล (KMI) เปลี่ยนแปลงได้ในเคอร์เนลที่เสถียรไหม

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

ฉันจะเปลี่ยนโครงสร้างที่โมดูลของผู้ให้บริการใช้ในเคอร์เนลที่เสถียรได้ไหม

โครงสร้างที่เป็นส่วนหนึ่งของอินเทอร์เฟซ KMI จะเปลี่ยนแปลงไม่ได้ในเคอร์เนลที่มี KMI ที่ถูกแช่แข็ง โครงสร้างเหล่านี้จะเปลี่ยนแปลงได้ก่อนที่จะมีการหยุด KMI

ฉันจะเปลี่ยนเคอร์เนลได้ไหม ตราบใดที่ฉันไม่ทำให้ไบนารีหรือซอร์สเข้ากันไม่ได้

การเปลี่ยนแปลงที่ไม่ส่งผลต่อ KMI สามารถทำได้ตามที่อธิบายไว้ในแพตช์เฉพาะสำหรับ Android

GKI จัดการการกำหนดค่าเคอร์เนลอย่างไร

ดูข้อมูลเกี่ยวกับการกำหนดค่าเคอร์เนลได้ที่หัวข้อการเปลี่ยนแปลง gki_defconfig

ฉันจะจัดการการแก้ไขข้อบกพร่องของอัปสตรีมสำหรับการเขียนทับโมดูล GKI ที่มีอยู่ได้อย่างไร

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

มีการทดสอบ GKI เฉพาะไหม

การทดสอบ Vendor Test Suite (VTS) จะยืนยันการติดตั้งบิลด์ GKI ที่ได้รับการรับรอง รวมถึงบังคับใช้ข้อกําหนด GKI ต่อรุ่น ตัวอย่างเช่น การทดสอบ VTS ของ Android 12 สำหรับส่วนหัวของบูต v3 และเพื่อยืนยันว่ามีพาร์ติชันที่จำเป็นในอุปกรณ์ที่ใช้เคอร์เนล 5.10

ฉันจะสร้างไฟล์แฟรกเมนต์ defconfig ของโปรเจ็กต์สำหรับบิลด์อุปกรณ์ได้อย่างไร

อุปกรณ์ที่เป็นไปตามข้อกำหนด GKI จํานวนมากใช้ข้อมูลโค้ดการกําหนดค่าเพื่ออธิบายตัวเลือกการกําหนดค่าที่จําเป็น นอกเหนือจาก gki_defconfig เพื่อสร้างโมดูลของผู้ให้บริการ ตัวอย่างที่เป็นส่วนหนึ่งของโค้ดเบส ACK ได้แก่ Cuttlefish และ DB845c คุณไม่สามารถหลีกเลี่ยงการตรวจสอบตัวเลือกการกําหนดค่าด้วยตนเองเพื่อเพิ่มประสิทธิภาพของข้อมูลโค้ดได้ แต่ scripts/diffconfig จากแหล่งที่มาของเคอร์เนลมีประโยชน์สําหรับการเปรียบเทียบผลลัพธ์ของ gki_defconfig กับ gki_defconfig+device.fragment

มีวิธีแก้ปัญหาสำหรับ modprobe ที่ถือว่า - และ _ มีค่าเท่ากันไหม

หน้าแมนของ modprobe มีคำอธิบายดังนี้ "modprobe เพิ่มหรือนำโมดูลออกจากเคอร์เนล Linux อย่างชาญฉลาด: โปรดทราบว่าไม่มีความแตกต่างระหว่าง _ และ - ในชื่อโมดูล (ระบบจะแปลงเครื่องหมายขีดล่างโดยอัตโนมัติ) เพื่ออำนวยความสะดวก" ทีม GKI ยึดตามรูปแบบมาตรฐานของ Upstream ดังนั้นเครื่องมือของผู้ให้บริการหรือรูปแบบการตั้งชื่อโมดูลต้องคำนึงถึงการยึดตามนี้

ฉันจะเปิดใช้ debugfs เพื่อใช้งานภายในได้อย่างไร

โปรดดูรายละเอียดเกี่ยวกับการเปิดใช้ debugfs ที่หัวข้อฟีเจอร์การแก้ไขข้อบกพร่องที่รบกวนผู้ใช้ในดาวน์สตรีม

ฉันจะแก้ไข ABI ที่ไม่ตรงกันระหว่างเคอร์เนล GKI ที่เปิดใช้การกำหนดค่าโมดูลที่เฉพาะเจาะจงได้อย่างไร

ABI ที่ไม่ตรงกันระหว่างเคอร์เนล GKI กับการกำหนดค่าโมดูลแสดงถึงการใช้การกำหนดค่าโมดูลโดยนัย ซึ่งการเปิดใช้โมดูลจะทำให้มีการรวมการกำหนดค่าไบนารีไว้ในอิมเมจเคอร์เนลที่ได้ โปรดติดต่อทีมเคอร์เนลของ Android (kernel-team@android.com) เพื่อหาแนวทางแก้ปัญหา หลังจากกำหนดรายการสัญลักษณ์แล้ว ให้สร้างข้อบกพร่องในเครื่องมือติดตามปัญหาและอัปโหลดการเปลี่ยนแปลงรายการสัญลักษณ์

ฉันมีอุปกรณ์ที่เป็นไปตามข้อกำหนด GKI 1.0 ที่ใช้เคอร์เนล 5.4 ซึ่งเปิดตัวพร้อมกับ Android 11 และ 12 ตัวเลือกการอัปเกรดเคอร์เนลมีอะไรบ้าง และฉันจะทดสอบอุปกรณ์เหล่านี้เมื่ออัปเกรดเป็น Android 12 และ 13 ได้อย่างไร

โปรดดูรายการเวอร์ชันเคอร์เนลที่รองรับสำหรับเวอร์ชันเปิดตัวและเวอร์ชันอัปเกรดในตารางความเข้ากันได้ ต่อไปนี้เป็นตัวอย่างการอัปเกรด 2 ตัวอย่าง

ตัวอย่างที่ 1: ผู้ใช้ที่มีอุปกรณ์ที่เปิดตัวด้วย Android 11 ที่มีเคอร์เนล android11-5.4 (GKI 1.0) จะเลือกตัวเลือกใดก็ได้ต่อไปนี้เมื่ออัปเกรดเป็น Android 12

  • อัปเกรดเป็นเคอร์เนล GKI 2.0 android12-5.10 (แนะนำอย่างยิ่ง)

  • ใช้เคอร์เนล android11-5.4 ต่อไป

  • อัปเกรดเป็นเคอร์เนล android12-5.4

ตัวอย่างที่ 2: ผู้ใช้ที่มีอุปกรณ์ที่เปิดตัวด้วย Android 12 ที่มีเคอร์เนล android12-5.4 หรือ android12-5.10 จะเลือกตัวเลือกใดก็ได้ต่อไปนี้เมื่ออัปเกรดเป็น Android 13

  • อัปเกรดเป็นเคอร์เนล GKI 2.0 android13-5.10 หรือ android13-5.15 (แนะนำอย่างยิ่ง)

  • เก็บเคอร์เนล android12-5.4 GKI 1.0 ไว้

  • ใช้เคอร์เนล android12-5.10 GKI 2.0 ต่อไป

สำหรับเฉพาะการทดสอบการปฏิบัติตามข้อกำหนดของ Treble เราขอแนะนำให้คุณดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้

  • แทนที่เคอร์เนลของพาร์ทเนอร์ด้วยเคอร์เนล GKI 1.0 (android11-5.4 หรือ android12-5.4) ที่ได้รับการรับรอง

  • มาพร้อมกับเคอร์เนล GKI 2.0 ที่ได้รับการรับรอง (android12-5.10, android13-5.10 หรือ android13-5.15) โดยขึ้นอยู่กับตัวเลือกของคุณ

คุณสามารถดาวน์โหลดบิลด์ GKI 2.0 ได้จากบิลด์รุ่น Generic Kernel Image (GKI)