หน้านี้อธิบายวิธีสร้างการรับรองและการเรียกใช้เคอร์เนล ABI ของ Android การตรวจสอบ ABI ใช้ได้กับ Android 14 และ สูงขึ้น สำหรับเวอร์ชันที่ต่ำกว่า โปรดดู เคอร์เนลเวอร์ชันเก่า
นอกจากนี้ โปรดดูเอกสารอ้างอิงสำหรับ Kleaf ด้วย รองรับการตรวจสอบ ABI (GKI) และ รองรับการตรวจสอบ ABI (อุปกรณ์)
สร้างเคอร์เนลและการนำเสนอ ABI ของเคอร์เนล
หลังจากดาวน์โหลดแหล่งที่มา GKI เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างอาร์ติแฟกต์ KKI และ ABI
tools/bazel run //common:kernel_aarch64_abi_dist
คำสั่งนี้จะสร้างการนำเสนอ ABI ปัจจุบันและคัดลอกไปยัง
out_abi/kernel_aarch64/dist/abi.stg
ตลอดจนเคอร์เนลและโมดูลในตัว
คุณจะระบุอาร์กิวเมนต์เพิ่มเติมสำหรับเครื่องมือ ABI ได้ที่ส่วนท้ายของคำสั่ง
หลัง --
ตัวอย่างเช่น ในการเปลี่ยนปลายทางสำหรับ ABI และสร้างอาร์ติแฟกต์ คุณจะต้อง
สามารถใช้ตัวเลือก --dist_dir
ได้ดังนี้
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
วิเคราะห์ความแตกต่างของ ABI ระหว่างบิลด์และการนำเสนอการอ้างอิง
เป้าหมาย //common:kernel_aarch64_abi_dist
ซึ่งดำเนินการตามคำสั่งข้างต้น
วิเคราะห์และรายงานความแตกต่างของ ABI ที่พบระหว่างบิลด์และข้อมูลอ้างอิง
ตัวแทนอยู่ที่ common/android/abi_gki_aarch64.stg
(ที่กำหนดไว้ใน
BUILD.bazel
)
ความแตกต่างเหล่านี้จะพิมพ์ออกมาเมื่อสิ้นสุดบิลด์ ดังที่แสดงใน
ตัวอย่างต่อไปนี้
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
รายงานที่พิมพ์มาจากอาร์ติแฟกต์ของบิลด์ที่
out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short
พร้อมกับรายงานใน
รูปแบบอื่นๆ
การทำงานอัตโนมัติควรใช้โค้ดสำหรับออกของคำสั่งบิลด์ ซึ่งไม่ใช่ 0 หาก พบความแตกต่าง
โปรดทราบว่า
ช่วงพัฒนา
สาขา รวมถึง android-mainline
ไม่มีการเป็นตัวแทน ABI อ้างอิง
หากไม่มี //common:kernel_aarch64_abi_dist
จะไม่ตรวจจับความแตกต่างใดๆ
อัปเดตการนำเสนอ ABI อ้างอิง
การเปลี่ยนแปลงที่มีผลกับ ABI ของเคอร์เนล เช่น
การอัปเดตรายการสัญลักษณ์
จำเป็นต้องแสดงในการนำเสนอ ABI อ้างอิง
(common/android/abi_gki_aarch64.stg
, กำหนดไว้ใน
BUILD.bazel)
ในการทำเช่นนี้ คุณต้องเรียกใช้คำสั่งต่อไปนี้
tools/bazel run //common:kernel_aarch64_abi_update
คำสั่งนี้จะดำเนินการทุกอย่างในขั้นตอน
วิเคราะห์ความแตกต่างของ ABI และอัปเดตเพิ่มเติม
การอ้างอิงในแหล่งข้อมูล สามารถอัปโหลด ABI ที่อัปเดตแล้วใน
คอมมิตเดียวกันกับการเปลี่ยนแปลง รวมความแตกต่างของ ABI จาก
รายงานใน $DIST_DIR/abi.report.short
ในข้อความคอมมิต
การตรวจสอบ ABI และเป้าหมายของอุปกรณ์
ต้องกำหนดค่าการตรวจสอบ ABI สำหรับเป้าหมายบิลด์เคอร์เนลหลักเท่านั้น ผสม
การกำหนดค่าบิลด์ (แบบที่กำหนด base_kernel
) ที่คอมไพล์ด้วย
เคอร์เนล GKI ต้องเพียงเพิ่มการสนับสนุนสำหรับการติดตามสัญลักษณ์ของอุปกรณ์
ควรอัปเดตคำจำกัดความของ ABI โดยใช้บิลด์ GKI
โปรดดูเอกสารอ้างอิงสำหรับ Kleaf ด้วย รองรับการตรวจสอบ ABI (อุปกรณ์)
เคอร์เนลเวอร์ชันเก่า
Android 13
คำแนะนำในการสร้างส่วนใหญ่จะเหมือนกับ
Android 14 เว้นแต่ว่ารูปแบบ ABI คือ XML และ
ตัวแทนของ ABI อ้างอิงคือ common/android/abi_gki_aarch64.xml
Android 13 และต่ำกว่า
เช่นเดียวกับใน Android 13 รูปแบบ ABI คือ 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 (ดู
สร้างอาร์ติแฟกต์ Kernel และ 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