Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Exynos 4412 啟動流程深度剖析:iROM、BL1、BL2 階段載入位置、大小限制與校驗機制

編輯:Linux 教學

前言

Exynos 4412(Cortex-A4 四核心)採用三階段啟動流程:iROM → BL1 → BL2。理解各階段在 SD 卡上的儲存位移、iRAM 載入位址、大小限制與校驗機制,是裸機開發、Bootloader 移植與安全啟動配置的前提。本文依據三星官方文件整理完整鏈路。

啟動階段總覽

階段程式碼來源載入者載入目標關鍵動作
iROM晶片內部 ROM(廠燒、無原始碼)硬體自動內部 SRAM (iRAM)初始化時鐘/記憶體/中斷,依 OM 腳選啟動裝置,載入 BL1
BL1三星提供(二進位、無原始碼)iROMiRAM 0x02021400初始化 DDR/時鐘/電源,載入 BL2
BL2開發者編寫(U-Boot SPL / 自訂裸機)BL1iRAM 0x02023400初始化完整 DDR、載入主 Bootloader (U-Boot) 或 Kernel 至 DDR

一、SD 卡儲存佈局(以 512 Bytes/Sector 為單位)


Sector 0 (0x000)           : 保留(MBR/分區表)
Sector 1 (0x200)           : BL1 起始位置 (512 Bytes offset)
    大小限制:8 KB (16 sectors)
    校驗:前 16 Bytes 為 Header
        Offset 0x00 : BL1 大小 (Bytes)
        Offset 0x04 : Reserved (0)
        Offset 0x08 : Checksum (全檔加總)
        Offset 0x0C : Reserved (0)

Sector 17 (0x2200)         : BL2 起始位置 (512 + 8KB = 8704 Bytes offset)
    大小限制:14 KB - 4 Bytes = 14332 Bytes
    最後 4 Bytes:Checksum (由 mkbl2 工具計算填入)

iROM 流程圖

OM 腳選啟動裝置表

BL1/BL2 SD 卡位置與 iRAM 映射

二、iROM 關鍵流程

  1. 關閉 Watchdog、中斷、MMU、Data Cache;啟用 Instruction Cache、清 TLB。
  2. 其餘 Core 進入 WFI (Wait For Interrupt),僅 Core 0 運行。
  3. 判斷冷啟動 vs 喚醒:喚醒則直接跳轉 BL1 恢復向量。
  4. 初始化 IRQ/SVC 模式堆疊指標(指向 iRAM 內部區域)。
  5. 讀取 OM[2:0] 腳位決定啟動裝置:
    000 eMMC、001 SD Card、010 NAND、011 USB、100 UART…
  6. 從 SD 卡 Sector 1 讀取 8KB 至 iRAM 0x02021400。
  7. 計算校驗和並與 Header 比對 → 解密(安全啟動模式)→ 跳轉 0x02021400 執行 BL1。

三、BL1 關鍵流程

  1. 初始化中斷控制器、堆疊、時鐘、電源域。
  2. 從 SD 卡 Sector 17 讀取 14KB 至 iRAM 0x02023400。
  3. 驗證 BL2 尾部 4 Bytes 校驗和。
  4. 跳轉 0x02023400 執行 BL2。

BL1 流程圖

四、BL2 製作實務(以裸機流水燈為例)


# 1. 編譯裸機程式
arm-linux-gcc -c -o led.o led.S
arm-linux-ld -T led.lds -N led.o -o led.elf
arm-linux-objcopy -O binary -S led.elf led.bin

# 2. 製作 BL2(自動計算 checksum 並填入尾部 4 Bytes)
./mkbl2 led.bin bl2.bin 14336   # 14336 = 14KB

# 3. 燒錄 SD 卡
dd if=bl1.bin of=/dev/sdX bs=512 seek=1 conv=notrunc
dd if=bl2.bin of=/dev/sdX bs=512 seek=17 conv=notrunc

五、常見問題與對策

現象可能原因對策
iROM 無法載入 BL1OM 腳配置錯誤、SD 卡格式不對、BL1 超過 8KB、校驗和錯誤確認 OM 腳、重新製作 BL1、用 mk4412 重算 checksum
BL1 無法載入 BL2BL2 超過 14KB-4B、校驗和錯誤、SD 卡 Sector 17 之後資料損毀縮減 BL2 體積、重新 mkbl2、檢查 SD 卡壞塊
BL2 跳轉後當機DDR 未正確初始化、堆疊指標錯誤、跳轉位址偏移對照三星 BL1 文件補全 DDR 初始化序列

六、安全啟動擴充(Secure Boot)

  • iROM 內建公開金鑰,驗證 BL1 簽名(RSA-2048/AES-128)。
  • BL1 驗證 BL2 簽名,建立信任鏈。
  • 生產產品需向三星申請簽名服務,開發階段可用 NONSECURE 模式繞過。
Copyright © Windows教程網 All Rights Reserved