ویژگی های هسته را به عنوان ماژول های 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. برای Android 14، همان مجموعه فایل‌های KO را از مرحله 2، که به ترتیب صعودی برای جستجوی باینری در زمان اجرا مرتب شده‌اند، به common/android/gki_{ARCH}_protected_modules اضافه کنید تا ماژول را به‌عنوان یک ماژول محافظت‌شده GKI تعیین کنید.

  4. برای Android 14 تا 16، فهرست صادرات را به‌روزرسانی کنید تا شامل صادرات‌های تازه اضافه‌شده در common/android/abi_gki_protected_exports_ ARCHITECTURE باشد. برای مثال، برای به‌روزرسانی فهرست، tools/bazel run //common:kernel_aarch64_abi_update_protected_exports برای aarch64 اجرا کنید.

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

  6. تغییرات خود را برای بررسی ارسال کنید. ماژول‌های 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. برای Android 14، همان مجموعه فایل‌های KO را از مرحله 2، که به ترتیب صعودی برای جستجوی باینری در زمان اجرا مرتب شده‌اند، به common/android/gki_{ARCH}_protected_modules اضافه کنید تا ماژول را به‌عنوان یک ماژول محافظت‌شده GKI تعیین کنید.

  4. برای Android 14 تا 16، فهرست صادرات محافظت شده را به‌روزرسانی کنید تا شامل مواردی از ماژول جدید اضافه شده در common/android/abi_gki_protected_exports_{ARCH} (یا common/gki/{ARCH}/protected_exports برای Android 16) با استفاده از tools/bazel run //common:kernel_aarch64_abi_update_protected_exports aarch64 .

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

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

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

  1. برای Android 15 و بالاتر، ماژول در حال تبدیل از محافظت شده به محافظت نشده را به لیست COMMON_UNPROTECTED_MODULES_LIST در فایل common/modules.bzl اضافه کنید.

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

  3. برای Android 14 تا 16، فهرست صادرات محافظت شده را به‌روزرسانی کنید تا مواردی را از ماژول محافظت‌نشده تازه تبدیل‌شده در common/android/abi_gki_protected_exports_{ARCH} (یا common/gki/{ARCH}/protected_exports برای Android 16) با استفاده از tools/bazel run //common:kernel_aarch64_abi_update_protected_exports برای aarch64 .

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