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