این صفحه نحوه پیکربندی یک ویژگی جدید هسته به عنوان یک ماژول 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اضافه کنید.
- در
برای اندروید ۱۴، همان مجموعه فایلهای KO از مرحله ۲ را که به ترتیب صعودی برای جستجوی دودویی در زمان اجرا مرتب شدهاند، به
common/android/gki_{ARCH}_protected_modulesاضافه کنید تا ماژول به عنوان یک ماژول GKI محافظتشده تعیین شود.برای اندروید ۱۴ و ۱۵، لیست اکسپورتها را بهروزرسانی کنید تا اکسپورتهای تازه اضافه شده در
common/android/abi_gki_protected_exports_ ARCHITECTUREرا نیز شامل شود. برای مثال، برای بهروزرسانی لیست،tools/bazel run //common:kernel_aarch64_abi_update_protected_exportsforaarch64را اجرا کنید.مطمئن شوید که فایلهای KO که به تازگی از مرحله ۲ اضافه شدهاند، در فایلهای
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 یک ویژگی مختص هسته اندروید هستند، بنابراین نیازی به ارسال وصلههای تبدیل ماژول به بالادست نیست. با این حال، برای ارسال وصلههای هسته مشترک اندروید (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` اضافه کنید.
- در
برای اندروید ۱۴، همان مجموعه فایلهای KO از مرحله ۲ را که به ترتیب صعودی برای جستجوی دودویی در زمان اجرا مرتب شدهاند، به
common/android/gki_{ARCH}_protected_modulesاضافه کنید تا ماژول به عنوان یک ماژول GKI محافظتشده تعیین شود.برای اندروید ۱۴ و ۱۵، لیست اکسپورتهای محافظتشده را بهروزرسانی کنید تا شامل اکسپورتهای ماژول تازه اضافهشده در
common/android/abi_gki_protected_exports_{ARCH}با استفاده ازtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsforaarch64نیز بشود.مطمئن شوید که فایلهای ماژول KO که به تازگی از مرحله ۲ تبدیل شدهاند، در فایلهای
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 یک ویژگی مختص هسته اندروید هستند، بنابراین نیازی به ارسال وصلههای تبدیل ماژول به بالادست نیست. با این حال، برای ارسال وصلههای هسته مشترک اندروید (ACK) باید دستورالعملهای دیگر را دنبال کنید.
تبدیل یک ماژول GKI محافظتشده به ماژول محافظتنشده
برای اندروید ۱۵ و بالاتر، ماژولی که از حالت محافظتشده به حالت محافظتنشده تبدیل میشود را به لیست
_COMMON_UNPROTECTED_MODULES_LISTدر فایل زیر اضافه کنید:- در
android17-6.18و بالاتر، موارد را بهcommon/bazel/modules_private.bzlاضافه کنید. - در
android16-6.12و پایینتر، آیتمها را بهcommon/modules.bzlاضافه کنید.
- در
برای اندروید ۱۴، ماژولی که از حالت محافظتشده به حالت محافظتنشده تبدیل میشود را از فهرست ماژولهای محافظتشده در
common/android/gki_protected_modulesحذف کنید.برای اندروید ۱۴ و ۱۵، لیست اکسپورتهای محافظتشده را بهروزرسانی کنید تا آنهایی که از ماژول محافظتنشدهی تازه تبدیلشده در
common/android/abi_gki_protected_exports_{ARCH}حذف شدهاند، با استفاده ازtools/bazel run //common:kernel_aarch64_abi_update_protected_exportsforaarch64حذف شوند.تغییرات خود را برای بررسی ارسال کنید. ماژولهای GKI یک ویژگی مختص هسته اندروید هستند، بنابراین نیازی به ارسال وصلههای تبدیل ماژول به بالادست نیست. با این حال، برای ارسال وصلههای هسته مشترک اندروید (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 صادر میکند، این مشکل را اصلاح کرد.