本文部分内容来自http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User‘s_Guide,另一部分内容由Jesse Guo创作,原始出处为http://jexbat.com/2016/BBB-bootmode/,最后一部分参考zy812248258,http://blog.csdn.net/zy812248258/article/details/39252733,在此向作者表示感谢。
BeagleBone 的核心处理器是 AM3358,AM335x 有四个不同的启动阶段:
(1)ROM Code(处理器内部固化代码)
(2)SPL(Secondary Program Loader)
(3)U-BOOT
(4)Linux Kernel
为什么 AM335x 有多个启动阶段呢?直接从启动源加载 U-Boot 启动不是很方便?
一个全功能的U-Boot可能会超过400KB,因此不可能直接将它加载进内部RAM中直接运行,因此要分阶段。首先,第一步的 ROM Code (固化代码)不可能太复杂,ROM大小是一个限制,最重要的还是因为其所能获取的系统信息太少,所以处理器只能使用简单的方法去寻找能完成复杂功能的代码,而后将处理器初始化工作交给它来完成。其次,SPL (MLO)也不能很复杂,因为 ROM Code 只能将它加载到处理器内部 RAM 中运行,一般处理器的内部 RAM 都要小于128KB,其大小注定其不能完成很复杂的功能,所以 SPL 需要初始化 DDR 再加更复杂的代码加载到 DDR 中运行。到了在 DDR RAM 中执行的 Bootloader(U-Boot),其功能就比较完善了,此时就可以启动操作系统了。
第一阶段:ROM Code
ROM Code 是芯片上电复位之