تغطي هذه الصفحة كيفية تكوين ميزة kernel جديدة كوحدة GKI أو تكوين ميزة kernel مضمنة موجودة كوحدة GKI.
قم بتكوين ميزة جديدة كوحدة GKI
بالنسبة للميزة الجديدة، قم بتحرير
gki_defconfig
وقم بتعيين عنصر تكوين ميزة kernel المطلوبة منn
إلىm
(=m
). اضبط هذا الإعداد في كل منarch/arm64/configs/gki_defconfig
وarch/x86/configs/gki_defconfig
.أضف ملفات KO (
.ko
) التي تم إنشاؤها للميزة إلى قسمCOMMON_GKI_MODULES_LIST
فيcommon/modules.bzl
. أضف الملفات بترتيب فرزها. إذا لم تكن متأكدًا من جميع الملفات التي تم إنشاؤها، فسيفشل الإنشاء ويسرد جميع ملفات KO الضرورية المراد إضافتها إلى القائمة.أضف نفس مجموعة ملفات 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
foraarch64
. لا تزال الوحدات المخصصة كوحدات GKI المحمية بحاجة إلى موافقة Google لتكون وحدات محمية رسميًا.تأكد من نسخ ملفات 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
في بناء النظام الأساسي.أرسل تغييراتك للمراجعة. تعد وحدات GKI إحدى ميزات kernel لنظام التشغيل Android فقط، لذا لا يلزم إرسال تصحيحات تحويل الوحدات إلى المنبع. ومع ذلك، يجب عليك اتباع إرشادات أخرى لإرسال تصحيحات Android Common Kernel (ACK) .
قم بتكوين ميزة مدمجة في kernel كوحدة GKI
بالنسبة لميزة kernel المضمنة الموجودة، قم بتحرير
gki_defconfig
وقم بتعيين عنصر تكوين ميزة kernel المطلوبة منy
إلىm
(=m
). اضبط هذا الإعداد في كل منarch/arm64/configs/gki_defconfig
وarch/x86/configs/gki_defconfig
.أضف ملفات KO (
.ko
) التي تم إنشاؤها للميزة إلى قسمCOMMON_GKI_MODULES_LIST
فيcommon/modules.bzl
. أضف الملفات بترتيب فرزها. إذا لم تكن متأكدًا من جميع الملفات التي تم إنشاؤها، فسيفشل الإنشاء ويسرد جميع ملفات KO الضرورية المراد إضافتها إلى القائمة.أضف نفس مجموعة ملفات 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
foraarch64
. لا تزال الوحدات المخصصة كوحدات GKI المحمية بحاجة إلى موافقة Google لتكون وحدات محمية رسميًا.تأكد من نسخ ملفات 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
في بناء النظام الأساسي.أرسل تغييراتك للمراجعة. تعد وحدات GKI إحدى ميزات kernel لنظام التشغيل Android فقط، لذا لا يلزم إرسال تصحيحات تحويل الوحدات إلى المنبع. ومع ذلك، يجب عليك اتباع الإرشادات الأخرى لإرسال تصحيحات Android Common Kernel (ACK) .
تحويل وحدة GKI المحمية إلى غير محمية
قم بإزالة الوحدة التي يتم تحويلها من محمية إلى غير محمية من قائمة الوحدات المحمية على
common/android/gki_protected_modules
.قم بتحديث قائمة الصادرات المحمية لاستبعاد تلك من الوحدة النمطية غير المحمية المحولة حديثًا في
common/android/abi_gki_protected_exports_{ARCH}
باستخدامtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
.أرسل تغييراتك للمراجعة. تعد وحدات 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
، إذا كانت الوحدة غير الموقعة عبارة عن إصدار مخصص.