تتناول هذه الصفحة كيفية ضبط ميزة جديدة في النواة كوحدة صورة النواة العامة (GKI) أو ضبط ميزة حالية مضمّنة في النواة كوحدة GKI.
ضبط ميزة جديدة كوحدة GKI
بالنسبة إلى الميزة الجديدة، عدِّل
gki_defconfigواضبط عنصر الإعداد للميزة المطلوبة في النواة منnإلىm(=m). اضبط هذا الإعداد في كل منarch/arm64/configs/gki_defconfigوarch/x86/configs/gki_defconfig.أضِف ملفات KO (
.ko) التي تم إنشاؤها للميزة إلى قسم_COMMON_GKI_MODULES_LISTفي الملف التالي. أضِف الملفات بترتيب تصاعدي. إذا لم تكن متأكدًا من جميع الملفات التي تم إنشاؤها، سيتعذّر إنشاء الإصدار وسيتم إدراج جميع ملفات KO الضرورية التي يجب إضافتها إلى القائمة.- في
android17-6.18والإصدارات الأحدث، أضِف العناصر إلىcommon/bazel/modules_private.bzl. - في
android16-6.12والإصدارات الأقدم، أضِف العناصر إلىcommon/modules.bzl.
- في
بالنسبة إلى Android 14، أضِف المجموعة نفسها من ملفات KO من الخطوة 2، مرتّبة تصاعديًا للبحث الثنائي في وقت التشغيل، إلى
common/android/gki_{ARCH}_protected_modulesلتحديد الوحدة كوحدة GKI محمية.بالنسبة إلى Android 14 و15، عدِّل قائمة عمليات التصدير لتشمل عمليات التصدير التي تمت إضافتها مؤخرًا في
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في الملف التالي. أضِف الملفات بترتيب تصاعدي. إذا لم تكن متأكدًا من جميع الملفات التي تم إنشاؤها، سيتعذّر إنشاء الإصدار وسيتم إدراج جميع ملفات KO الضرورية التي يجب إضافتها إلى القائمة.- في
android17-6.18والإصدارات الأحدث، أضِف العناصر إلىcommon/bazel/modules_private.bzl. - في
android16-6.12والإصدارات الأقدم، أضِف العناصر إلى `common/modules.bzl.
- في
بالنسبة إلى Android 14، أضِف المجموعة نفسها من ملفات KO من الخطوة 2، مرتّبة تصاعديًا للبحث الثنائي في وقت التشغيل، إلى
common/android/gki_{ARCH}_protected_modulesلتحديد الوحدة كوحدة GKI محمية.بالنسبة إلى Android 14 و15، عدِّل قائمة عمليات التصدير المحمية لتشمل عمليات التصدير من الوحدة التي تمت إضافتها مؤخرًا في
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في الملف التالي:- في
android17-6.18والإصدارات الأحدث، أضِف العناصر إلىcommon/bazel/modules_private.bzl. - في
android16-6.12والإصدارات الأقدم، أضِف العناصر إلى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، إذا كانت الوحدة غير الموقَّعة نسخة مخصّصة.