6.1 include/conskfigs/micro2440.h
添加
#define CONFIG_CMD_NAND_YAFFS
【說明】
本人在閱讀cmd_nand.c時發現u-boot-2011.03已經支持yaffs寫入,只需添加如上定義即可,但實際寫入錯誤,再閱讀源代碼,發現只要按下一步修改即可,雖然這是最簡單的方法,但似乎並不是最優的方法。
6.2 drivers/mtd/nand/nand_util.c
int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
u_char *buffer, int withoob)
{
……
if (need_skip < 0) {
printf ("Attempt to write outside the flash area/n");
*length = 0;
return -EINVAL;
}
if (!need_skip && !withoob) {
……
}
while (left_to_write > 0) {
……
#ifdef CONFIG_CMD_NAND_YAFFS
if (withoob) {
……
ops.len = pagesize;
ops.ooblen = nand->oobsize;
ops.mode = MTD_OOB_RAW;
ops.ooboffs = 0;
pages = write_size / pagesize_oob;
for (page = 0; page < pages; page++) {
ops.datbuf = p_buffer;
ops.oobbuf = ops.datbuf + pagesize;
rval = nand->write_oob(nand, offset, &ops);
if (rval)
break;
offset += pagesize;
p_buffer += pagesize_oob;
}
}
……
}
6.3 下載yaffs鏡像
下載yaffs鏡像的時候要注意分區的第一塊不能寫,比如友善之臂的默認分區如下:
Number of partitions: 4
name : offset size flag
------------------------------------------------------------
vivi : 0x00000000 0x00040000 0
param : 0x00040000 0x00020000 0
kernel : 0x00060000 0x00500000 0
root : 0x00560000 0x3fa80000 0
也就是說yaffs鏡像所在分區的起始地址在0x560000,因此使用nand write.yaffs命令下載yaffs時要寫的地址爲0x560000 + 0x20000 (Nand Flash每塊的大小)= 0x580000,即下載命令類似如下
tftp 0x30008000 uImage
nand write.yaffs 0x30008000 0x580000 0x300000