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

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

เปลี่ยนรายการสัญลักษณ์ Kernel Module Interface (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 ปฏิบัติตามข้อกำหนดมาตรฐานต้นทาง ดังนั้นเครื่องมือของผู้ให้บริการหรือข้อกำหนดการตั้งชื่อโมดูลต้องคำนึงถึงการปฏิบัติตามข้อกำหนดนี้

ฉันจะเปิดใช้ debugfs สำหรับใช้ภายในได้อย่างไร

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

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

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