توضّح هذه الصفحة كيفية ضبط ميزة جديدة في النواة كوحدة GKI أو كيفية ضبط ميزة حالية مضمّنة في النواة كوحدة GKI.
ضبط ميزة جديدة كوحدة GKI
بالنسبة إلى الميزة الجديدة، عدِّل
gki_defconfigواضبط عنصر إعداد الميزة المطلوبة في النواة منnإلىm(=m). اضبط هذا الإعداد في كل منarch/arm64/configs/gki_defconfigوarch/x86/configs/gki_defconfig.أضِف ملفات KO (
.ko) التي تم إنشاؤها للميزة إلى قسمCOMMON_GKI_MODULES_LISTفيcommon/modules.bzl. أضِف الملفات بترتيب محدّد. إذا لم تكن متأكدًا من جميع الملفات التي تم إنشاؤها، سيتعذّر إنشاء الإصدار وسيتم إدراج جميع ملفات KO الضرورية التي يجب إضافتها إلى القائمة.بالنسبة إلى Android 14، أضِف المجموعة نفسها من ملفات KO من الخطوة 2، مرتّبة بترتيب تصاعدي للبحث الثنائي في وقت التشغيل، إلى
common/android/gki_{ARCH}_protected_modulesلتحديد الوحدة النمطية كوحدة GKI محمية.بالنسبة إلى الإصدارَين 14 و15 من نظام التشغيل Android، عدِّل قائمة عمليات التصدير لتشمل عمليات التصدير المضافة حديثًا في
common/android/abi_gki_protected_exports_ARCHITECTURE. على سبيل المثال، لتعديل القائمة، شغِّلtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsلـaarch64.تأكَّد من نسخ ملفات KO المضافة حديثًا من الخطوة 2 إلى
out/<androidX-Y.Z>/dist/system_dlkm.imgوout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzفي النواة. يمكن استخدام الوحدات في أرشيفsystem_dlkm_staging_archive.tar.gzكمدخل لإنشاءsystem_dlkm.imgفي إصدار النظام الأساسي.أرسِل تغييراتك للمراجعة. وحدات GKI هي ميزة خاصة بنواة Android فقط، لذا لا يلزم إرسال تصحيحات تحويل الوحدات إلى المصدر. ومع ذلك، يجب اتّباع إرشادات أخرى لإرسال تصحيحات Android Common Kernel (ACK).
ضبط ميزة مدمجة في النواة كوحدة GKI
بالنسبة إلى ميزة مضمّنة حالية في النواة، عدِّل
gki_defconfigواضبط عنصر الإعدادات الخاص بميزة النواة المطلوبة منyإلىm(=m). اضبط هذا الإعداد في كل منarch/arm64/configs/gki_defconfigوarch/x86/configs/gki_defconfig.أضِف ملفات KO (
.ko) التي تم إنشاؤها للميزة إلى القسمCOMMON_GKI_MODULES_LISTفيcommon/modules.bzl. أضِف الملفات بترتيب محدّد. إذا لم تكن متأكدًا من جميع الملفات التي تم إنشاؤها، سيتعذّر إنشاء الإصدار وسيتم إدراج جميع ملفات KO الضرورية التي يجب إضافتها إلى القائمة.بالنسبة إلى Android 14، أضِف المجموعة نفسها من ملفات KO من الخطوة 2، مرتّبة بترتيب تصاعدي للبحث الثنائي في وقت التشغيل، إلى
common/android/gki_{ARCH}_protected_modulesلتحديد الوحدة النمطية كوحدة GKI محمية.في الإصدارَين 14 و15 من نظام التشغيل Android، عدِّل قائمة عمليات التصدير المحمية لتشمل عمليات التصدير من الوحدة المضافة حديثًا في
common/android/abi_gki_protected_exports_{ARCH}باستخدامtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsلـaarch64.تأكَّد من نسخ ملفات KO للوحدات التي تم تحويلها حديثًا من الخطوة 2 إلى
out/<androidX-Y.Z>/dist/system_dlkm.imgوout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzفي النواة. يمكن استخدام الوحدات في أرشيفsystem_dlkm_staging_archive.tar.gzكمدخل لإنشاءsystem_dlkm.imgفي إصدار النظام الأساسي.أرسِل تغييراتك للمراجعة. وحدات GKI هي ميزة خاصة بنواة Android فقط، لذا لا يلزم إرسال تصحيحات تحويل الوحدات إلى المصدر. ومع ذلك، يجب اتّباع الإرشادات الأخرى لإرسال تصحيحات Android Common Kernel (ACK).
تحويل وحدة GKI محمية إلى وحدة غير محمية
في نظام التشغيل Android 15 والإصدارات الأحدث، أضِف الوحدة النمطية التي يتم تحويلها من محمية إلى غير محمية إلى قائمة
COMMON_UNPROTECTED_MODULES_LISTفي ملفcommon/modules.bzl.في نظام التشغيل Android 14، أزِل الوحدة النمطية التي يتم تحويلها من محمية إلى غير محمية من قائمة الوحدات النمطية المحمية في
common/android/gki_protected_modules.في نظامَي التشغيل Android 14 و15، عدِّل قائمة عمليات التصدير المحمية لاستبعاد تلك التي تم تحويلها حديثًا من وحدة غير محمية في
common/android/abi_gki_protected_exports_{ARCH}باستخدامtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsلـaarch64.أرسِل تغييراتك للمراجعة. وحدات GKI هي ميزة خاصة بنواة Android فقط، لذا لا يلزم إرسال تصحيحات تحويل الوحدات إلى المصدر. ومع ذلك، يجب اتّباع الإرشادات الأخرى لإرسال تصحيحات Android Common Kernel (ACK).
دليل البدء السريع لحلّ مشكلة انتهاك رموز وحدات GKI
عندما تنتهك الوحدات غير الموقّعة الحماية من الرموز المطبّقة على وحدات GKI، قد يحدث نوعان من الأخطاء أثناء تحميل الوحدات، ما يؤدي إلى حدوث عطل.
1. وحدة غير موقَّعة تستخدم الرمز المحمي
الخطأ:
module: Protected symbol: some_kernel_function (err -13)
السبب:
الملف module.ko هو وحدة مورّد غير موقّعة، ويحاول حل رمز some_kernel_function الذي تم تصديره من وحدة GKI أثناء التحميل، بدون إدراجه في قائمة رموز المورّد.
الحل:
إذا لم يكن module.ko وحدة GKI محمية، سيؤدي تعديل قائمة الرموز إلى حلّ الخطأ من خلال تضمين some_kernel_function في قائمة رموز المورّد.
يمكنك بدلاً من ذلك استخدام إصدار GKI من module.ko.
2- وحدة غير موقَّعة تصدّر الرمز المحمي
الخطأ:
module: exports protected symbol some_kernel_function
السبب:
الوحدة التي تصدّر some_kernel_function هي وحدة GKI محمية، ومن المحتمل أنّ module.ko هي نسخة مخصّصة غير موقَّعة من تلك الوحدة. عندما تحاول module.ko تصدير some_kernel_function، التي لا يمكن تصديرها إلا من خلال وحدة GKI موقَّعة، يتعذّر التحميل وتظهر هذه الرسالة.
الحل:
يمكن تصحيح ذلك باستخدام إصدار GKI من الوحدة التي تصدّر
some_kernel_function، إذا كانت الوحدة غير الموقّعة إصدارًا مخصّصًا.