ویژگی های هسته را به عنوان ماژول های GKI پیکربندی کنید

این صفحه نحوه پیکربندی یک ویژگی هسته جدید به عنوان یک ماژول GKI یا پیکربندی یک ویژگی هسته داخلی موجود به عنوان یک ماژول GKI را پوشش می دهد.

یک ویژگی جدید را به عنوان یک ماژول GKI پیکربندی کنید

  1. برای ویژگی جدید، gki_defconfig ویرایش کنید و آیتم پیکربندی ویژگی هسته مورد نیاز را از n به m ( =m ) تنظیم کنید. این تنظیمات را در arch/arm64/configs/gki_defconfig و arch/x86/configs/gki_defconfig تنظیم کنید.

  2. فایل‌های KO ( .ko ) تولید شده برای این ویژگی را به بخش COMMON_GKI_MODULES_LIST common/modules.bzl اضافه کنید. فایل ها را به ترتیب مرتب شده اضافه کنید. اگر از همه فایل‌های تولید شده مطمئن نیستید، بیلد با شکست مواجه می‌شود و همه فایل‌های KO لازم برای اضافه شدن به لیست را فهرست می‌کند.

  3. همان مجموعه فایل‌های 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 تأیید شوند تا ماژول‌های محافظت شده رسمی باشند.

  4. مطمئن شوید که فایل‌های 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 در ساخت پلتفرم استفاده شوند.

  5. تغییرات خود را برای بررسی ارسال کنید. ماژول‌های GKI یک ویژگی هسته فقط اندروید هستند، بنابراین نیازی به ارسال وصله‌های تبدیل ماژول در بالادست نیست. با این حال، برای ارسال وصله‌های هسته مشترک Android (ACK) باید دستورالعمل‌های دیگری را دنبال کنید.

یک ویژگی داخلی هسته را به عنوان یک ماژول GKI پیکربندی کنید

  1. برای یک ویژگی هسته داخلی موجود، gki_defconfig ویرایش کنید و آیتم پیکربندی ویژگی هسته مورد نیاز را از y به m ( =m ) تنظیم کنید. این تنظیمات را در arch/arm64/configs/gki_defconfig و arch/x86/configs/gki_defconfig تنظیم کنید.

  2. فایل‌های KO ( .ko ) تولید شده برای این ویژگی را به بخش COMMON_GKI_MODULES_LIST common/modules.bzl اضافه کنید. فایل ها را به ترتیب مرتب شده اضافه کنید. اگر از همه فایل‌های تولید شده مطمئن نیستید، بیلد با شکست مواجه می‌شود و همه فایل‌های KO لازم برای اضافه شدن به لیست را فهرست می‌کند.

  3. همان مجموعه فایل‌های 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 تأیید شوند تا ماژول‌های محافظت شده رسمی باشند.

  4. مطمئن شوید که فایل‌های 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 در ساخت پلتفرم استفاده شوند.

  5. تغییرات خود را برای بررسی ارسال کنید. ماژول‌های GKI یک ویژگی هسته فقط اندروید هستند، بنابراین نیازی به ارسال وصله‌های تبدیل ماژول در بالادست نیست. با این حال، برای ارسال وصله‌های هسته مشترک Android (ACK) باید دستورالعمل‌های دیگر را دنبال کنید.

یک ماژول GKI محافظت شده را به محافظت نشده تبدیل کنید

  1. ماژول در حال تبدیل از محافظت شده به محافظت نشده را از لیست ماژول های محافظت شده در common/android/gki_protected_modules حذف کنید.

  2. با استفاده از tools/bazel run //common:kernel_aarch64_abi_update_protected_exports برای aarch64 ، فهرست صادراتی را که محافظت می‌شوند به‌روزرسانی کنید تا مواردی را از ماژول محافظت‌نشده تازه تبدیل‌شده در common/android/abi_gki_protected_exports_{ARCH} حذف کنید.

  3. تغییرات خود را برای بررسی ارسال کنید. ماژول‌های 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 صادر می‌کند، آن را اصلاح کرد.