NAND启动完成之后,下一步要进行的就是参数在NAND flash中的保存了,因为NAND启动的话NOR是无法读取的.
主要代码大家可以参考,如果您觉得有点用的话请在左边顶一下啊! ^_^
最近工作比较忙,所以这个事情一直拖到了现在,昨天才把程序弄通了,今天在这里总结一下,写点体会.
1. u-boot-1.3.4对NAND flash的支持有两套代码:
drivers/mtd/nand为新的代码,据说是从linux而来,智能型较强,为今后改进的方向.
drivers/mtd/nand_legacy为老的代码,目前保留它主要是为了兼容性. 在不久的将来,我想这个会去掉的.
使用老的代码需要首先定义宏: CONFIG_NAND_LEGACY, 同时也需要对一些程序中的error信息做屏蔽处理. 不知何故,网上不少人给的用的都是老的.
反正是为了玩玩,所以我选择了使用新的代码,直接去掉宏CONFIG_NAND_LEGACY的定义.
2. 接下来就是NAND flash相关宏的定义了,这里主要是定义如下内容:
#define CFG_MAX_NAND_DEVICE 1
#define PHYS_NAND_SIZE SIZE_64M
// NOR/NAND Flash选择
#define CFG_NO_FLASH // 使用NAND FLASH
// 环境变量大小
#define CFG_ENV_SIZE 0x10000
// 环境变量地址
#define CFG_ENV_IS_IN_NAND 1 // NAND flash 保存环境变量
#define CFG_ENV_OFFSET (PHYS_NAND_SIZE-CFG_ENV_SIZE) // 环境变量地址
3. include/linux/mtd/nand_ids.h中定义了相关NAND flash ID,这里我们添加FS2410使用的FLASH:
{"Samsung K9F1208U0A", NAND_MFR_SAMSUNG, 0x76, 26, 0, 3, 0x4000, 0}, /** FS2410*/
4. 由于此时定义了 CFG_NO_FLASH ,所以需要关闭NOR flash相关的操作,
/common/cmd_bootm.c中关于imls命令的程序段和
/common/cmd_flash.c中的程序.
我们可以直接注释或是使用 #ifudef CFG_NO_FLASH 来屏蔽.
还有就是我们之前实现的SST39VF1601的函数flash.c也需要屏蔽起来啊!
自此,NAND flash便可以正常的启动以及保存参数了.
用户1343658 2011-3-12 00:17
用户402930 2009-7-31 16:31