หน้านี้จะอธิบายวิธีสร้างตัวแทนของ 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