در سه مقاله قبلی مسیر Boot یک PC کلاسیک را از Reset Vector تا BIOS، Bootloader و DOS دنبال کردیم. حالا همان سؤال را روی یک دستگاه Android می‌پرسیم: وقتی دکمه Power را می‌زنیم، قبل از Android و حتی قبل از Linux، اولین کد از کجا اجرا می‌شود؟

جواب کوتاه: سیستم از کدی بسیار کوچک و از پیش‌قرارگرفته داخل خود SoC آغاز می‌شود؛ مفهومی که به‌طور عمومی Boot ROM نامیده می‌شود.

SoC چیست؟

در گوشی، CPU coreها، Memory Controller، USB، Storage interfaces، بخش‌های امنیتی، GPU، DSP و بسیاری از Controllerها داخل یک System on Chip قرار گرفته‌اند. پس اولین مراحل Boot نیز داخل همین پلتفرم شروع می‌شوند؛ هنوز Android Framework، APK، /system یا boot.img اجرا نشده‌اند.

لحظه Power و Reset

PMIC و منطق Power-on ریل‌های تغذیه و Reset را طبق طراحی پلتفرم مدیریت می‌کنند. وقتی SoC از Reset خارج می‌شود، معماری سخت‌افزار یک نقطه شروع برای اجرای CPU تعریف کرده است. جزئیات Reset vector در ARM SoCهای مختلف یکسان نیست، اما اصل با PC کلاسیک مشابه است: CPU باید از یک محل از پیش‌تعریف‌شده شروع کند.

Power button
    ↓
Power / reset sequencing
    ↓
SoC leaves reset
    ↓
Internal ROM code starts
    ↓
Find / authenticate next boot stage

Boot ROM چیست؟

Boot ROM کدی است که در ROM داخلی SoC قرار دارد و در استفاده عادی قابل‌تعویض نیست. این ویژگی آن را به نقطه بسیار مناسبی برای آغاز زنجیره اعتماد تبدیل می‌کند. Boot ROM معمولاً فقط حداقل کار لازم برای bootstrap را انجام می‌دهد: تشخیص Boot source، مقداردهی اولیه محدود، خواندن مرحله بعد و در دستگاه امن verify کردن آن.

Qualcomm و MediaTek چه اسمی روی این مرحله می‌گذارند؟

Boot ROM یک اصطلاح عمومی است، نه نام مخصوص MediaTek. در بسیاری از Qualcommها اولین مرحله ROM با نام PBL — Primary Boot Loader شناخته می‌شود. در MediaTek اصطلاح BootROM/BROM رایج است. هر دو از نظر مفهومی نماینده همان نقطه بسیار اولیه داخل SoC هستند، هرچند پیاده‌سازی و نام‌گذاری‌شان فرق دارد.

                    SoC internal ROM
                           │
              ┌────────────┴────────────┐
              │                         │
          Qualcomm                  MediaTek
              │                         │
             PBL                       BROM

چرا اولین کد داخل Storage نیست؟

اگر اولین مرحله قابل‌تغییر روی UFS/eMMC بود، مهاجم می‌توانست همان نقطه شروع را جایگزین کند و تمام بررسی‌های بعدی را بی‌اثر کند. قرار گرفتن اولین مرحله در ROM داخلی و استفاده از key material یا hashهای محافظت‌شده در fuse/OTP اجازه می‌دهد Root of Trust خارج از Storage قابل‌فلش ساخته شود.

DRAM هنوز ممکن است آماده نباشد

Boot ROM باید کوچک و عمومی باشد. Initialization کامل DRAM، Clockها و Storage معمولاً به Stageهای بعد سپرده می‌شود. به همین دلیل Bootloader چندمرحله‌ای است. Stageهای اولیه اغلب از SRAM داخلی استفاده می‌کنند و پس از bring-up حافظه می‌توانند محیط غنی‌تری ایجاد کنند.

ROM stage
  ↓  minimal SRAM environment
Early stage
  ├─ clocks / PMIC setup
  ├─ DRAM training/initialization
  ├─ storage access
  └─ security checks
  ↓
Richer bootloader environment

Normal Boot و Recovery path از همین پایین جدا می‌شوند

SoC باید Stage بعدی را از eMMC/UFS یا Boot source مناسب بخواند. اگر Boot معمول شکست بخورد یا شرط خاصی برقرار باشد، بعضی پلتفرم‌ها مسیر ROM-level Download/Recovery نیز دارند. اینجا تفاوت معروف Qualcomm EDL و MediaTek BROM Download وارد داستان می‌شود.

Qualcomm: PBL با EDL یکی نیست

PBL همان کد اولیه ROM است. EDL یا Emergency Download Mode یک مسیر recovery/download بسیار پایین‌سطح در Qualcomm است. در EDL معمولاً Host ابتدا با Sahara ارتباط می‌گیرد و بعد programmer مناسب Load می‌شود؛ پس از آن Firehose می‌تواند عملیات Storage/Flash را انجام دهد.

Qualcomm
Reset → PBL
          ├─ Normal boot → next signed stage
          └─ EDL → Sahara → programmer → Firehose

MediaTek: BROM و Download Agent

در MediaTek، BROM می‌تواند مسیر Normal Boot یا Download را آغاز کند. در Download mode، BROM می‌تواند Download Agent را از USB به SRAM بگیرد. در دستگاه Secure، DA نیز می‌تواند نیازمند Authentication باشد.

MediaTek
Reset → BROM
          ├─ Normal boot → next stage
          └─ Download → DA in SRAM → flashing

Root of Trust و Chain of Trust

در یک طراحی Secure، اعتماد از یک Root سخت‌افزاری آغاز می‌شود و هر Stage قبل از اجرای Stage بعدی آن را verify می‌کند. Android Verified Boot بعدتر همین ایده را تا boot images و partitionهای Android ادامه می‌دهد.

Immutable ROM / hardware root
          ↓ verifies
Early boot stage
          ↓ verifies
Main bootloader
          ↓ AVB verifies
Android boot images
          ↓
Linux Kernel

در این لحظه Android کجاست؟

هنوز اجرا نشده است. تصاویر Android ممکن است روی Storage باشند، اما Boot ROM مستقیماً Zygote یا Kernel را اجرا نمی‌کند. اول باید Stageهای bootloader، DRAM، Storage و زنجیره امنیت آماده شوند.

مقایسه با PC کلاسیک

Classic PC                 Android/SoC
Reset                      Reset
 ↓                          ↓
BIOS ROM                   Boot ROM / PBL / BROM
 ↓                          ↓
Boot sector                Early boot stages
 ↓                          ↓
Bootloader                 Android bootloader
 ↓                          ↓
OS                         Linux + Android

خلاصه

  • Boot ROM مفهوم عمومی است و مخصوص MediaTek نیست.
  • Qualcomm معمولاً PBL را برای اولین Stage ROM به‌کار می‌برد.
  • MediaTek معمولاً BROM/BootROM می‌گوید.
  • EDL نام Boot ROM نیست؛ یک مسیر Emergency Download است.
  • Android هنوز در این مرحله اجرا نشده است.

منابع رسمی برای مطالعه بیشتر

مقاله قبلیبعدی: Qualcomm vs MediaTekبازگشت به مقالاتصفحه اصلی