参考资料:
1. 通过配置BOOT_MODE0和BOOT_MODE1配置启动方式:
我么这里选择从内部boot模式启动
2. 内部boot初始化时钟,打开catch,MMU
3. 通过BOOT_CFG选择,BOOT_CFG1[7:0]、 BOOT_CFG2[7:0]和 BOOT_CFG4[7:0]这 24 个配置 IO,按设备要求有不同的接法(正点原子选择的是SD卡,BOOT_CFG和硬件连接有关)
4. 内部boot自动将SD卡中的代码(二进制文件)拷贝到指定的RAM中,一般是DDR
这里主要涉及文件的处理,正点原子提供的imxdownlode文件就是将IVT+Boot Data +DCD数据插到编译成功的工程bin文件开头,然后通过shell命令将生成的loade.imx.文件写到SD卡
i.MX6ULL裸机开发 三:imxdownload 源码分析_lqonlylove的博客-CSDN博客_imxdownload
查看源码我们可以看到IVT+Boot Data +DCD这些数据就是那个大数组,已经写死了。
IVT:程序入口地址,DCD地址,boot data地址,IVT复制到DDR中以后的首地址(告诉i.mx6ull各个配置的起始地址,然后i.mx6ull去这些地方找需要的信息)
boot data:整个load.imx的起始地址,镜像文件大小
DCD: 配置外设时钟(这里将所有的外设时钟都打开了),配置DDR3所有IO,初始化MMDC控制器,初始化DDR3,
IVT+Boot Data +DCD其实就是引导设备启动,启动以后从哪里执行的,然后听听正点原子讲的课,他说他也是从uboot中扣出来的,所以,这就是一个非常简单的uboot.
最后的工作其实就回到了最开始,内部boot从SD卡中将数据拷贝到DDR中