ضبط ميزات kernel على أنّها وحدات GKI

تتناول هذه الصفحة كيفية ضبط ميزة جديدة في النواة كوحدة صورة النواة العامة (GKI) أو ضبط ميزة حالية مضمّنة في النواة كوحدة GKI.

ضبط ميزة جديدة كوحدة GKI

  1. بالنسبة إلى الميزة الجديدة، عدِّل gki_defconfig واضبط عنصر الإعداد للميزة المطلوبة في النواة من n إلى m (=m). اضبط هذا الإعداد في كل من arch/arm64/configs/gki_defconfig و arch/x86/configs/gki_defconfig.

  2. أضِف ملفات KO (.ko) التي تم إنشاؤها للميزة إلى قسم _COMMON_GKI_MODULES_LIST في الملف التالي. أضِف الملفات بترتيب تصاعدي. إذا لم تكن متأكدًا من جميع الملفات التي تم إنشاؤها، سيتعذّر إنشاء الإصدار وسيتم إدراج جميع ملفات KO الضرورية التي يجب إضافتها إلى القائمة.

    • في android17-6.18 والإصدارات الأحدث، أضِف العناصر إلى common/bazel/modules_private.bzl.
    • في android16-6.12 والإصدارات الأقدم، أضِف العناصر إلى common/modules.bzl.
  3. بالنسبة إلى Android 14، أضِف المجموعة نفسها من ملفات KO من الخطوة 2، مرتّبة تصاعديًا للبحث الثنائي في وقت التشغيل، إلى common/android/gki_{ARCH}_protected_modules لتحديد الوحدة كوحدة GKI محمية.

  4. بالنسبة إلى Android 14 و15، عدِّل قائمة عمليات التصدير لتشمل عمليات التصدير التي تمت إضافتها مؤخرًا في common/android/abi_gki_protected_exports_ARCHITECTURE. على سبيل المثال، لتعديل القائمة، شغِّل tools/bazel run //common:kernel_aarch64_abi_update_protected_exports لـ aarch64.

  5. تأكَّد من نسخ ملفات 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 في إصدار النظام الأساسي.

  6. أرسِل التغييرات للمراجعة. وحدات GKI هي ميزة في النواة خاصة بنظام Android فقط، لذا لا يلزم إرسال تصحيحات تحويل الوحدات إلى المصدر الرئيسي. ومع ذلك، يجب اتّباع الإرشادات الأخرى لإرسال تصحيحات Android Common Kernel (ACK).

ضبط ميزة مضمّنة في النواة كوحدة GKI

  1. بالنسبة إلى ميزة حالية مضمّنة في النواة، عدِّل gki_defconfig واضبط عنصر الإعداد للميزة المطلوبة في النواة من y إلى m (=m). اضبط هذا الإعداد في كل من arch/arm64/configs/gki_defconfig وarch/x86/configs/gki_defconfig.

  2. أضِف ملفات KO (.ko) التي تم إنشاؤها للميزة إلى قسم _COMMON_GKI_MODULES_LIST في الملف التالي. أضِف الملفات بترتيب تصاعدي. إذا لم تكن متأكدًا من جميع الملفات التي تم إنشاؤها، سيتعذّر إنشاء الإصدار وسيتم إدراج جميع ملفات KO الضرورية التي يجب إضافتها إلى القائمة.

    • في android17-6.18 والإصدارات الأحدث، أضِف العناصر إلى common/bazel/modules_private.bzl.
    • في android16-6.12 والإصدارات الأقدم، أضِف العناصر إلى `common/modules.bzl.
  3. بالنسبة إلى Android 14، أضِف المجموعة نفسها من ملفات KO من الخطوة 2، مرتّبة تصاعديًا للبحث الثنائي في وقت التشغيل، إلى common/android/gki_{ARCH}_protected_modules لتحديد الوحدة كوحدة GKI محمية.

  4. بالنسبة إلى Android 14 و15، عدِّل قائمة عمليات التصدير المحمية لتشمل عمليات التصدير من الوحدة التي تمت إضافتها مؤخرًا في common/android/abi_gki_protected_exports_{ARCH} باستخدام tools/bazel run //common:kernel_aarch64_abi_update_protected_exports لـ aarch64.

  5. تأكَّد من نسخ ملفات 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 في إصدار النظام الأساسي.

  6. أرسِل التغييرات للمراجعة. وحدات GKI هي ميزة في النواة خاصة بنظام Android فقط، لذا لا يلزم إرسال تصحيحات تحويل الوحدات إلى المصدر الرئيسي. ومع ذلك، يجب اتّباع الإرشادات الأخرى لإرسال تصحيحات Android Common Kernel (ACK).

تحويل وحدة GKI محمية إلى وحدة غير محمية

  1. بالنسبة إلى Android 15 والإصدارات الأحدث، أضِف الوحدة التي يتم تحويلها من محمية إلى غير محمية إلى قائمة _COMMON_UNPROTECTED_MODULES_LIST في الملف التالي:

    • في android17-6.18 والإصدارات الأحدث، أضِف العناصر إلى common/bazel/modules_private.bzl.
    • في android16-6.12 والإصدارات الأقدم، أضِف العناصر إلى common/modules.bzl.
  2. بالنسبة إلى Android 14، أزِل الوحدة التي يتم تحويلها من محمية إلى غير محمية من قائمة الوحدات المحمية في common/android/gki_protected_modules.

  3. بالنسبة إلى Android 14 و15، عدِّل قائمة عمليات التصدير المحمية لاستبعاد عمليات التصدير من الوحدة غير المحمية التي تم تحويلها مؤخرًا في common/android/abi_gki_protected_exports_{ARCH} باستخدام tools/bazel run //common:kernel_aarch64_abi_update_protected_exports لـ aarch64.

  4. أرسِل التغييرات للمراجعة. وحدات 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، إذا كانت الوحدة غير الموقَّعة نسخة مخصّصة.