ส่วนนี้อธิบายวิธีสร้างการแสดง 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