سوالات متداول کرنل اندروید

این سند شامل سوالات متداول در مورد هسته اندروید است که با نام هسته Generic Kernel Image (GKI) نیز شناخته می‌شود. اگر با GKI و اصطلاحات هسته GKI آشنا نیستید، به مرور کلی هسته مراجعه کنید.

آیا لیست نمادهای رابط ماژول هسته (KMI) در یک هسته پایدار قابل تغییر است؟

تغییراتی که KMI موجود را تحت تأثیر قرار نمی‌دهند، می‌توانند به هسته‌هایی که فریز شده‌اند اضافه شوند. این تغییرات شامل توابع صادر شده جدید و ورودی‌های لیست نمادها می‌شود. برای جزئیات بیشتر، به مدیریت لیست نمادها مراجعه کنید.

آیا می‌توانم ساختارهای مورد استفاده توسط ماژول‌های فروشنده را در یک هسته پایدار تغییر دهم؟

ساختارهایی که بخشی از رابط KMI هستند، در هسته‌هایی که KMI آنها فریز شده است، قابل تغییر نیستند. قبل از فریز شدن KMI، این ساختارها قابل تغییر هستند.

آیا می‌توانم هسته را تغییر دهم، به شرطی که سازگاری باینری یا منبع را از بین نبرم؟

تغییراتی که KMI را تحت تأثیر قرار نمی‌دهند، می‌توانند طبق توضیحات موجود در وصله‌های مخصوص اندروید اعمال شوند.

GKI چگونه پیکربندی هسته را مدیریت می‌کند؟

برای اطلاعات بیشتر در مورد پیکربندی هسته، به تغییرات در gki_defconfig مراجعه کنید.

چگونه می‌توانم رفع اشکالات بالادستی برای بازنویسی ماژول‌های GKI موجود را مدیریت کنم؟

اگر یک ماژول فروشنده را بر اساس درایوری در هسته مشترک اندروید (ACK) ایجاد می‌کنید، اطمینان از انتشار رفع اشکالات از بالادست و ACK به ماژول شما به شما بستگی دارد. به طور کلی، به نفع شماست که از هسته GKI و ماژول‌های GKI بدون تغییر استفاده کنید تا این به‌روزرسانی‌ها به طور مداوم توسط گوگل ارائه شوند.

آیا آزمایش‌های اختصاصی GKI وجود دارد؟

تست‌های Vendor Test Suite (VTS) وجود دارند که تأیید می‌کنند یک نسخه GKI معتبر نصب شده است و همچنین الزامات GKI را برای هر نسخه اعمال می‌کنند. به عنوان مثال، تست‌های VTS اندروید ۱۲ برای Boot Header نسخه ۳ و برای تأیید وجود پارتیشن‌های مورد نیاز در دستگاهی که هسته ۵.۱۰ را اجرا می‌کند، وجود دارد.

چگونه می‌توانم فایل قطعه‌قطعه defconfig پروژه را برای ساخت دستگاه ایجاد کنم؟

بسیاری از دستگاه‌های سازگار با GKI علاوه بر gki_defconfig ، از یک قطعه پیکربندی برای توصیف گزینه‌های پیکربندی مورد نیاز برای ساخت ماژول‌های فروشنده استفاده می‌کنند. نمونه‌هایی از کدبیس ACK شامل Cuttlefish و DB845c هستند. هیچ راهی برای اجتناب از بررسی دستی گزینه‌های پیکربندی برای بهینه‌سازی قطعه وجود ندارد، اما scripts/diffconfig از منابع هسته برای مقایسه نتایج gki_defconfig و gki_defconfig+device.fragment مفید است.

آیا راه حلی برای اینکه modprobe - و _ را معادل هم در نظر بگیرد، وجود دارد؟

صفحه راهنمای modprobe شامل این توضیح است: « modprobe هوشمندانه یک ماژول را از هسته لینوکس اضافه یا حذف می‌کند: توجه داشته باشید که برای راحتی، هیچ تفاوتی بین _ و - در نام ماژول‌ها وجود ندارد (تبدیل خودکار underscore انجام می‌شود).» تیم GKI به قرارداد استاندارد بالادستی پایبند است، بنابراین ابزارهای فروشنده یا قراردادهای نامگذاری ماژول باید این پایبندی را در نظر بگیرند.

چگونه debugfs را برای استفاده داخلی فعال کنم؟

برای جزئیات بیشتر در مورد فعال کردن debugfs، به ویژگی‌های اشکال‌زدایی مزاحم در پایین‌دست مراجعه کنید.

چگونه می‌توانم ABI های ناسازگار بین هسته GKI را با پیکربندی ماژول خاص فعال شده، حل کنم؟

عدم تطابق ABIها بین هسته GKI و پیکربندی ماژول، نشان‌دهنده یک وابستگی ضمنی به پیکربندی ماژول است که در آن فعال کردن یک ماژول باعث می‌شود یک پیکربندی باینری در تصویر هسته حاصل ایجاد شود. برای تعیین مسیر پیش رو با تیم هسته اندروید ( kernel-team@android.com ) تماس بگیرید. پس از تعیین لیست نمادها، یک اشکال در ردیاب مشکلات ایجاد کنید و تغییری را در لیست نمادها بارگذاری کنید.