تكوين ميزات kernel كوحدات GKI النمطية

تغطي هذه الصفحة كيفية تكوين ميزة kernel جديدة كوحدة GKI أو تكوين ميزة kernel مضمنة موجودة كوحدة GKI.

قم بتكوين ميزة جديدة كوحدة GKI

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

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

  3. أضف نفس مجموعة ملفات KO من الخطوة 2، مرتبة بترتيب تصاعدي للبحث الثنائي في وقت التشغيل، إلى common/android/gki_{ARCH}_protected_modules لتعيين الوحدة كوحدة GKI محمية. قم بتحديث قائمة الصادرات المحمية لتشمل تلك من الوحدة المضافة حديثًا في common/android/abi_gki_protected_exports_{ARCH} باستخدام tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 . لا تزال الوحدات المخصصة كوحدات GKI المحمية بحاجة إلى موافقة Google لتكون وحدات محمية رسميًا.

  4. تأكد من نسخ ملفات KO المضافة حديثًا من الخطوة 2 إلى kernel's out/<androidX-YZ>/dist/system_dlkm.img و out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz . يمكن استخدام الوحدات الموجودة في أرشيف system_dlkm_staging_archive.tar.gz كمدخل لإنشاء system_dlkm.img في بناء النظام الأساسي.

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

قم بتكوين ميزة مدمجة في kernel كوحدة GKI

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

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

  3. أضف نفس مجموعة ملفات KO من الخطوة 2، مرتبة بترتيب تصاعدي للبحث الثنائي في وقت التشغيل، إلى common/android/gki_{ARCH}_protected_modules لتعيين الوحدة كوحدة GKI محمية. قم بتحديث قائمة الصادرات المحمية لتشمل تلك من الوحدة المضافة حديثًا في common/android/abi_gki_protected_exports_{ARCH} باستخدام tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 . لا تزال الوحدات المخصصة كوحدات GKI المحمية بحاجة إلى موافقة Google لتكون وحدات محمية رسميًا.

  4. تأكد من نسخ ملفات KO للوحدة المحولة حديثًا من الخطوة 2 إلى kernel out/<androidX-YZ>/dist/system_dlkm.img و out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz . يمكن استخدام الوحدات الموجودة في أرشيف system_dlkm_staging_archive.tar.gz كمدخل لإنشاء system_dlkm.img في بناء النظام الأساسي.

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

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

  1. قم بإزالة الوحدة التي يتم تحويلها من محمية إلى غير محمية من قائمة الوحدات المحمية على common/android/gki_protected_modules .

  2. قم بتحديث قائمة الصادرات المحمية لاستبعاد تلك من الوحدة النمطية غير المحمية المحولة حديثًا في common/android/abi_gki_protected_exports_{ARCH} باستخدام tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 .

  3. أرسل تغييراتك للمراجعة. تعد وحدات GKI إحدى ميزات kernel لنظام التشغيل 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 ، إذا كانت الوحدة غير الموقعة عبارة عن إصدار مخصص.