Lazy loaded image
iMX6ULL是否使用SPL?
Words 1196Read Time 3 min
2025-9-11

1. iMX6ULL是否使用SPL

结论:iMX6ULL默认不使用SPL,而是使用Plugin机制。

证据分析:

defconfig文件分析
  • 检查所有iMX6ULL相关配置文件(configs/mx6ull_*_defconfig
  • 无任何配置文件包含CONFIG_SPL=y
  • 所有配置都使用imximage.cfg而非SPL启动方式
Kconfig配置分析
  • MX6ULL基础配置没有默认选择SUPPORT_SPL
  • 对比其他芯片(如MX6UL_LITESOM),明确选择了SUPPORT_SPL

2. SPL的作用和启动机制

SPL(Secondary Program Loader)的核心作用:

  1. 内存初始化:在OCRAM中运行,初始化DDR3/LPDDR2
  1. 硬件配置:时钟设置、GPIO配置、存储接口初始化
  1. 代码加载:从存储介质加载完整U-Boot到DDR
  1. 环境准备:为U-Boot proper执行准备运行环境

iMX6ULL的内存布局(支持SPL时):

SPL启动序列:

  1. BootROM → 加载SPL到OCRAM (0x00908000)
  1. SPL执行 → 初始化DDR + 时钟 + 外设
  1. SPL加载 → 从存储加载u-boot.img到DDR
  1. 跳转执行 → 跳转到DDR中的U-Boot proper

3. iMX6ULL使用Plugin机制替代SPL

Plugin机制分析:

配置方式
Plugin功能
  • DDR初始化:执行完整的DDR3/LPDDR2配置序列
  • 时钟配置:设置系统时钟和外设时钟
  • 硬件设置:GPIO、IOMUX等基础配置
  • ROM API调用:调用BootROM的pu_irom_hwcnfg_setup()
Plugin vs SPL对比
特性
Plugin机制
SPL机制
代码位置
OCRAM (plugin.bin)
OCRAM (SPL)
大小限制
~64KB
64KB (CONFIG_SPL_MAX_SIZE)
执行方式
BootROM调用
独立执行
功能范围
DDR初始化为主
完整启动链
文件系统支持
支持(FAT/EXT4)
复杂度
简单
复杂

4. 决定是否使用SPL的依据

主要考虑因素:

1. OCRAM大小限制
  • iMX6ULL: 128KB OCRAM → Plugin够用
  • iMX6Q/D: 256KB OCRAM → 更适合SPL
  • 大型芯片: 更多OCRAM → SPL优势明显
2. 启动复杂度需求
3. 存储介质要求
  • Plugin适用:SD/eMMC/QSPI等简单介质
  • SPL适用:需要文件系统、网络启动等复杂场景
4. 功耗和启动时间
  • Plugin:启动更快,功耗更低
  • SPL:功能更全,但启动较慢

5. 有无SPL的启动流程差异

无SPL启动流程(iMX6ULL默认):

有SPL启动流程:

关键差异总结:

启动阶段
无SPL (Plugin)
有SPL
阶段数
3阶段
4阶段
DDR初始化时机
Plugin中(OCRAM)
SPL中(OCRAM)
代码加载方式
BootROM直接加载
SPL智能加载
启动设备支持
固定配置
动态检测
错误处理
基础
完善
调试支持
有限
完整

6. 实际应用建议

推荐使用Plugin(默认)的场景
  • 标准开发板应用
  • 简单产品部署
  • 对启动时间要求高
  • 存储空间有限
推荐使用SPL的场景
  • 需要支持多种启动介质
  • 需要网络启动(TFTP)
  • 复杂的启动逻辑
  • 需要完整的调试支持
总的来说,iMX6ULL选择Plugin机制而非SPL是基于其128KB OCRAM限制和应用场景的合理设计选择,既满足了启动需求,又保持了简洁性和高效性。
上一篇
宏的用法
下一篇
Guide to Linux System

Comments
Loading...