imx6ull的Uboot启动过程——区别于传统Uboot

本文捋一捋imx6ull的uboot的启动流程。

首先,NXP提供的uboot经过编译最终烧写进存储介质中的是uboot.imx文件,这个imx后缀的文件不同于传统的比如S3C2440最终烧写的uboot.bin文件。

imx文件是在bin文件的基础上加上了一个头部,IMX6ULL的BOOTROM程序会根据拨码开关的高低电平选择对应的启动介质,从中读取这个头部信息,然后对头部信息进行解析,头部中最重要的是一个叫DCD表的东西。

DCD表中包含了时钟寄存器的地址和寄存器的值,引脚复用寄存器地址和寄存器的值,DDR控制器的寄存器地址和寄存器的值。imx6ull内部的BOOTROM程序会根据DCD表的内容打开时钟,初始化外部DDR。因此NXP提供的uboot代码的汇编阶段没有初始化时钟和初始化DDR的相关汇编代码!这也是NXP的uboot和传统的三星提供的uboot的重大区别。

除了上述标黑部分的区别以外,还有一个区别就是,IMX6ULL的BOOTROM程序会根据解析出来的链接起始地址在一开始就把整个Uboot源码读取到DDR中去,也就是说Uboot的第一行代码就运行在DDR中,这是不同于三星的传统Uboot的,传统Uboot的第一句代码是运行在片内SRAM上的。

由于上述的区别,Uboot的重定位过程也就不同了,IMX6ULL的重定位过程是把Uboot整体从DDR的起始地址给挪到DDR的后端地址上去,给Linux内核腾位置。而三星Uboot中重定位是从Flash中把Uboot加载到DDR中去,这也算是一个不同之处。

除了上述提到了几点不同以外,Uboot代码的其他部分功能基本大差不差:

IMX6ULL在uboot的汇编阶段要做的事情仅仅包含了:

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值