เรียกใช้การตรวจสอบ ABI

หน้านี้จะอธิบายวิธีสร้างการแสดง ABI ของเคอร์เนล Android และเรียกใช้การตรวจสอบ ABI ซึ่งจะใช้ได้กับ Android 16 ขึ้นไป สำหรับเวอร์ชันที่ต่ำกว่า โปรดดูเครื่องมือตรวจสอบ ABI สำหรับเคอร์เนลเวอร์ชันก่อนหน้า

โปรดดูเอกสารอ้างอิงสำหรับ Kleaf เช่นกัน ซึ่งได้แก่ การรองรับการตรวจสอบ ABI (GKI) และการรองรับการตรวจสอบ ABI (อุปกรณ์)

สร้างเคอร์เนลและการแสดง ABI ของเคิร์นัล

หลังจากดาวน์โหลดซอร์สโค้ด GKIแล้ว ให้เรียกใช้คําสั่งต่อไปนี้เพื่อสร้างเคอร์เนล GKI และอาร์ติแฟกต์ ABI

tools/bazel run //common:kernel_aarch64_abi_dist

คำสั่งนี้จะสร้างการแสดง ABI ปัจจุบันและคัดลอกไปยัง $DIST_DIR/abi.stg พร้อมกับเคอร์เนลและโมดูลที่คอมไพล์แล้ว $DIST_DIR ค่าเริ่มต้นคือ out_abi/kernel_aarch64_abi_dist/dist

คุณสามารถระบุอาร์กิวเมนต์เพิ่มเติมสำหรับเครื่องมือ ABI ที่ส่วนท้ายของคำสั่งหลังจาก -- เช่น หากต้องการเปลี่ยนปลายทางสำหรับ ABI และอาร์ติแฟกต์การสร้าง คุณสามารถใช้ตัวเลือก --dist_dir ดังนี้

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist

วิเคราะห์ความแตกต่างของ ABI ระหว่างบิลด์กับการแสดงข้อมูลอ้างอิง

เป้าหมาย //common:kernel_aarch64_abi_dist ที่ดำเนินการในคำสั่งก่อนหน้าจะวิเคราะห์และรายงานความแตกต่างของ ABI ที่พบระหว่างบิลด์กับการแสดงข้อมูลอ้างอิงที่อยู่ใน common/gki/aarch64/abi.stg (กำหนดไว้ใน BUILD.bazel) ระบบจะพิมพ์ความแตกต่างเหล่านี้ออกมาเมื่อบิลด์เสร็จสิ้น ดังที่แสดงในตัวอย่างต่อไปนี้

INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!

รายงานที่พิมพ์ออกมามาจากอาร์ติแฟกต์การสร้างที่อยู่ใน $DIST_DIR/abi_stgdiff/abi.report.short พร้อมกับรายงานในรูปแบบอื่นๆ

ระบบอัตโนมัติควรใช้รหัสออกของคําสั่งบิลด์ ซึ่งไม่ใช่ 0 หากพบความแตกต่าง

โปรดทราบว่าสาขาระยะการพัฒนา รวมถึง android-mainline ไม่มีการแสดง ABI อ้างอิง หากไม่มี //common:kernel_aarch64_abi_dist จะไม่ตรวจพบความแตกต่างใดๆ

อัปเดตการแสดง ABI อ้างอิง

การเปลี่ยนแปลงใดๆ ที่ส่งผลต่อ ABI ของเคอร์เนล เช่น การอัปเดตรายการสัญลักษณ์ ต้องแสดงในการแสดง ABI อ้างอิง (common/gki/aarch64/abi.stg ที่กําหนดไว้ใน BUILD.bazel) โดยให้เรียกใช้คําสั่งต่อไปนี้

tools/bazel run //common:kernel_aarch64_abi_update

คำสั่งนี้จะดำเนินการทุกอย่างในขั้นตอนวิเคราะห์ความแตกต่างของ ABI และอัปเดตการแสดงข้อมูลอ้างอิงในแหล่งที่มาเพิ่มเติม จากนั้นอัปโหลด ABI ที่อัปเดตแล้วในคอมมิตเดียวกับการเปลี่ยนแปลง ระบุความแตกต่างของ ABI จากรายงานใน $DIST_DIR/abi_stgdiff/abi.report.short ในข้อความคอมมิต

การตรวจสอบ ABI และเป้าหมายอุปกรณ์

คุณต้องกำหนดค่าการตรวจสอบ ABI สำหรับเป้าหมายการสร้างเคอร์เนลหลักเท่านั้น การกําหนดค่าการคอมไพล์แบบผสม (การกําหนดค่า base_kernel) ที่คอมไพล์กับเคอร์เนล GKI โดยตรงต้องเพิ่มการรองรับการติดตามรายการสัญลักษณ์ของอุปกรณ์เท่านั้น ควรอัปเดตคำจำกัดความ ABI โดยใช้บิลด์ GKI

โปรดดูเอกสารอ้างอิงสำหรับ Kleaf ด้วยเช่นกัน รองรับการตรวจสอบ ABI (อุปกรณ์)

ABI ตรวจสอบเคอร์เนลเวอร์ชันก่อนหน้า (Android 15 และต่ำกว่า)

สำหรับเคอร์เนลเวอร์ชันก่อนหน้า วิธีการสร้างและตรวจสอบ ABI จะแตกต่างกันดังนี้

Android 15 และ 14

วิธีการส่วนใหญ่เหมือนกับ Android 16 ยกเว้นการนําเสนอ ABI อ้างอิงเป็น common/android/abi_gki_aarch64.stg และ $DIST_DIR มีค่าเริ่มต้นเป็น out_abi/kernel_aarch64/dist

Android 13

Android 13 อาจสร้างด้วย Kleaf หรือสคริปต์บิลด์เดิมก็ได้

สำหรับ Kleaf วิธีการจะเหมือนกับ Android 14 ยกเว้นรูปแบบ ABI จะเป็น XML และการนําเสนอ ABI อ้างอิงจะเป็น common/android/abi_gki_aarch64.xml

สําหรับสคริปต์บิลด์เดิม วิธีการจะเหมือนกับ Android 12

Android 12 และต่ำกว่า

รูปแบบ ABI คือ XML และการนําเสนอ ABI อ้างอิงคือ common/android/abi_gki_aarch64.xml

เคอร์เนลเหล่านี้ใช้ build.sh แทน Kleaf สําหรับการตรวจสอบ ABI คุณควรใช้ build_abi.sh ซึ่งยอมรับตัวแปรสภาพแวดล้อมเดียวกันเพื่อปรับแต่งบิลด์เช่นเดียวกับ build.sh เช่น

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

ซึ่งจะสร้างเคอร์เนลและดึงข้อมูลตัวแทน ABI ไปยังไดเรกทอรีย่อย OUT_DIR (ซึ่งเป็น out_abi โดยค่าเริ่มต้น) และเทียบเท่ากับเป้าหมาย //common:kernel_aarch64_abi_dist ของ Kleaf (ดูสร้างเคอร์เนลและรายการต่างๆ ของ ABI)

ระบบจะจัดเก็บการนําเสนอ ABI อ้างอิงใน android/abi_gki_aarch64.xml ตามที่ตัวแปร ABI_DEFINITION ใน common/build.config.gki.aarch64 ระบุ

หากต้องการอัปเดตการแสดง ABI ของเคอร์เนล วิธีที่สะดวกที่สุดคือใช้ตัวเลือก --update และ --print-report ดังนี้

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report

--print-report จะแสดงความแตกต่างของ ABI ระหว่างไฟล์ที่มีอยู่กับ ABI ที่สร้างขึ้นใหม่

ตัวเลือก --update จะเขียนทับการแสดง ABI อ้างอิง รวมถึงจะอัปเดตรายการสัญลักษณ์เมื่อใช้ BUILD_CONFIG สำหรับอุปกรณ์ที่กำหนดค่า KMI_SYMBOL_LIST