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

2019-07-13 02:11发布


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