หน้านี้อธิบายวิธีสร้างการรับรองและการเรียกใช้เคอร์เนล ABI ของ Android การตรวจสอบ ABI ซึ่งใช้ได้กับ Android 14 ขึ้นไป สำหรับเวอร์ชันที่ต่ำกว่า โปรดดูหัวข้อเคอร์เนลเวอร์ชันเก่า
โปรดดูเอกสารอ้างอิงสำหรับ Kleaf เช่นกัน ซึ่งได้แก่ การรองรับการตรวจสอบ ABI (GKI) และการรองรับการตรวจสอบ ABI (อุปกรณ์)
สร้างเคอร์เนลและการแสดง ABI ของเคิร์นัล
หลังจากดาวน์โหลดซอร์สโค้ด GKIแล้ว ให้เรียกใช้คําสั่งต่อไปนี้เพื่อสร้างเคอร์เนล GKI และรายการต่างๆ ของ 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