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

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

نمونه جریان بوت لودر

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

  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. ramdisks و بخش bootconfig را در حافظه بارگذاری کنید تا initramfs ایجاد کنید.

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

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

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

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

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

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

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

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

خط فرمان هسته

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

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

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

  • defconfig : از CONFIG_CMDLINE

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

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