لتقليل مساحة الرموز والأنواع التي يجب الحفاظ على ثباتها، تتوفّر في نواة GKI إمكانات لحصر الرموز المُصدَّرة على الرموز التي تحتاج إليها الوحدات فقط. بالنسبة إلى الوحدات التي تم تجميعها خارجيًا، يجب أن يكون لديك قائمة بالرموز المستخدَمة للسماح بتصديرها من خلال نواة GKI. على سبيل المثال،
يتم تخزين الرموز التي تستخدمها الوحدات في
Cuttlefish
في
gki/aarch64/symbols/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أو لم يتم تحديدها، ستجمِّع قائمة الرموز الرموز استنادًا إلى وحدات النواة التي تشير إلى الرمز. بخلاف ذلك، تكون قائمة الرموز قائمة مرتّبة بالرموز المستخدَمة من قِبل جميع وحدات النواة.
راجِع
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 في هذه القائمة.
اضبط هذه الوحدات على أن تكون غير موقَّعة، وإلا قد تكون قائمة الرموز فارغة. لإجراء ذلك، أضِف هذا السطر إلى أجزاء إعدادات النواة:
# CONFIG_MODULE_SIG_ALL is not set
راجِع
common-modules/virtual-device/virtual_device_core.fragment
للحصول على مثال.
إضافة قائمة رموز الجهاز إلى تجميع نواة الجهاز
أضِف السمة kmi_symbol_list إلى هدف kernel_build المُحدَّد في BUILD.bazel الخاص بالجهاز. يجب أن يكون اسم قائمة الرموز بالتنسيق
//common:gki/<arch>/symbols/<device>.
راجِع
common-modules/virtual-device/BUILD.bazel للحصول على مثال:
kernel_build(
name = "virtual_device_aarch64",
base_kernel = "//common:kernel_aarch64",
kmi_symbol_list = "//common:gki/aarch64/symbols/virtual_device",
...
module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)
إنشاء قائمة رموز أولية وإرسالها
أنشِئ قائمة رموز فارغة في common/gki/<arch>/symbols/<device>. بالنسبة إلى المثال أعلاه، سيكون الأمر على النحو التالي:
touch common/gki/aarch64/symbols/virtual_deviceأضِف هذا الملف إلى additional_kmi_symbol_lists لتجميع نواة GKI الأساسية. على
سبيل المثال، تتم إضافة //common:gki/aarch64/symbols/virtual_device إلى
aarch64_additional_kmi_symbol_lists مجموعة ملفات، المُعلَن عنها في
common/BUILD.bazel.
عدِّل قائمة رموز الجهاز لملء قائمة الرموز الجديدة و أرسِلها إلى مستودع Android Common Kernel.
تعديل قائمة رموز الجهاز
يجب تضمين جميع رموز النواة الأساسية المستخدَمة من قِبل الوحدات في 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 Common Kernel gerrit لجعل الرموز الجديدة جزءًا من واجهة KMI.
يجب أن تتضمّن رسالة الالتزام قائمة بالرموز المُضافة أو المُزالة. يمكنك
كتابة هذه القائمة يدويًا لتعديل قائمة رموز صغيرة أو استخدام
$DIST_DIR/abi_stgdiff/abi.report.short التقرير بعد
تعديل تمثيل واجهة ABI
المرجعية.
على الرغم من أنّه ليس مطلوبًا تعديل تمثيل واجهة ABI المرجعية قبل إرسال تعديل قائمة الرموز، قد يؤدي ذلك إلى إزالة خطوات التحقق المسبق الإضافية وجعل التغيير جاهزًا للإرسال بشكل أسرع. في أي حال، يتم التحقق من ذلك وتعديله إذا لزم الأمر أثناء التحقق المسبق.
التعامل مع قوائم الرموز (Android 13)
يتوافق Android 13 مع كل من Kleaf ونصوص التجميع القديمة، لذا يمكنك إدارة قوائم الرموز إما كما هو موضّح في الأقسام السابقة أو كما هو موضّح في القسم التالي.
التعامل مع قوائم الرموز (Android 12 والإصدارات الأقدم)
استخدِم أداة 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.