u-boot-2010.03在LT2440上的移植详解 (九)

来源:互联网 发布:绿色傲剑数据 编辑:程序博客网 时间:2024/04/28 15:08


u-boot-2010.03在LT2440上的移植详解 (九)

郑重声明,这系列文章改写自博客园 黄刚先生的《嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解》

 

转载时请注明出处文章出处:http://www.lt-net.cn

 

编译系统Ubuntu10.04交叉编译器arm-linux-gcc 4.3.3硬件设备LT2440开发板  测试软件u-boot-2010.03依赖库无


uboot下载地址:http://ftp.denx.de/pub/u-boot/u-boot-2010.03.tar.bz2

本次移植在u-boot-2010.03原有功能的基础上增加如下特性:

  1.支持2KB  page Nand Flash读写
  2.支持Nand/Nor Flash启动自动识别
  3.支持DM9000AEP 10M/100M自适应网卡
  4.支持yaffs文件系统烧写
  5.支持USB下载功能
  6.支持一键式菜单
  7.支持启动Logo
  8.支持ubifs(待续)

 

上接:u-boot-2010.03在LT2440上的移植详解 (八)


支持NandFlash/NorFlash自动识别
网上有好多实现的方式,我这里要说一个比价简单的实现:根据s3c2440的硬件特性,当从NandFlash启动是时,有4K的SRAM映射到内存地址0x0开始的4K地址上,这样可以直接读写0x0,而从NorFlash启动是地址0x0对应的是NorFlash,NorFlash是不可以直接写的,需要一个复杂的过程,所以我们可以通过
  对0x0地址读写数据是否相等来判断从什么Flash启动。

直接修改start.S ,在启动的时候实现启动方式的判断:

#  gedit cpu/arm920t/start.S

#ifndef CONFIG_SKIP_LOWLEVEL_INIT


bl
cpu_init_crit

#endif


mov r0,#0


ldr r1,=12345678


str r1,[r0]


ldr r2,[r0]


cmp r1,r2


beq nandboot

#ifndef CONFIG_SKIP_RELOCATE_UBOOT


实现过程分析:
先对地址0x0写入12345678 ,然后在读取0x0地址的数据,对比这个读取到的数据,如果不等于12345678,表示地址0x0不可以写,则是从NorFlash启动的,反之,如果可以直接写(由于SRAM映射),读取的数据就会是12345678,则是从NandFlash启动的。
重新编译,则可以自动识别启动方式,调用相关的代码启动U-boot

下接:u-boot-2010.03在LT2440上的移植详解 (十)

原创粉丝点击