تتناول هذه الصفحة كيفية ضبط ميزة جديدة في 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 اللازمة لإضافتها إلى القائمة.(اختياري) بالنسبة إلى الإصدار 15 من Android والإصدارات الأحدث، يمكنك تخطّي هذه الخطوة.
أضِف المجموعة نفسها من ملفات KO من الخطوة 2، مرتبةً بترتيب تصاعدي لبحث ملف ثنائي أثناء التشغيل، إلى
common/android/gki_{ARCH}_protected_modules
لتحديد الوحدة على أنّها وحدة GKI محمية.عدِّل قائمة عمليات التصدير لتشمل عمليات التصدير التي تمت إضافتها مؤخرًا في
common/android/abi_gki_protected_exports_ARCHITECTURE
. على سبيل المثال، لتعديل القائمة، شغِّلtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
لـaarch64
. يجب أن تحصل الوحدات المصنّفة على أنّها وحدات GKI محمية على موافقة Google لتكون وحدات محمية رسمية.تأكَّد من نسخ ملفات 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" (ACK).
ضبط ميزة مضمّنة في النواة على أنّها وحدة 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
لـaarch64
. يجب أن تحصل الوحدات المصنّفة على أنّها وحدات GKI محمية على موافقة Google لتكون وحدات محمية رسمية.تأكَّد من نسخ ملفات KO للوحدات التي تم تحويلها حديثًا من الخطوة 2 إلى
out/<androidX-Y.Z>/dist/system_dlkm.img
وout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
في kernel. يمكن استخدام الوحدات في أرشيفsystem_dlkm_staging_archive.tar.gz
كข้อมูล لإنشاءsystem_dlkm.img
في إصدار المنصة.أرسِل التغييرات لمراجعتها. وحدات GKI هي ميزة خاصة بالنواة في نظام التشغيل Android فقط، لذا لا يُشترط إرسال تصحيحات تحويل الوحدات إلى الإصدار العلني. ومع ذلك، يجب اتّباع الإرشادات الأخرى لإرسال تصحيحات النواة المشتركة لنظام التشغيل Android (ACK).
تحويل وحدة GKI محمية إلى وحدة غير محمية
- بالنسبة إلى الإصدار 14 من Android والإصدارات الأقدم: أزِل الوحدة
التي يتم تحويلها من محمية إلى غير محمية من قائمة الوحدات
المحمية في
common/android/gki_protected_modules
.
- بالنسبة إلى Android 15 والإصدارات الأحدث: أضِف الوحدة التي تتم تحويلها من محمية إلى غير محمية إلى قائمة
COMMON_UNPROTECTED_MODULES_LIST
في ملفcommon/modules.bzl
.
- بالنسبة إلى الإصدار 14 من Android والإصدارات الأقدم: أزِل الوحدة
التي يتم تحويلها من محمية إلى غير محمية من قائمة الوحدات
المحمية في
عدِّل قائمة عمليات التصدير المحمية لاستبعاد عمليات التصدير من الوحدة غير المحمية التي تم تحويلها حديثًا في
common/android/abi_gki_protected_exports_{ARCH}
باستخدامtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
لـaarch64
.أرسِل التغييرات لمراجعتها. وحدات GKI هي ميزة خاصة بالنواة في نظام التشغيل Android فقط، لذا لا يُشترط إرسال تصحيحات تحويل الوحدات إلى الإصدار العلني. ومع ذلك، يجب اتّباع الإرشادات الأخرى لإرسال تصحيحات النواة المشتركة لنظام التشغيل Android (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
، إذا كانت الوحدة غير الموقَّعة هي إصدار مخصّص.