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上的移植详解 (十)