分类: LINUX
2008-04-27 13:10:54
标准的SMDK2410板不支持NAND Flash,启动的时候是这样的:
U-Boot 1.1.2 (May 28 2006 - 08:20:50)
U-Boot code: 33F80000 -> 33F99A14 BSS: -> 33F9DB0C
RAM Configuration: Bank #0: 30000000 64 MB Flash: 1 MB *** Warning - bad CRC, using default environment In: serial
Out: serial Err: serial 有NAND支持的多一行(NAND 64MB):
U-Boot 1.1.2 (May 28 2006 - 08:36:42)
U-Boot code: 33F80000 -> 33F99A14 BSS: -> 33F9DB0C
RAM Configuration: Bank #0: 30000000 64 MB Flash: 1 MB NAND: 64 MB *** Warning - bad CRC, using default environment In: serial
Out: serial Err: serial 怎么实现这种支持呢?U-Boot真是功能强大的Bootloader,在/inclued/configs/smdk2410.h中有这么一段
/***********************************************************
* Command definition ***********************************************************/ #define CONFIG_COMMANDS \ (CONFIG_CMD_DFL | \ CFG_CMD_CACHE | \ CFG_CMD_NAND | \ /*CFG_CMD_EEPROM |*/ \ /*CFG_CMD_I2C |*/ \ /*CFG_CMD_USB |*/ \ CFG_CMD_REGINFO | \ CFG_CMD_DATE | \ CFG_CMD_ELF) /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
需要说明一下CONFIG_CMD_DFL,定义的是默认指令,包括bdinfo、bootd、coninfo、saveenv、flinfo、erase、protect、iminfo、imls、itest、loadb、loads、md、mm、nm、mw、cp、cmp、crc、base、loop、loopw、mtest、sleep、bootp、tftpboot、rarpboot、run等常用指令,这些指令我以后会结合使用做适当的说明。关于指令的宏定义说明可以看看U-Boot的README里面的Monitor Functions。这就是对编译成功后的U-Boot支持的命令的定义,SMDK2410默认的smdk2401.h中,红色字部分是注释掉的。但是要支持NAND Flash远没有去掉一个注释这么简单。
我们可以试试单纯把这个注释去掉是什么结果,老步骤:
make distclean
make smdk2410_config
make
……一堆编译信息飘过……
出错了,位置指向cmd_nand.c这个文件,好几处错误。原因是SMDK2410的配置里根本就没有对NAND Flash支持的宏定义和函数。怎么办?自己写么?好在U-Boot里有另外一个可以让我们借鉴的配置VCMA9。在Source Navigator里搜索一下vcma,看看vcma9.h和vcma9.c,可以从中摘取出一段宏定义和一些函数声明。网上有人的做法是将其放在smdk2410.h和smdk2410.c中,但是白痴的cross-2.95.3和cross-3.2都不能认到cmd_nand.c中已经在smdk2410.h和smdk2410.c中定义的宏所指的函数,就算是加上extern的也不行。也许你没有看懂刚才这句话,解释一下,例如cmd_nand.c中有这样一段
if(ale_wait)
NAND_WAIT_READY(nand); /* do the worst case 25us wait */ else udelay(10); 其中NAND_WAIT_READY(nand),在smdk2410.h中定义为
#define NAND_WAIT_READY(nand) NF_WaitRB()
而NF_WaitRB()在smdk2410.c中定义为
|
原文地址 http://xianzilu.spaces.live.com/blog/ |