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

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