این صفحه نحوه پیکربندی ویژگی هسته جدید بهعنوان پیمانه GKI یا پیکربندی ویژگی هسته داخلی موجود بهعنوان پیمانه GKI را پوشش میدهد.
پیکربندی ویژگی جدید بهعنوان واحد GKI
برای ویژگی جدید،
gki_defconfigرا ویرایش کنید و عنصر پیکربندی ویژگی موردنیاز هسته را ازnبهm(=m) تنظیم کنید. این تنظیم را درarch/arm64/configs/gki_defconfigوarch/x86/configs/gki_defconfigتنظیم کنید.فایلهای KO (
.ko) تولیدشده برای ویژگی را به بخش_COMMON_GKI_MODULES_LISTفایل زیر اضافه کنید. فایلها را بهترتیب مرتبشده اضافه کنید. اگر از همه فایلهای تولیدشده مطمئن نیستید، ساخت ناموفق میشود و همه فایلهای KO لازم را برای افزودن به فهرست نشان میدهد.- در
android17-6.18و نسخههای بالاتر، موارد را بهcommon/bazel/modules_private.bzlاضافه کنید. - در
android16-6.12و نسخههای پایینتر، مواردی را بهcommon/modules.bzlاضافه کنید.
- در
برای Android 14، همان مجموعه فایلهای KO را از مرحله ۲، که به ترتیب صعودی برای جستجوی دودویی در زمان اجرا مرتب شدهاند، به
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 جدیداً اضافهشده از مرحله ۲ در هسته
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
برای ویژگی هسته داخلی موجود،
gki_defconfigرا ویرایش کنید و مورد پیکربندی ویژگی هسته موردنیاز را ازyبهm(=m) تنظیم کنید. این تنظیم را هم درarch/arm64/configs/gki_defconfigو هم درarch/x86/configs/gki_defconfigتنظیم کنید.فایلهای KO (
.ko) تولیدشده برای ویژگی را به بخش_COMMON_GKI_MODULES_LISTفایل زیر اضافه کنید. فایلها را بهترتیب مرتبشده اضافه کنید. اگر از همه فایلهای تولیدشده مطمئن نیستید، ساخت ناموفق خواهد بود و همه فایلهای KO لازم را برای اضافه شدن به فهرست فهرست میکند.- در
android17-6.18و بالاتر، موارد را بهcommon/bazel/modules_private.bzlاضافه کنید. - در
android16-6.12و نسخههای پایینتر، موارد را به `common/modules.bzl` اضافه کنید.
- در
برای Android 14، همان مجموعه فایلهای KO از مرحله ۲ را که بهترتیب صعودی برای جستجوی دودویی در زمان اجرا مرتب شدهاند به
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 ماژول تازه تبدیلشده از مرحله ۲ در
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 محافظتشده به محافظتنشده
برای Android 15 و نسخههای بالاتر، واحدی را که از محافظتشده به محافظتنشده تبدیل میشود به فهرست
_COMMON_UNPROTECTED_MODULES_LISTدر فایل زیر اضافه کنید:- در
android17-6.18و نسخههای بالاتر، موارد را بهcommon/bazel/modules_private.bzlاضافه کنید. - در
android16-6.12و نسخههای پایینتر، مواردی را به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: Protected symbol: some_kernel_function (err -13)
علت:
فایل module.ko یک واحد فروشنده بدون امضا است و تلاش میکند نماد صادرشده واحد GKI some_kernel_function را درحین بارگیری بدون اینکه در فهرست نماد فروشنده فهرست شده باشد حل کند.
وضوح:
اگر module.ko یک ماژول GKI محافظتشده نباشد، بهروزرسانی فهرست نمادها با گنجاندن some_kernel_function در فهرست نمادهای فروشنده، خطا را برطرف میکند.
یا از نسخه GKI module.ko استفاده کنید.
۲. واحد امضانشدهای که نماد محافظتشده را صادر میکند
خطا:
module: exports protected symbol some_kernel_function
علت:
واحدی که some_kernel_function را صادر میکند واحد GKI محافظتشده است، و
module.ko احتمالاً نسخه سفارشی امضانشده آن واحد است. وقتی module.ko سعی میکند some_kernel_function را صادر کند، که فقط میتواند
توسط واحد GKI امضاشده صادر شود، بار کردن با این پیام ناموفق است.
وضوح:
اگر واحد بدون امضا نسخه سفارشی باشد، بااستفاده از نسخه GKI واحدی که
some_kernel_function را صادر میکند میتوان این مشکل را برطرف کرد.