Exynos 4412(Cortex-A4 四核心)採用三階段啟動流程:iROM → BL1 → BL2。理解各階段在 SD 卡上的儲存位移、iRAM 載入位址、大小限制與校驗機制,是裸機開發、Bootloader 移植與安全啟動配置的前提。本文依據三星官方文件整理完整鏈路。
| 階段 | 程式碼來源 | 載入者 | 載入目標 | 關鍵動作 |
|---|---|---|---|---|
| iROM | 晶片內部 ROM(廠燒、無原始碼) | 硬體自動 | 內部 SRAM (iRAM) | 初始化時鐘/記憶體/中斷,依 OM 腳選啟動裝置,載入 BL1 |
| BL1 | 三星提供(二進位、無原始碼) | iROM | iRAM 0x02021400 | 初始化 DDR/時鐘/電源,載入 BL2 |
| BL2 | 開發者編寫(U-Boot SPL / 自訂裸機) | BL1 | iRAM 0x02023400 | 初始化完整 DDR、載入主 Bootloader (U-Boot) 或 Kernel 至 DDR |
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 工具計算填入)



000 eMMC、001 SD Card、010 NAND、011 USB、100 UART…
# 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 無法載入 BL1 | OM 腳配置錯誤、SD 卡格式不對、BL1 超過 8KB、校驗和錯誤 | 確認 OM 腳、重新製作 BL1、用 mk4412 重算 checksum |
| BL1 無法載入 BL2 | BL2 超過 14KB-4B、校驗和錯誤、SD 卡 Sector 17 之後資料損毀 | 縮減 BL2 體積、重新 mkbl2、檢查 SD 卡壞塊 |
| BL2 跳轉後當機 | DDR 未正確初始化、堆疊指標錯誤、跳轉位址偏移 | 對照三星 BL1 文件補全 DDR 初始化序列 |
NONSECURE 模式繞過。Linux crontab 實戰筆記:用戶級/系統級配置、常見陷阱(環境變數/2分鐘延遲/郵件風暴)、最佳實踐與維基百科詞條精華
Wine 中文亂碼終極解決方案:註冊表字體替換與 SimSun 映射實戰
Linux rsync 遠端同步備份完整指南:六大工作模式、核心參數表、實戰範例
Linux MTD/CFI 閃存驅動架構深度解析:多分區、背靠背與 CFI 探測機制
Squid 3 反向代理加速架構部署全流程:從編譯安裝到生產級配置調優
2017 年 3 月全球作業系統市場份額:Win7 穩居榜首,XP 在中國仍是絕對霸主
Ubuntu Linux 從源碼編譯安裝軟件完整指南:依賴解決、配置參數與卸載管理
移除 Linux 後刪除 GRUB 開機選單四大實戰方案:fdisk/mbr、dd 還原、Clear MBR 工具、GRUB 命令列引導 Windows