در این مقاله یک مسیر مشترک با نام های متفاوت مسیر Qualcomm EDL و مسیر نجات Qualcomm مسیر MediaTek BROM و Download Agent تشخیص مرحله Boot در عمل

در مقاله قبل مسیر را تا Boot ROM دنبال کردیم، یعنی همان کد کوچک و ثابتی که داخل خود SoC قرار دارد. Boot ROM نمی تواند به تنهایی تمام سخت افزار گوشی را آماده کند و قرار هم نیست Android را مستقیما اجرا کند. بعد از انجام کارهای اولیه، باید کنترل را به کد کامل تری بدهد که از حافظه دستگاه بارگذاری می شود.

از همین نقطه نام هایی مثل PBL، XBL، BROM و Preloader وارد داستان می شوند. این نام ها در نگاه اول ممکن است شبیه مجموعه ای از اصطلاحات نامرتبط به نظر برسند، اما بیشترشان نقش هایی مشابه را در پیاده سازی های مختلف بازی می کنند.

یک مسیر مشترک با نام های متفاوت

اگر اسم Vendorها را برای لحظه ای کنار بگذاریم، ساختار کلی بسیار ساده است. یک کد ثابت داخل SoC اجرا می شود، یک Bootloader اولیه را از حافظه پیدا می کند و بعد مرحله به مرحله محیط کامل تری برای اجرای Linux ساخته می شود.

ROM code inside SoC
        ↓
Early Bootloader
        ↓
DRAM / Storage / Platform initialization
        ↓
Main Bootloader
        ↓
Linux Kernel

Qualcomm و MediaTek هر دو همین مسیر کلی را دارند، اما نام Stageها، جزئیات امنیتی و نحوه پیاده سازی بین نسل های مختلف آنها فرق می کند.

نقش کلی Qualcomm MediaTek
کد ثابت داخل SoC PBL BROM / BootROM
Bootloader اولیه رایج XBL یا در نسل های قدیمی تر SBL Preloader در بسیاری از محصولات Android، یا BL2 در بعضی پلتفرم ها
مسیر Recovery سطح پایین EDL BROM Download Mode
کد کمکی برای Flash Programmer / Firehose Download Agent

این جدول یک نقشه برای فهم موضوع است، نه قانون ثابت تمام چیپ ها. Boot chain می تواند با نسل SoC و طراحی سازنده گوشی تغییر کند.

مسیر Qualcomm، از PBL به XBL

در بسیاری از SoCهای Qualcomm اولین کد Boot داخل ROM با نام PBL شناخته می شود. PBL همان نقطه شروع غیرقابل تغییر زنجیره Boot است.

PBL امکانات محدودی دارد. مرحله بعد را پیدا می کند، در دستگاهی که بوت امن فعال است اعتبار آن را بررسی می کند و سپس آن را داخل حافظه Load می کند. در نسل های جدید Qualcomm معمولا نام XBL را در این قسمت می بینیم. در نسل های قدیمی تر اصطلاح SBL هم رایج بوده است.

Qualcomm

PBL in ROM
    ↓
XBL / SBL
    ↓
More hardware becomes usable
    ↓
Higher level boot environment
    ↓
Linux

مرحله ای مثل XBL دیگر محدودیت شدید PBL را ندارد. کد آن از Storage بارگذاری شده و می تواند کارهای بیشتری انجام دهد، برای نمونه DRAM را آماده کند، بخش هایی از سخت افزار پلتفرم را راه اندازی کند و Imageهای بعدی را از حافظه بخواند.

در این مرحله از مسیر Qualcomm
کنترل از ROM خارج شده و به یک Bootloader قابل به روز رسانی رسیده است. PBL داخل تراشه ثابت است، اما XBL و Stageهای بعدی معمولا به صورت Image روی حافظه دستگاه قرار دارند.
🔍 عمیق تر بشویم، XBL در Qualcomm جدید دقیقا یک Image ساده نیست

در مستندات جدید Qualcomm ساختار Boot از مدل ساده قدیمی PBL و SBL پیچیده تر شده است. برای نمونه PBL می تواند اجزایی مانند XBL-SC و Runtime مربوط به Trust Management Engine را بارگذاری و Authenticate کند.

دانستن این جزئیات برای فهم مسیر عمومی Boot ضروری نیست. نکته اصلی این است که PBL داخل ROM فقط حداقل کار ممکن را انجام می دهد و بخش بزرگ تر راه اندازی پلتفرم به Stageهای قابل بارگذاری بعدی منتقل شده است.

EDL، مسیر نجات سطح پایین در Qualcomm

همان PBL و محیط ابتدایی Qualcomm یک مسیر جدا برای Download و Recovery هم در اختیار دارد که با نام EDL شناخته می شود. این Mode قبل از Bootloader اصلی Android قرار دارد و به همین دلیل می تواند زمانی هم قابل استفاده باشد که Fastboot یا خود Android دیگر بالا نمی آیند.

در Windows این حالت معمولا با نامی شبیه Qualcomm HS-USB QDLoader 9008 دیده می شود. عدد 9008 برای تعمیرکارها آشناست، چون نشان می دهد هنوز راه ارتباطی بسیار پایینی با SoC وجود دارد.

ارتباط EDL معمولا دو مرحله اصلی دارد. در ابتدا پروتکل Sahara برای برقراری ارتباط و فرستادن یک Programmer مناسب استفاده می شود. بعد از اجرای Programmer، ارتباط وارد مرحله Firehose می شود که امکاناتی مثل خواندن، نوشتن یا پاک کردن بخش های Storage را فراهم می کند.

PC
 ↓ USB
EDL
 ↓
Sahara
 ↓
Load Programmer
 ↓
Firehose
 ↓
UFS / eMMC operations
🛠 معنی عملی 9008

دیده شدن دستگاه در EDL به این معنی نیست که Android یا Bootloader اصلی سالم است. فقط می دانیم بخش بسیار ابتدایی Qualcomm هنوز توانسته مسیر EDL را فعال کند و با PC ارتباط برقرار کند. همین موضوع برای گوشی Brick شده می تواند بسیار ارزشمند باشد.

در دستگاه های امن، EDL هم لزوما اجازه اجرای هر Programmer دلخواهی را نمی دهد. بسته به پلتفرم و سیاست سازنده، Programmer ممکن است نیاز به امضای معتبر داشته باشد.

مسیر MediaTek، از BROM به Preloader

در MediaTek اولین کد داخل SoC معمولا با نام BROM یا BootROM شناخته می شود. از نظر جایگاه، BROM همان نقش پایه ای را دارد که PBL در Qualcomm بازی می کند.

در بسیاری از محصولات Android مبتنی بر MediaTek، مرحله بعد با نام Preloader شناخته می شود. Preloader یک Early Bootloader است که از Storage بارگذاری می شود و یکی از کارهای مهم آن آماده سازی سخت افزار اولیه، مخصوصا DRAM، برای Stageهای بعدی است.

MediaTek

BROM in SoC
    ↓
Preloader
    ↓
DRAM / Platform initialization
    ↓
Later boot stages
    ↓
Linux

اینجا یک تفاوت مهم در نام گذاری وجود دارد. Preloader اصطلاح عمومی برای تمام معماری های ARM یا تمام Androidها نیست. این نام را بیشتر در مسیر Boot محصولات MediaTek می بینیم. در پلتفرم های دیگر MediaTek ممکن است همان نقش با نام BL2 یا Stageهای دیگری دیده شود.

🔍 عمیق تر بشویم، Preloader تنها مدل Boot در MediaTek نیست

حتی داخل خانواده MediaTek هم Boot stack یکسان نیست. مستندات Android بعضی پلتفرم های MediaTek مسیر Preloader به عنوان BL2 و سپس LK را نشان می دهند. در مقابل بعضی پلتفرم های جدیدتر و محصولات غیر موبایلی می توانند از TF-A، BL2 و U-Boot استفاده کنند.

بنابراین در این مجموعه وقتی از Preloader صحبت می کنیم منظور یک Stage بسیار رایج در دستگاه های Android مبتنی بر MediaTek است، نه یک قانون همیشگی برای تمام SoCهای این شرکت.

BROM و Download Agent، مسیر Download در MediaTek

BROM در MediaTek علاوه بر Boot عادی می تواند با Host از طریق USB وارد مسیر Download شود. در این حالت ابزار روی PC یک Download Agent (DA) را برای دستگاه می فرستد.

Download Agent بعد از اجرا امکانات بیشتری در اختیار ابزار Flash قرار می دهد. برای نمونه می تواند DRAM یا Storage را آماده کند و امکان کار با eMMC یا UFS را فراهم کند.

PC / Flash Tool
      ↓ USB
     BROM
      ↓
Download Agent
      ↓
DRAM / Storage initialization
      ↓
Flash operations

این مسیر هم می تواند تحت کنترل Secure Boot باشد. MediaTek قابلیتی برای DAA دارد که در صورت فعال بودن، BROM قبل از اجرای Download Agent اعتبار آن را بررسی می کند. پس ورود به BROM به معنی کنار رفتن امنیت دستگاه نیست.

BROM Mode و Preloader Mode، دو نقطه متفاوت از مسیر

در ابزارهای تعمیر و Flash دستگاه های MediaTek ممکن است اصطلاح BROM Mode و Preloader Mode را ببینیم. این دو نام سرنخ خوبی درباره جایی هستند که دستگاه در زنجیره Boot به آن رسیده است.

  • BROM Mode، ارتباط هنوز در سطح Boot ROM داخل خود SoC برقرار شده است.
  • Preloader Mode، سیستم حداقل تا جایی پیش رفته که Preloader اجرا شده و رابط مربوط به آن در دسترس قرار گرفته است.

به همین دلیل وقتی یک گوشی فقط در BROM دیده می شود، شرایط با دستگاهی که Preloader آن اجرا می شود یکسان نیست. برای عیب یابی همین تفاوت می تواند اطلاعات مهمی درباره محل توقف Boot بدهد.

از روی Mode دستگاه می توان حدس زد Boot تا کجا پیش رفته است

وضعیتی که روی PC می بینیم برداشت کلی
Qualcomm EDL / 9008 مسیر بسیار ابتدایی Qualcomm و EDL هنوز در دسترس است
MediaTek BROM Boot ROM فعال است، Stage بعدی ممکن است هنوز اجرا نشده باشد
MediaTek Preloader Boot تا اجرای Preloader پیش رفته است
Fastboot Boot chain از Stageهای اولیه عبور کرده و به Bootloader سطح بالاتری رسیده است

این نگاه در تعمیرات بسیار کاربردی است. اگر دستگاه فقط در یک Mode بسیار پایین دیده شود، انتظار داشتن Fastboot منطقی نیست، چون هنوز Boot chain به آن مرحله نرسیده است. برعکس، اگر Fastboot در دسترس باشد می دانیم چند مرحله قبلی با موفقیت اجرا شده اند.

Qualcomm                         MediaTek

PBL                              BROM
 ↓                                ↓
XBL / SBL                        Preloader / BL2
 ↓                                ↓
Higher boot stages              Higher boot stages
 ↓                                ↓
Main Bootloader                 Main Bootloader
 ↓                                ↓
Linux                            Linux

Recovery:
EDL → Sahara → Programmer       BROM → Download Agent
            ↓                               ↓
         Firehose                       Flash

پس تفاوت اصلی فقط در چند اسم نیست. هر Vendor Boot stack، سیاست امنیتی و ابزارهای Recovery خودش را دارد. اما اگر نقش هر Stage را بشناسیم، اصطلاحات مختلف دیگر آن قدر پراکنده و گیج کننده به نظر نمی رسند.

⭐ چیزی که از این مقاله باید بماند

بعد از کد ثابت داخل SoC، کنترل به Bootloaderهای قابل بارگذاری منتقل می شود. در Qualcomm معمولا با PBL و بعد XBL یا SBL روبه رو می شویم، در بسیاری از دستگاه های MediaTek مسیر از BROM به Preloader می رسد. در کنار Boot عادی، هر دو خانواده مسیرهای سطح پایین برای Recovery و Flash هم دارند.

واژه نامه کوتاه

PBL
Primary Boot Loader، اولین کد Boot داخل ROM در بسیاری از Qualcommها.
XBL
eXtensible Boot Loader، یکی از Bootloaderهای اولیه رایج در Qualcommهای جدیدتر.
SBL
Secondary Boot Loader، نام مرحله دوم Boot در بعضی نسل های قدیمی Qualcomm.
EDL
Emergency Download Mode، مسیر Recovery و Download سطح پایین Qualcomm.
BROM
BootROM، کد ثابت اولیه داخل SoCهای MediaTek.
Preloader
Early Bootloader رایج در بسیاری از دستگاه های Android مبتنی بر MediaTek.
DA
Download Agent، کدی که BROM برای عملیات Download و Flash بارگذاری می کند.
DAA
Download Agent Authentication، بررسی اعتبار DA پیش از اجرای آن.

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