این صفحه نحوه پیکربندی یک ویژگی هسته جدید به عنوان یک ماژول GKI یا پیکربندی یک ویژگی هسته داخلی موجود به عنوان یک ماژول GKI را پوشش می دهد.
یک ویژگی جدید را به عنوان یک ماژول GKI پیکربندی کنید
برای ویژگی جدید،
gki_defconfig
ویرایش کنید و آیتم پیکربندی ویژگی هسته مورد نیاز را ازn
به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 تعیین کنید. با استفاده ازtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
برایaarch64
، فهرست صادرات محافظت شده را بهروزرسانی کنید تا مواردی را از ماژول جدید اضافه شده درcommon/android/abi_gki_protected_exports_{ARCH}
اضافه کنید. ماژولهایی که بهعنوان ماژولهای محافظتشده GKI تعیین میشوند همچنان باید توسط Google تأیید شوند تا ماژولهای محافظت شده رسمی باشند.مطمئن شوید که فایلهای 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_LIST
common/modules.bzl
اضافه کنید. فایل ها را به ترتیب مرتب شده اضافه کنید. اگر از همه فایلهای تولید شده مطمئن نیستید، بیلد با شکست مواجه میشود و همه فایلهای KO لازم برای اضافه شدن به لیست را فهرست میکند.همان مجموعه فایلهای KO را از مرحله 2 که به ترتیب صعودی برای جستجوی باینری در زمان اجرا مرتب شدهاند، به
common/android/gki_{ARCH}_protected_modules
اضافه کنید تا ماژول را بهعنوان یک ماژول محافظتشده GKI تعیین کنید. با استفاده ازtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
برایaarch64
، فهرست صادرات محافظت شده را بهروزرسانی کنید تا مواردی را از ماژول جدید اضافه شده درcommon/android/abi_gki_protected_exports_{ARCH}
اضافه کنید. ماژولهایی که بهعنوان ماژولهای محافظتشده GKI تعیین میشوند همچنان باید توسط Google تأیید شوند تا ماژولهای محافظت شده رسمی باشند.مطمئن شوید که فایلهای 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 محافظت شده را به محافظت نشده تبدیل کنید
ماژول در حال تبدیل از محافظت شده به محافظت نشده را از لیست ماژول های محافظت شده در
common/android/gki_protected_modules
حذف کنید.با استفاده از
tools/bazel run //common:kernel_aarch64_abi_update_protected_exports
برایaarch64
، فهرست صادراتی را که محافظت میشوند بهروزرسانی کنید تا مواردی را از ماژول محافظتنشده تازه تبدیلشده درcommon/android/abi_gki_protected_exports_{ARCH}
حذف کنید.تغییرات خود را برای بررسی ارسال کنید. ماژولهای GKI یک ویژگی هسته فقط اندروید هستند، بنابراین نیازی به ارسال وصلههای تبدیل ماژول در بالادست نیست. با این حال، برای ارسال وصلههای هسته مشترک Android (ACK) باید دستورالعملهای دیگر را دنبال کنید.
راهنمای سریع وضوح نقض نماد ماژولهای GKI
هنگامی که ماژولهای بدون علامت، حفاظت از نماد را برای ماژولهای GKI نقض میکنند، ممکن است در حین بارگذاری ماژول با دو نوع خطا مواجه شود که منجر به شکست میشود.
1. ماژول بدون علامت با استفاده از نماد محافظت شده
خطا:
module: Protected symbol: some_kernel_function (err -13)
علت:
فایل 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
صادر میکند، آن را اصلاح کرد.