در سه مقاله قبلی مسیر 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 stageBoot 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 environmentNormal 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 → FirehoseMediaTek: 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 → flashingRoot 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 هنوز در این مرحله اجرا نشده است.