วิธีเรียกใช้ ABI Monitoring

ส่วนนี้อธิบายวิธีสร้างการแสดง 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 พร้อมกับรายงานในรูปแบบอื่นๆ

ระบบอัตโนมัติควรใช้โค้ดออกของคำสั่ง build ซึ่งจะไม่เป็นศูนย์หากพบความแตกต่าง

โปรดทราบว่าสาขา ของขั้นตอนการพัฒนา รวมถึง 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 build

โปรดดูเอกสารอ้างอิงสำหรับ Kleaf: รองรับการตรวจสอบ ABI (อุปกรณ์)

เคอร์เนลเวอร์ชันเก่ากว่า

แอนดรอยด์ 13

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

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

เช่นเดียวกับใน 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 (ดู Build kernel และ ABI artifacts )

การแสดง 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