เอกสารนี้มีคำถามที่พบบ่อยเกี่ยวกับเคอร์เนล Android หรือที่เรียกว่าเคอร์เนล Generic Kernel Image (GKI) หากคุณไม่คุ้นเคยกับ คำศัพท์เกี่ยวกับ GKI และเคอร์เนล GKI โปรดดู ภาพรวมของเคอร์เนล
เปลี่ยนรายการสัญลักษณ์ของอินเทอร์เฟซโมดูลเคอร์เนล (KMI) ในเคอร์เนลที่เสถียรได้ไหม
การเปลี่ยนแปลงที่ไม่มีผลต่อ KMI ที่มีอยู่สามารถเพิ่มลงในเคอร์เนลที่ หยุดการอัปเดตได้ การเปลี่ยนแปลงเหล่านี้รวมถึงฟังก์ชันที่ส่งออกใหม่และรายการสัญลักษณ์ โปรดดูรายละเอียดที่หัวข้อจัดการรายการสัญลักษณ์
ฉันเปลี่ยนโครงสร้างที่ใช้โดยโมดูลของผู้ให้บริการในเคอร์เนลที่เสถียรได้ไหม
โครงสร้างที่เป็นส่วนหนึ่งของอินเทอร์เฟซ KMI จะเปลี่ยนแปลงในเคอร์เนลที่มี KMI ที่หยุดการเปลี่ยนแปลงไม่ได้ คุณสามารถเปลี่ยนแปลงโครงสร้างเหล่านี้ได้ก่อนที่ KMI จะหยุดการเปลี่ยนแปลง
ฉันเปลี่ยนเคอร์เนลได้ไหมตราบใดที่ไม่ได้ทำให้ความเข้ากันได้ของไบนารีหรือซอร์สเสียหาย
การเปลี่ยนแปลงที่ไม่ส่งผลต่อ KMI สามารถทำได้ตามที่อธิบายไว้ในแพตช์เฉพาะ Android
GKI จัดการการกำหนดค่าเคอร์เนลอย่างไร
ดูข้อมูลเกี่ยวกับการกำหนดค่าเคอร์เนลได้ที่การเปลี่ยนแปลง gki_defconfig
ฉันจะจัดการการแก้ไขข้อบกพร่องต้นทางสำหรับการเขียนทับโมดูล GKI ที่มีอยู่ได้อย่างไร
หากคุณสร้างโมดูลของผู้ให้บริการตามไดรเวอร์ในเคอร์เนลทั่วไปของ Android (ACK) คุณต้องเป็นผู้ตรวจสอบว่าการแก้ไขข้อบกพร่องจากต้นทางและ ACK จะเผยแพร่ไปยังโมดูลของคุณ โดยทั่วไปแล้ว การใช้เคอร์เนล GKI และ โมดูล GKI โดยไม่มีการแก้ไขจะเป็นประโยชน์ต่อคุณมากที่สุด เนื่องจาก Google จะเป็นผู้ให้ข้อมูลอัปเดตเหล่านี้อย่างสม่ำเสมอ
มีการทดสอบเฉพาะ GKI ไหม
มีชุดทดสอบชุดทดสอบของผู้ให้บริการ (VTS) ที่ใช้ยืนยันว่ามีการติดตั้งบิลด์ GKI ที่ได้รับการรับรองแล้ว และยังใช้บังคับข้อกำหนด GKI ต่อรุ่นด้วย เช่น มีการทดสอบ VTS ของ Android 12 สำหรับส่วนหัวการเปิดเครื่อง v3 และเพื่อยืนยันว่ามีพาร์ติชันที่จำเป็นในอุปกรณ์ที่ใช้เคอร์เนล 5.10
ฉันจะสร้างไฟล์ Fragment defconfig ของโปรเจ็กต์สำหรับการสร้างอุปกรณ์ได้อย่างไร
อุปกรณ์จำนวนมากที่สอดคล้องกับ GKI ใช้ส่วนการกำหนดค่าเพื่ออธิบายตัวเลือกการกำหนดค่าที่จำเป็น นอกเหนือจาก gki_defconfig
เพื่อสร้างโมดูลของผู้ให้บริการ
ตัวอย่างที่อยู่ในโค้ดเบส ACK ได้แก่ Cuttlefish และ DB845c
คุณไม่สามารถหลีกเลี่ยงการตรวจสอบตัวเลือกการกำหนดค่าด้วยตนเองบางอย่าง
เพื่อเพิ่มประสิทธิภาพของ Fragment ได้ แต่scripts/diffconfig
จากแหล่งที่มาของเคอร์เนล
มีประโยชน์ในการเปรียบเทียบผลลัพธ์ของ gki_defconfig
และ
gki_defconfig+device.fragment
มีวิธีแก้ปัญหาสำหรับ modprobe ที่ถือว่า - และ _ เป็นค่าที่เทียบเท่ากันไหม
หน้า man ของ modprobe
มีคำอธิบายนี้ "modprobe
เพิ่ม
หรือนำโมดูลออกจากเคอร์เนล Linux อย่างชาญฉลาด: โปรดทราบว่าเพื่อความสะดวก ชื่อโมดูลที่ใช้ _ และ - จะไม่มีความแตกต่างกัน (ระบบจะแปลงขีดล่างโดยอัตโนมัติ)" ทีม GKI ปฏิบัติตามรูปแบบมาตรฐานของต้นทาง ดังนั้นเครื่องมือของผู้ให้บริการหรือรูปแบบการตั้งชื่อโมดูลต้องคำนึงถึงการปฏิบัติตามข้อกำหนดนี้
ฉันจะเปิดใช้ debugfs สำหรับใช้ภายในได้อย่างไร
ดูรายละเอียดเกี่ยวกับการเปิดใช้ debugfs ได้ที่ฟีเจอร์การแก้ไขข้อบกพร่องแบบล่วงล้ำในดาวน์สตรีม
ฉันจะแก้ไข ABI ที่ไม่ตรงกันระหว่างเคอร์เนล GKI กับการกำหนดค่าโมดูลที่เฉพาะเจาะจงที่เปิดใช้อยู่ได้อย่างไร
ABI ที่ไม่ตรงกันระหว่างเคอร์เนล GKI กับการกำหนดค่าโมดูลแสดงถึง การขึ้นต่อกันของการกำหนดค่าโมดูลโดยนัย ซึ่งการเปิดใช้โมดูลจะทำให้มีการสร้างการกำหนดค่าไบนารี ลงในอิมเมจเคอร์เนลที่ได้ โปรดติดต่อทีมเคอร์เนลของ Android (kernel-team@android.com) เพื่อกำหนดแนวทาง ในอนาคต หลังจากกำหนดรายการสัญลักษณ์แล้ว ให้สร้างข้อบกพร่องใน Issue Tracker และอัปโหลดการเปลี่ยนแปลงไปยังรายการสัญลักษณ์