第一:启动方式基本简介
Linux系统支持多种启动方式,可以从SD/EMMC、NAND Flash、Flash等启动。BOOT的处理过程是发生在芯片上电以后,芯片会根据BOOT_MODE[1:0]的设置来选择BOOT方式。通过修改BOOT_MODE[1:0]对应的GPIO高低电平来选择启动方式,所有的开发板都使用这种方式,有一个BOOT_MODE1引脚和BOOT_MODE0引脚,这两个引脚对应开发板的两个引脚原理图如下
其中BOOT_MODE1和BOOT_MODE0在芯片内部是有100K下拉电阻的,所以默认是0。
第二:启动模式的选择
当BOOT_MODE为1,BOOT_MODE0为0的时候此模式使能,在此模式下,芯片会执 行内部的 boot ROM 代码,这段 boot ROM 代码会进行硬件初始化(一部分外设),然后从 boot 设 备(就是存放代码的设备、比如 SD/EMMC、NAND)中将代码拷贝出来复制到指定的 RAM 中, 一般是 DDR。
当我们设置BOOT模式为“内部BOOT模式”,这个boot ROM 代码都会做什么处理呢?首先肯定是初始化时钟,boot ROM 设置的系统时钟。
中断向量偏移会被设置到 boot ROM 的起始位置,当 boot ROM 启动了用户代码以后就可 以重新设置中断向量偏移了。一般是重新设置到我们用户代码的开始地方,关于中断的内容后 面会详细讲解。
可以利用开发板从SD卡、EMMC、NAND启动的时候拨码开关的位置如下:
总结:启动方式可以根据芯片启动方式进行选型,但是如果要烧写代码到对应的地方启动将不会是一件容易的事。