از 27 مارس 2025، توصیه می کنیم از android-latest-release به جای aosp-main برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
ویژگی های هسته را به عنوان ماژول های GKI پیکربندی کنید
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
این صفحه نحوه پیکربندی یک ویژگی هسته جدید به عنوان یک ماژول GKI یا پیکربندی یک ویژگی هسته داخلی موجود به عنوان یک ماژول GKI را پوشش می دهد.
یک ویژگی جدید را به عنوان یک ماژول GKI پیکربندی کنید
برای ویژگی جدید، gki_defconfig را ویرایش کنید و آیتم پیکربندی ویژگی هسته مورد نیاز را از n به m ( =m ) تنظیم کنید. این تنظیمات را در arch/arm64/configs/gki_defconfig و arch/x86/configs/gki_defconfig تنظیم کنید.
فایلهای KO ( .ko ) تولید شده برای این ویژگی را به بخش COMMON_GKI_MODULES_LISTcommon/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-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 یک ویژگی هسته فقط اندروید هستند، بنابراین نیازی به ارسال وصلههای تبدیل ماژول در بالادست نیست. با این حال، برای ارسال وصلههای هسته مشترک Android (ACK) باید دستورالعملهای دیگری را دنبال کنید.
یک ویژگی داخلی هسته را به عنوان یک ماژول GKI پیکربندی کنید
برای یک ویژگی هسته داخلی موجود، gki_defconfig را ویرایش کنید و آیتم پیکربندی ویژگی هسته مورد نیاز را از y به m ( =m ) تنظیم کنید. این تنظیمات را در arch/arm64/configs/gki_defconfig و arch/x86/configs/gki_defconfig تنظیم کنید.
فایلهای KO ( .ko ) تولید شده برای این ویژگی را به بخش COMMON_GKI_MODULES_LISTcommon/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-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 یک ویژگی هسته فقط اندروید هستند، بنابراین نیازی به ارسال وصلههای تبدیل ماژول در بالادست نیست. با این حال، برای ارسال وصلههای هسته مشترک Android (ACK) باید دستورالعملهای دیگر را دنبال کنید.
یک ماژول GKI محافظت شده را به محافظت نشده تبدیل کنید
برای Android 15 و بالاتر، ماژول در حال تبدیل از محافظت شده به محافظت نشده را به لیست 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 (ACK) باید دستورالعملهای دیگر را دنبال کنید.
راهنمای سریع وضوح نقض نماد ماژولهای GKI
هنگامی که ماژولهای بدون علامت، حفاظت از نماد را برای ماژولهای GKI نقض میکنند، ممکن است در حین بارگذاری ماژول با دو نوع خطا مواجه شود که منجر به شکست میشود.
فایل module.ko یک ماژول فروشنده بدون امضا است و تلاش می کند تا نماد صادر شده از ماژول GKI some_kernel_function در حین بارگذاری، بدون اینکه در لیست نمادهای فروشنده فهرست شود، حل کند.
رزولوشن:
اگر 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 صادر میکند، آن را اصلاح کرد.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-29 بهوقت ساعت هماهنگ جهانی."],[],[],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."]]