เรียกใช้การตรวจสอบ 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 และต่ำกว่า

รูปแบบ ABI จะเป็น XML เช่นเดียวกับใน Android 13

เคอร์เนลเวอร์ชันเก่าใช้ 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