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

หน้านี้อธิบายวิธีสร้างการรับรองและการเรียกใช้เคอร์เนล 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