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

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

مثالی از جریان بوت‌لودر

در اینجا یک مثال از جریان بوت لودر آورده شده است:

  1. بارگذاری و مقداردهی اولیه حافظه.

  2. دستگاه را طبق جریان بوت تأیید شده تأیید کنید.

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

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

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

  6. تصاویر بوت، مانند boot.img ، vendor_boot.img ، init_boot.img و سایر تصاویر بوت اختصاصی فروشندگان را بارگذاری کنید. این تصاویر بوت حاوی تصاویر هسته و ramdisk هستند.

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

    2. فایل‌های ramdisk و بخش bootconfig را در حافظه بارگذاری کنید تا initramfs ایجاد شود.

ویژگی‌های اضافی مرتبط با بوت‌لودر

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

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

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

  • بوت تأیید شده. بوت تأیید شده به بوت لودر اجازه می‌دهد تا اطمینان حاصل کند که تمام کدهای اجرا شده از یک منبع قابل اعتماد می‌آیند.

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

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

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

خط فرمان هسته

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

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

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

  • defconfig : از CONFIG_CMDLINE

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

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