كيفية تشغيل مراقبة ABI

يصف هذا القسم كيفية إنشاء تمثيلات Android kernel ABI وتشغيل مراقبة 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 بالإضافة إلى التقارير بتنسيقات أخرى.

يجب أن تستخدم الأتمتة رمز الخروج الخاص بأمر الإنشاء، والذي سيكون غير صفر إذا تم العثور على اختلافات.

يرجى ملاحظة أن فروع مرحلة التطوير ، بما في ذلك android-mainline ، ليس لها تمثيل مرجعي لـ ABI. وبدون ذلك، لن يتمكن //common:kernel_aarch64_abi_dist من اكتشاف أي اختلافات.

قم بتحديث تمثيل ABI المرجعي

أي تغيير يؤثر على واجهة برمجة تطبيقات kernel، مثل تحديث قائمة الرموز ، يجب أن ينعكس في تمثيل واجهة برمجة التطبيقات المرجعية ( 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 فقط إلى التهيئة لأهداف بناء kernel الأساسية. تكوينات البناء المختلطة (تلك التي تحدد base_kernel ) التي يتم تجميعها مباشرة مع نواة GKI تحتاج فقط إلى إضافة دعم لتتبع قائمة رموز الجهاز . يجب تحديث تعريف ABI باستخدام بنية GKI.

راجع أيضًا الوثائق المرجعية لـ Kleaf: دعم مراقبة ABI (الجهاز) .

إصدارات النواة الأقدم

أندرويد 13

تعليمات البناء هي في الغالب نفس تعليمات Android 14 باستثناء أن تنسيق ABI هو XML وتمثيل ABI المرجعي common/android/abi_gki_aarch64.xml .

أندرويد 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 (راجع إنشاء kernel وABI artifacts ).

يتم تخزين تمثيل ABI المرجعي في android/abi_gki_aarch64.xml كما هو محدد بواسطة متغير ABI_DEFINITION في common/build.config.gki.aarch64 .

إذا كنت بحاجة إلى تحديث تمثيل kernel 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 عليه.