پیکربندی ویژگی‌های هسته به‌عنوان واحدهای 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 فایل زیر اضافه کنید. فایل‌ها را به‌ترتیب مرتب‌شده اضافه کنید. اگر از همه فایل‌های تولیدشده مطمئن نیستید، ساخت ناموفق می‌شود و همه فایل‌های KO لازم را برای افزودن به فهرست نشان می‌دهد.

    • در android17-6.18 و نسخه‌های بالاتر، موارد را به common/bazel/modules_private.bzl اضافه کنید.
    • در android16-6.12 و نسخه‌های پایین‌تر، مواردی را به common/modules.bzl اضافه کنید.
  3. برای Android 14، همان مجموعه فایل‌های KO را از مرحله ۲، که به ترتیب صعودی برای جستجوی دودویی در زمان اجرا مرتب شده‌اند، به common/android/gki_{ARCH}_protected_modules اضافه کنید تا واحد به‌عنوان واحد GKI محافظت‌شده تعیین شود.

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

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

  6. تغییراتتان را برای بازبینی ارسال کنید. مدول‌های GKI ویژگی هسته مختص Android هستند، بنابراین وصله‌های تبدیل مدول لازم نیست به بالادست ارسال شوند. بااین‌حال، برای ارسال وصله‌های هسته مشترک 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 فایل زیر اضافه کنید. فایل‌ها را به‌ترتیب مرتب‌شده اضافه کنید. اگر از همه فایل‌های تولیدشده مطمئن نیستید، ساخت ناموفق خواهد بود و همه فایل‌های KO لازم را برای اضافه شدن به فهرست فهرست می‌کند.

    • در android17-6.18 و بالاتر، موارد را به common/bazel/modules_private.bzl اضافه کنید.
    • در android16-6.12 و نسخه‌های پایین‌تر، موارد را به `common/modules.bzl` اضافه کنید.
  3. برای Android 14، همان مجموعه فایل‌های KO از مرحله ۲ را که به‌ترتیب صعودی برای جستجوی دودویی در زمان اجرا مرتب شده‌اند به common/android/gki_{ARCH}_protected_modules اضافه کنید تا ماژول به‌عنوان ماژول GKI محافظت‌شده تعیین شود.

  4. برای Android 14 و 15، فهرست بروندادهای محافظت‌شده را به‌روز کنید تا بروندادهای واحد جدید اضافه‌شده در common/android/abi_gki_protected_exports_{ARCH} بااستفاده از tools/bazel run //common:kernel_aarch64_abi_update_protected_exports برای aarch64 را دربر بگیرد.

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

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

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

  1. برای Android 15 و نسخه‌های بالاتر، واحدی را که از محافظت‌شده به محافظت‌نشده تبدیل می‌شود به فهرست _COMMON_UNPROTECTED_MODULES_LIST در فایل زیر اضافه کنید:

    • در android17-6.18 و نسخه‌های بالاتر، موارد را به common/bazel/modules_private.bzl اضافه کنید.
    • در android16-6.12 و نسخه‌های پایین‌تر، مواردی را به common/modules.bzl اضافه کنید.
  2. برای Android 14، واحدی را که از محافظت‌شده به محافظت‌نشده تبدیل می‌شود از فهرست واحدهای محافظت‌شده در common/android/gki_protected_modules بردارید.

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

  4. تغییراتتان را برای بازبینی ارسال کنید. واحدهای 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 را صادر می‌کند می‌توان این مشکل را برطرف کرد.