第四章:基于九鼎X210开发板移植2014.10版U-boot之使用sd卡启动

 start.S是所有armv7架构的cpu共用的,在start.S中的应该都不需要太多的改动。分析到下面,对uboot有了解的朋友,应该都知道这几个函数主要干嘛的

 cpu_init_cp15:对cp15寄存器进行初始化的,这个不去动它。

 cpu_init_crit:分析进去这个函数,可以发现最后它调用的就是我们板级目录下的lowlevel_init.S文件,这个得好好改改。

 _main:这个函数在crt0.S,用来初始化内存的栈,然后去执行board_f函数。

   

 接下来就进入lowlevel_init中分析,lowlevel_init.s路径:/board/samsung/x210,在这里面主要做了关看门狗、禁止中断、设置SRAM、设置串口等,参考开发板厂商的uboot,设置相应的电源置锁代码。设置完成后再打印一个O来表示成功。

   

 这时候就需要将uboot拷贝到sd卡中去启动,要不然之前的uboot启动时已经制锁了电源按键,我们自己测就测不出效果了。

 由于官方的uboot没有sd卡烧录工具,所以将之前uboot中的sd卡安装包拷贝一份进去,至于使用方法,之前写过一个帖子 http://blog.csdn.net/tainjau/article/details/75050964

 当然,结果还是不能启动,这时候需要分析一下,之前我们使用tftp下载,能够正常启动,那应该就能说明这个新版的uboot是没有问题的,但是用sd卡启动却启动不了。

 假设1:sd卡通道坏了。
 于是我用之前编译过的旧版的uboot烧录到sd卡中,能够正常启动。

 排除上述假设之后,想起之前学习x210裸机的时候提及到:

 S5PV210启动时,会先运行内部IROM中的固化代码进行一些必要的初始化,执行完后硬件上会自动读取NAND Flash或sd卡等启动设备的前16K的数据到IRAM中,这16K数据中的前16byte中保存了一个叫校验和的值,拷贝数据时S5PV210会统计出待运行的bin文件中含‘1’的个数,然后和校验和做比较,如果相等则继续运行程序,否则停止运行。

 在sd卡烧录镜像的制作工具中,会拆分uboot.bin为BL1和BL2,然后将BL1这部分的文件的前16个字节填充,填充格式如下

   

 因此在编译uboot.bin的时候,要在uboot前面加上16字节的无用信息占位,要不然烧录工具制作的时候,就会将前16字节给覆盖了。

 怎么添加16字节的无效数据占位呢?首先在/arch/arm/cpu/uboot.lds中找到整个uboot的入口为_start。

   

 然后找到_start在arch/arm/lib下的vectors.S中,然后在_start前面加上16字节的无效数据作为填充。

 (ps:之前的uboot的start在start.s下,一开始的时候,直接就在start.s前面加填充字节,结果无效,后来才意识到要找_start这个入口)

   

 修改完vectors.S后,再次编译,然后查看主目录下的system.map文件,可以看到_start的入口地址挪动了16个字节了。    

烧录到sd卡中,启动后,打印出了O,松开电源键,电源也被锁住了。算是成功了一小步。 

          



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值