لتقليل سطح الرموز والأنواع التي يجب الحفاظ عليها كثابتة،
توفر نواة GKI إمكانات لحصر الرموز التي يتم تصديرها على تلك التي
مطلوبة للوحدات. بالنسبة إلى الوحدات التي يتم تجميعها خارجيًا، ستحتاج إلى قائمة
من الرموز المستخدمة للسماح بتصديرها بواسطة نواة GKI. على سبيل المثال:
الرموز التي تستخدمها الوحدات
يتم تخزين الحبَّار
بوصة
android/abi_gki_aarch64_virtual_device
إضافة قيمة مستهدَفة لإنشاء قائمة الرموز
يتم إنشاء قوائم الرموز من خلال هدف kernel_abi
. أضف هذا الاستهداف إلى
الجهاز BUILD.bazel
مع الخيارات التالية:
name
يجب أن يكون بتنسيق
<kernel_build>_abi
.kernel_build
يجب أن تحتوي على اسم استهداف
kernel_build
للجهاز.
يمكنك أيضًا استخدام الخيارات التالية:
kernel_modules
قائمة بالاستهدافات للوحدات خارج الشجرة يجب ألا يتم تضمين وحدات العرض على شكل شجرة تضمينها هنا. ارجع إلى تجهيز الوحدات داخل الشجرة لاستخراج الرموز
kmi_symbol_list_add_only
يمنع هذا الخيار إزالة الرموز غير المستخدمة. تُعد إزالة الرموز فقط مسموح بها في أوقات محددة أثناء إدارة KMI التثبيت ولا يُسمح له بمجرد تغيير KMI مجمّدة.
ويفيد هذا أيضًا عند استخدام قائمة الرموز نفسها لعدة رموز الأجهزة. بهذه الطريقة، لن تزيل الرموز التي يستخدمها الجهاز "أ" وليس الجهاز "ب".
module_grouping
إذا كانت السمة
True
أو غير محدّدة، تجمع قائمة الرموز الرموز بناءً على kernel التي تشير إلى الرمز. وإلا فإن قائمة الرموز هي قائمة مرتبة من الرموز المستخدمة بواسطة جميع وحدات النواة.
عرض common-Modules/virtual-device/BUILD.bazel على سبيل المثال:
kernel_abi(
name = "virtual_device_aarch64_abi",
kernel_build = ":virtual_device_aarch64",
kernel_modules = [
":virtual_device_aarch64_external_modules",
],
kmi_symbol_list_add_only = True,
)
راجع أيضًا
المستندات المرجعية
على استهداف kernel_abi
في Kleaf.
تحضير الوحدات داخل الشجرة لاستخراج الرموز
لإعداد وحدات داخل الشجرة لاستخراج الرموز، أدرِجِ الشبكات الخاصة بالمورّدين
الوحدات في السمة module_outs
للهدف kernel_build
. عرض
_VIRT_COMMON_MODULES
أو
استخدامه
للحصول على مثال. لا تضمِّن وحدات GKI في هذه القائمة.
تكوين هذه الوحدات لتكون غير موقَّعة، وإلا فقد تكون قائمة الرموز فارغة. لإجراء ذلك، أضِف هذا السطر إلى النواة (kernel) أجزاء التهيئة:
# CONFIG_MODULE_SIG_ALL is not set
عرض common-consoles/virtual-device/virtual_device_core.segment على سبيل المثال.
إضافة قائمة رموز أجهزة إلى إصدار النواة للجهاز
أضِف السمة kmi_symbol_list
إلى هدف kernel_build
المحدَّد في
الجهاز BUILD.bazel
. يجب أن يكون اسم قائمة الرموز بالتنسيق التالي
//common:android/abi_gki_<arch>_<device>
عرض
common-modules/virtual-device/BUILD.bazel،
على سبيل المثال:
kernel_build(
name = "virtual_device_aarch64",
base_kernel = "//common:kernel_aarch64",
kmi_symbol_list = "//common:android/abi_gki_aarch64_virtual_device",
...
module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)
إنشاء قائمة رموز أوّلية وإرسالها
إنشاء قائمة رموز فارغة في common/android/abi_gki_<arch>_<device>
بالنسبة إلى
المثال أعلاه فوق الأمر سيكون:
touch common/android/abi_gki_aarch64_virtual_device
أضِف هذا الملف إلى additional_kmi_symbol_lists
في إصدار نواة GKI الأساسية. بالنسبة
تتم إضافة //common:android/abi_gki_aarch64_virtual_device
إلى السمة
مجموعة الملفات aarch64_additional_kmi_symbol_lists
، تم الإعلان عنها في
common/BUILD.bazel.
تعديل قائمة رموز الأجهزة لملء قائمة الرموز الجديدة إرساله إلى مستودع نواة Android المشتركة.
تعديل قائمة رموز الجهاز
جميع رموز النواة الأساسية التي تستخدمها الوحدات في module_outs
من kernel_build
يجب تضمين kernel_modules
من kernel_abi
في قائمة الرموز. يمكن أن
يمكن تحقيقه من خلال تنفيذ هدف kernel_abi
باستخدام _update_symbol_list
اللاحقة. على سبيل المثال، يقوم الأمر التالي بتحديث قائمة الرموز
//common-modules/virtual-device:virtual_device_aarch64
:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list
إرسال تعديل قائمة الرموز إلى ACK
إرسال رمز تصحيح مع تغيير قائمة الرموز إلى شائعة في Android النواة (kernel) جريت لجعل الرموز الجديدة جزءًا من خوارزمية KMI.
يجب أن تتضمّن رسالة الإتمام قائمة بالرموز المُضافة أو التي تمّت إزالتها. يمكنك
إما كتابة هذه القائمة يدويًا لتحديث قائمة رموز صغيرة أو استخدام
تقرير واحد ($DIST_DIR/abi.report.short
) بعد
تحديث واجهة التطبيق الثنائية (ABI) المرجعية
التمثيل.
أثناء تحديث واجهة التطبيق الثنائية (ABI) المرجعية التمثيل قبل إرسال تحديث قائمة الرموز، فقد يؤدي ذلك إلى التخلص من الإرسال المسبق وجعل التغيير جاهزًا للإرسال بشكل أسرع. على أي حال، من فحصها وتحديثها إذا لزم الأمر أثناء الإرسال المسبق.
الإصدارات الأقدم (الإصدار 12 من نظام التشغيل Android والإصدارات الأقدم)
يمكنك استخدام أداة build_abi.sh
على النحو التالي:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list
في هذا المثال، يجب أن يتضمّن build.config.device
خيارات الضبط التالية:
vmlinux
يجب أن يكون جزءًا من قائمة
FILES
. يمكن القيام بذلك عن طريق تضمينbuild.config.aarch64
KMI_SYMBOL_LIST
يجب ضبطها وتوجيهها إلى قائمة رموز KMI لتعديلها.
بعد تعديل قائمة رموز الأجهزة، عليك أيضًا إظهار هذه التغييرات في
إصدار GKI (common/build.config.gki.aarch64
):
انسخ قائمة الرموز المعدّلة إلى
common/android/abi_gki_aarch64_<device>
.عليك التأكّد من تضمين "
android/abi_gki_aarch64_<device>
" فيADDITIONAL_KMI_SYMBOL_LISTS
فيcommon/build.config.gki.aarch64
.