نمای کلی راه‌انداز سیستم

bootloader تصویری اختصاصی از فروشنده است که مسئول بالا آوردن هسته در دستگاه است. راه‌انداز سیستم از وضعیت دستگاه محافظت می‌کند و مسئول مقداردهی اولیه محیط اجرای امن (TEE) و مقید کردن ریشه اعتماد آن است. پیش‌بارکننده همچنین تمامیت پارتیشن‌های boot و recovery را قبل‌از انتقال اجرا به هسته تأیید می‌کند.

جریان راه‌انداز سیستم نمونه

در اینجا نمونه‌ای از جریان bootloader آورده شده است:

  1. بار کردن و مقداردهی اولیه حافظه.

  2. دستگاه را براساس جریان «راه‌اندازی درستی‌سنجی‌شده» درستی‌سنجی کنید.

  3. بخش‌های راه‌اندازی، ازجمله boot،‏ dtbo،‏ init_boot، و recovery را طبق جریان «راه‌اندازی درستی‌سنجی‌شده» درستی‌سنجی کنید. به‌عنوان بخشی از این مرحله، نسخه سرصفحه تصویر راه‌اندازی را بررسی کنید و سرصفحه را براساس آن تجزیه کنید.

  4. اگر از به‌روزرسانی‌های A/B استفاده می‌شود، جایگاه فعلی را برای راه‌اندازی تعیین کنید.

  5. تعیین کنید که آیا حالت بازیابی باید راه‌اندازی شود یا نه. برای اطلاعات بیشتر، به پشتیبانی از به‌روزرسانی‌های OTA مراجعه کنید.

  6. تصاویر راه‌اندازی، مثل boot.img،‏ vendor_boot.img، init_boot.img، و دیگر تصاویر راه‌اندازی فروشنده اختصاصی را بار کنید. این تصاویر راه‌اندازی شامل تصاویر هسته و ramdisk است.

    1. هسته را به‌عنوان یک باینری فشرده خوداجرا در حافظه بارگیری کنید. هسته خودش را از حالت فشرده خارج می‌کند و شروع به اجرا در حافظه می‌کند.

    2. بار کردن دیسک‌های حافظه و بخش پیکربندی راه‌اندازی در حافظه برای ایجاد initramfs.

ویژگی‌های اضافی مربوط به راه‌انداز سیستم

در زیر فهرستی از ویژگی‌های اضافی مربوط به بوت‌لودر آورده شده است که می‌توانید پیاده‌سازی کنید:

  • هم‌پوشانی ساختار درختی دستگاه (DTO). پوشش درخت دستگاه به bootloader اجازه می‌دهد از پیکربندی‌های سخت‌افزاری مختلف پشتیبانی کند. «شیء انتقال داده» به دستگاه درخت لکه (DTB) همگردانی می‌شود که توسط راه‌انداز سیستم استفاده می‌شود.

  • تصادفی‌سازی نشانی مجازی تصویر هسته. بوت‌لودر از تصادفی‌سازی نشانی مجازی که تصویر هسته در آن بار می‌شود پشتیبانی می‌کند. برای تصادفی کردن نشانی، RANDOMIZE_BASE را در پیکربندی هسته روی true تنظیم کنید. راه‌انداز سیستم باید با ارسال مقدار u64 تصادفی در گره ساختار درختی دستگاه /chosen/kaslr-seed، آنتروپی ارائه دهد.

  • راه‌اندازی درستی‌سنجی‌شده. راه‌اندازی درستی‌سنجی‌شده به راه‌انداز سیستم اجازه می‌دهد مطمئن شود همه کدهای اجراشده از منبعی مطمئن می‌آیند.

  • پیکربندی راه‌اندازی پیکربندی راه‌اندازی در Android 12 و نسخه‌های بالاتر دردسترس است و سازوکاری برای انتقال جزئیات پیکربندی از ساخت و bootloader به سیستم‌عامل است. قبل‌از Android 12، از پارامترهای خط فرمان هسته با پیشوند androidboot استفاده می‌شود.

  • به‌روزرسانی‌های ازطریق هوا (OTA). دستگاه‌های Android در این زمینه می‌توانند به‌روزرسانی‌های OTA را برای سیستم، نرم‌افزار برنامه، و قوانین منطقه زمانی دریافت و نصب کنند. این ویژگی بر پیاده‌سازی بارکننده شما تأثیر می‌گذارد. برای اطلاعات کلی درباره OTA، به به‌روزرسانی‌های OTA مراجعه کنید. برای جزئیات پیاده‌سازی OTA مختص bootloader، پشتیبانی از به‌روزرسانی‌های OTA را ببینید.

  • اتصال نسخه. ملزم کردن نسخه کلیدهای امنیتی را به سیستم‌عامل و نسخه سطح وصله ملزم می‌کند. پیوند نسخه تضمین می‌کند که مهاجمی که ضعفی در نسخه قدیمی سیستم یا نرم‌افزار TEE پیدا می‌کند نتواند دستگاه را به نسخه آسیب‌پذیر برگرداند و از کلیدهای ایجادشده با نسخه جدیدتر استفاده کند. بوت‌لودر باید اطلاعات خاصی را برای پشتیبانی از اتصال نسخه ارائه دهد. برای اطلاعات بیشتر، به اطلاعات نسخه در دارایی‌های AVB مراجعه کنید.

خط فرمان هسته

خط فرمان هسته را از مکان‌های زیر به‌هم متصل کنید:

  • خط فرمان راه‌انداز سیستم: مجموعه‌ای از پارامترهای ثابت و پویا که توسط راه‌انداز سیستم تعیین می‌شود

  • درخت دستگاه: از گره chosen/bootargs

  • ‫defconfig: از CONFIG_CMDLINE

  • ‫boot.img: از خط فرمان (برای جبران و اندازه، به system/core/mkbootimg/bootimg.h مراجعه کنید

از Android 12، برای پارامترهای androidboot.* که باید به فضای کاربری Android منتقل کنیم، می‌توانیم به‌جای خط فرمان هسته از bootconfig استفاده کنیم.