本帖最后由 xcoder 于 2016-3-15 22:18 编辑
预备03 pcDuino板启动流程
pcDuino板支持从多种SoC片外存储介质启动,包括SD卡、NANDFlash、SPI Nor Flash以及USB设备。图3.1描述了整个启动的流程。
图3.1 pcDuino板启动设备选择流程 上电后,SoC内置ROM中固化的boot程序(boot0)会根据配置引脚状态选择从哪些设备启动,可以看到,SoC的配置引脚的状态决定了是否直接从USB设备启动。如果配置引脚状态为0,即低电平时直接从USB设备启动;否则依次尝试从不同的设备启动,如果从某一个设备启动成功则不再尝试后续设备,一旦所有设备都启动失败,最后仍旧从USB设备启动。 在这个过程中,启动设备的选择、初始化都是由boot0完成,它在SoC芯片出厂时就被固化片内ROM中,虽然通常开发人员不必关注实现细节,但仍需要关注几个要点: 1、上电后首先被运行。ARM复位的起始指令位置0x00000000,boot0的代码起始指令就被映射到该地址,因此上电后直接运行boot0代码。 2、boot0仅仅负责选择启动设备,校验、加载启动设备中保存的boot程序,最后运行交出控制权。所以,更加复杂功能需要由启动设备中的boot实现。 3、boot0会将启动设备的中的boot程序加载到片内的RAM中,然后运行。通常片内RAM容量较小,这就要求启动设备的中的boot程序不能太大。
整个启动过程(包括boot0)可分为5个阶段,分别是boot0、SPL、u-boot、linux和rootfs。
图3.2 pcDuino板启动流程 SPL(Second Program Loader):是精简后的u-boot,主要工作包括,
- 初始化ARM处理器
- 初始化串口控制台
- 配置时钟
- 初始化片外RAM
- 初始化启动设备(保存u-boot的设备)
- 加载完整的u-boot程序到片外RAM并运行
u-boot:提供了更加丰富的功能,包括外设的访问,而且提供了交互式的命令行。最终需要将linux镜像加载到RAM中,运行linux。
linux:linux操作系统镜像文件。
rootfs:根文件系统镜像文件,它可以存在RAM中,也可以存在SD卡某一分区中,linux启动后会将其挂载,根文件系统里面包含了linux必须的可执行程序和一些库文件。
在接下来的学习中,我们将使用SD卡做为启动设备,将自己编译的u-boot、linux等镜像保存的在SD卡中。从启动流程上看,boot0 首先从SDC0(CARD0)设备寻找boot,查看pcDuino板原理图,SoC侧SDC0引脚定义:
图3.3 CARD0引脚 pcDuino板SD卡插槽原理图:
图3.4 SD卡槽接口 pcDuino板上的SD卡插槽与SDC0对应,换句话说,boot0会首先访问SD卡之后再访问其它启动设备,这为SD卡启动提供硬件上的保证。
|