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

หน้านี้จะอธิบายวิธีสร้างการแสดง ABI ของเคอร์เนล Android และเรียกใช้การตรวจสอบ ABI โดยจะใช้ได้กับ Android 16 ขึ้นไป สำหรับเวอร์ชันที่ต่ำกว่า โปรดดูABI monitor previous kernel versions

ดูเอกสารประกอบข้อมูลอ้างอิงสำหรับ Kleaf ได้ที่ รองรับการตรวจสอบ ABI (GKI) และ รองรับการตรวจสอบ ABI (อุปกรณ์)

สร้างเคอร์เนลและการแสดง ABI

หลังจากดาวน์โหลดแหล่งที่มาของ GKI ให้เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างอาร์ติแฟกต์เคอร์เนลและ ABI ของ GKI

tools/bazel run //common:kernel_aarch64_abi_dist

คำสั่งนี้จะสร้างการแสดง ABI ปัจจุบันและคัดลอกไปยัง $DIST_DIR/abi.stg พร้อมกับเคอร์เนลและโมดูลที่สร้างขึ้น $DIST_DIR ค่าเริ่มต้นคือ out_abi/kernel_aarch64_abi_dist/dist

คุณสามารถระบุอาร์กิวเมนต์เพิ่มเติมสำหรับเครื่องมือ ABI ได้ที่ท้ายคำสั่ง หลังจาก -- เช่น หากต้องการเปลี่ยนปลายทางสำหรับ ABI และอาร์ติแฟกต์การสร้าง คุณ สามารถใช้ตัวเลือก --destdir ได้

tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=out/dist

วิเคราะห์ความแตกต่างของ ABI ระหว่างบิลด์กับตัวแทนอ้างอิง

//common:kernel_aarch64_abi_dist เป้าหมายที่ดำเนินการในคำสั่งก่อนหน้าจะวิเคราะห์และรายงานความแตกต่างของ ABI ที่พบระหว่างบิลด์และการแสดงข้อมูลอ้างอิงที่อยู่ใน common/gki/aarch64/abi.stg (กำหนดไว้ใน BUILD.bazel) ความแตกต่างเหล่านี้จะพิมพ์ออกมาที่ส่วนท้ายของบิลด์ ดังที่แสดงในตัวอย่างต่อไปนี้

INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!

รายงานที่พิมพ์ออกมามาจากอาร์ติแฟกต์บิลด์ที่อยู่ใน $DIST_DIR/abi_stgdiff/abi.report.short พร้อมกับรายงานในรูปแบบอื่นๆ

ระบบอัตโนมัติควรใช้รหัสออกของคำสั่งบิลด์ ซึ่งเป็นค่าที่ไม่ใช่ 0 หากพบความแตกต่าง

โปรดทราบว่ากิ่งก้านของระยะการพัฒนา รวมถึง android-mainline ไม่มีตัวแทน ABI อ้างอิง หากไม่มี //common:kernel_aarch64_abi_dist จะตรวจไม่พบความแตกต่าง

อัปเดตการแสดง ABI อ้างอิง

การเปลี่ยนแปลงใดๆ ที่ส่งผลต่อ ABI ของเคอร์เนล เช่น การอัปเดตรายการสัญลักษณ์ จะต้องแสดงในการแสดง ABI อ้างอิง (common/gki/aarch64/abi.stg ซึ่งกำหนดไว้ใน BUILD.bazel) โดยคุณต้องเรียกใช้คำสั่งต่อไปนี้

tools/bazel run //common:kernel_aarch64_abi_update

คำสั่งนี้จะดำเนินการทุกอย่างในขั้นตอน วิเคราะห์ความแตกต่างของ ABI และอัปเดต การแสดงข้อมูลอ้างอิงในแหล่งที่มาเพิ่มเติม จากนั้นจึงอัปโหลด ABI ที่อัปเดตแล้วใน คอมมิตเดียวกันกับการเปลี่ยนแปลง ระบุความแตกต่างของ ABI จากรายงานใน $DIST_DIR/abi_stgdiff/abi.report.short ในข้อความคอมมิต

การตรวจสอบ ABI และเป้าหมายอุปกรณ์

คุณต้องกำหนดค่าการตรวจสอบ ABI สำหรับเป้าหมายการสร้างเคอร์เนลหลักเท่านั้น การกำหนดค่าบิลด์แบบผสม (ที่กำหนด base_kernel) ซึ่งคอมไพล์โดยตรงกับเคอร์เนล GKI เพียงแค่เพิ่มการรองรับการติดตามรายการสัญลักษณ์ของอุปกรณ์ ควรอัปเดตคำจำกัดความ ABI โดยใช้บิลด์ GKI

ดูเอกสารประกอบข้อมูลอ้างอิงสำหรับ Kleaf ได้ที่ การตรวจสอบ ABI ที่รองรับ (อุปกรณ์)

ตรวจสอบ ABI ของเคอร์เนลเวอร์ชันก่อนหน้า (Android 15 และต่ำกว่า)

สำหรับเคอร์เนลเวอร์ชันก่อนหน้า วิธีการสร้างและการตรวจสอบ ABI จะแตกต่างกันดังนี้

Android 15 และ 14

วิธีการส่วนใหญ่จะเหมือนกับ Android 16 ยกเว้นว่าการแสดง ABI อ้างอิงคือ common/android/abi_gki_aarch64.stg และ $DIST_DIR ค่าเริ่มต้นคือ out_abi/kernel_aarch64/dist

Android 13

Android 13 อาจสร้างด้วย Kleaf หรือสคริปต์บิลด์เดิมก็ได้

สำหรับ Kleaf วิธีการจะเหมือนกับ Android 14 ยกเว้นว่ารูปแบบ ABI จะเป็น XML และการแสดง ABI อ้างอิงจะเป็น common/android/abi_gki_aarch64.xml

สำหรับสคริปต์บิลด์เดิม วิธีการจะเหมือนกับ Android 12

Android 12 และต่ำกว่า

รูปแบบ ABI คือ XML และการแสดง ABI อ้างอิงคือ common/android/abi_gki_aarch64.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 (ดูสร้างอาร์ติแฟกต์เคอร์เนลและ 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 option จะเขียนทับการแสดง ABI อ้างอิง นอกจากนี้ยังอัปเดตรายการสัญลักษณ์ เมื่อใช้ BUILD_CONFIG สำหรับอุปกรณ์ที่กำหนดค่า KMI_SYMBOL_LIST ไว้