اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release بدلاً من aosp-main لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
تتناول هذه الصفحة كيفية ضبط ميزة جديدة في 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 اللازمة لإضافتها إلى القائمة.
بالنسبة إلى 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" (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 اللازمة لإضافتها إلى القائمة.
بالنسبة إلى 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 في kernel.
يمكن استخدام الوحدات في أرشيف system_dlkm_staging_archive.tar.gz كข้อมูล لإنشاء system_dlkm.img في إصدار المنصة.
أرسِل التغييرات لمراجعتها. وحدات GKI هي ميزة خاصة بالنواة في نظام التشغيل Android فقط، لذا لا يُشترط إرسال تصحيحات تحويل الوحدات إلى الإصدار العلني. ومع ذلك، يجب اتّباع الإرشادات الأخرى لإرسال تصحيحات النواة المشتركة لنظام التشغيل Android (ACK).
تحويل وحدة GKI محمية إلى وحدة غير محمية
بالنسبة إلى الإصدار 15 من نظام التشغيل Android والإصدارات الأحدث، أضِف الوحدة التي يتم تحويلها من محمية إلى
غير محمية إلى قائمة COMMON_UNPROTECTED_MODULES_LIST فيملف
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 (ACK).
دليل سريع لحلّ انتهاكات رموز وحدات GKI
عندما تنتهك الوحدات غير الموقَّعة حماية الرموز المُطبَّقة على وحدات GKI،
قد تحدث نوعان من الأخطاء أثناء تحميل الوحدة، ما يؤدي إلى
تعطُّل العملية.
ملف 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، إذا كانت الوحدة غير الموقَّعة هي إصدار مخصّص.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Configure kernel features as GKI modules\n\nThis page covers how to configure a new kernel feature as a GKI module or\nconfigure an existing built-in kernel feature as a GKI module.\n| **Note:** Changes that result in a new GKI module or that change the protection status of a GKI module must be approved by Google.\n\nConfigure a new feature as a GKI module\n---------------------------------------\n\n1. For the new feature, edit `gki_defconfig` and set the required kernel\n feature's config item from `n` to `m` (`=m`). Set this setting in both\n `arch/arm64/configs/gki_defconfig` and `arch/x86/configs/gki_defconfig`.\n\n2. Add the KO (`.ko`) files generated for the feature\n to the `COMMON_GKI_MODULES_LIST` section of `common/modules.bzl`. Add the\n files in a sorted order. If you're unsure of all the files generated,\n the build fails and lists all the necessary KO files to be added to the list.\n\n3. For Android 14, add the same set of KO files from step 2, sorted in ascending\n order for binary search at runtime, to\n `common/android/gki_{ARCH}_protected_modules` to designate the module as a\n protected GKI module.\n\n4. For Android 14 and 15, update the list of exports so that it includes the\n newly-added exports in `common/android/abi_gki_protected_exports_`\u003cvar translate=\"no\"\u003eARCHITECTURE\u003c/var\u003e. For example, to update the list, run\n `tools/bazel run //common:kernel_aarch64_abi_update_protected_exports` for\n `aarch64`.\n\n5. Make sure newly added KO files from step 2 are copied to the kernel's\n `out/\u003candroidX-Y.Z\u003e/dist/system_dlkm.img` and\n `out/`\u003cvar translate=\"no\"\u003eandroidX-Y.Z\u003c/var\u003e`/dist/system_dlkm_staging_archive.tar.gz`.\n Modules in the `system_dlkm_staging_archive.tar.gz` archive can be used as\n input to generate the `system_dlkm.img` in the platform build.\n\n6. Submit your changes for review. GKI modules are an Android-only kernel\n feature, so module conversion patches aren't required to be submitted\n upstream. However, you must follow other guidelines to submit\n [Android Common Kernel (ACK) patches](/docs/core/architecture/kernel/kernel-code#ack-patches).\n\nConfigure a kernel built-in feature as a GKI module\n---------------------------------------------------\n\n1. For an existing built-in kernel feature, edit `gki_defconfig` and set the\n required kernel feature's config item from `y` to `m` (`=m`). Set this\n setting in both `arch/arm64/configs/gki_defconfig` and\n `arch/x86/configs/gki_defconfig`.\n\n2. Add the KO (`.ko`) files generated for the feature to the\n `COMMON_GKI_MODULES_LIST` section of `common/modules.bzl`. Add the files\n in a sorted order. If you're unsure of all the files generated,\n the build fails and lists all the necessary KO files to be added to the list.\n\n3. For Android 14, add the same set of KO files from step 2, sorted in ascending\n order for binary search at runtime, to\n `common/android/gki_{ARCH}_protected_modules` to designate the module as a\n protected GKI module.\n\n4. For Android 14 and 15, update the list of exports that are protected to\n include ones from the newly added module in\n `common/android/abi_gki_protected_exports_{ARCH}` using `tools/bazel run\n //common:kernel_aarch64_abi_update_protected_exports` for `aarch64`.\n\n5. Make sure newly converted module KO files from step 2 are copied to the\n kernel's `out/\u003candroidX-Y.Z\u003e/dist/system_dlkm.img` and\n `out/`\u003cvar translate=\"no\"\u003eandroidX-Y.Z\u003c/var\u003e`/dist/system_dlkm_staging_archive.tar.gz`.\n Modules in the `system_dlkm_staging_archive.tar.gz` archive can be used as\n input to generate the `system_dlkm.img` in the platform build.\n\n6. Submit your changes for review. GKI modules are an Android-only kernel\n feature, so module conversion patches aren't required to be submitted\n upstream. However, you must follow the other guidelines to submit\n [Android Common Kernel (ACK)\n patches](/docs/core/architecture/kernel/kernel-code#ack-patches).\n\nConvert a protected GKI module to unprotected\n---------------------------------------------\n\n1. For Android 15 and higher, add the module being converted from protected to\n unprotected to the `COMMON_UNPROTECTED_MODULES_LIST` list in\n `common/modules.bzl` file.\n\n2. For Android 14, remove the module being converted from protected to\n unprotected from the list of protected modules at\n `common/android/gki_protected_modules`.\n\n3. For Android 14 and 15, update the list of exports that are protected to\n exclude ones from the newly converted unprotected module in the\n `common/android/abi_gki_protected_exports_{ARCH}` using `tools/bazel run\n //common:kernel_aarch64_abi_update_protected_exports` for `aarch64`.\n\n4. Submit your changes for review. GKI modules are an Android-only kernel\n feature, so module conversion patches aren't required to be submitted\n upstream. However, you must follow the other guidelines to submit\n [Android Common Kernel (ACK)\n patches](/docs/core/architecture/kernel/kernel-code#ack-patches).\n\nGKI modules symbol violation resolution quick guide\n---------------------------------------------------\n\nWhen unsigned modules violate the symbol protection in place for GKI modules,\ntwo types of errors may be encountered during module loading, resulting in\nfailure.\n\n### 1. Unsigned module using the protected symbol\n\n**Error:**\n\n`module: Protected symbol: some_kernel_function (err -13)`\n\n**Cause:**\n\nThe `module.ko` file is an unsigned vendor module and attempts to resolve the\nGKI module exported symbol `some_kernel_function` during loading, without\nbeing listed in the vendor symbol list.\n\n**Resolution:**\n\nIf `module.ko` is not a protected GKI module, updating the symbol list will\nresolve the error by including `some_kernel_function` in the vendor symbol list.\nAlternatively, use the GKI version of `module.ko`.\n\n### 2. Unsigned module exporting the protected symbol\n\n**Error:**\n\n`module: exports protected symbol some_kernel_function`\n\n**Cause:**\n\nThe module exporting the `some_kernel_function` is a protected GKI module, and\n`module.ko` is likely an unsigned custom version of that module. When\n`module.ko` tries to export `some_kernel_function`, which can only be exported\nby a signed GKI module, loading fails with this message.\n\n**Resolution:**\n\nThis can be corrected by using the GKI version of the module that exports\n`some_kernel_function`, if the unsigned module is a custom version."]]