当前位置: 技术问答>linux和unix
yaffs2移植,用write.yaffs2命令唯独写不了77a000地址
来源: 互联网 发布时间:2017-04-26
本文导语: 移植环境:u-boot-2010.09 linux 3.0 FL2440开发板 yaffs2的内核分区在1a00000这里 tftp 30800000 rootfs.bin nand erase 30800000 a100000 800000 移植yaffs2文件系统时在u-boot下用write.yaffs2 命令写不了 write.yaffs2 30800000 a100000 77a000(77a000...
移植环境:u-boot-2010.09 linux 3.0 FL2440开发板
yaffs2的内核分区在1a00000这里
tftp 30800000 rootfs.bin
nand erase 30800000 a100000 800000
移植yaffs2文件系统时在u-boot下用write.yaffs2 命令写不了
write.yaffs2 30800000 a100000 77a000(77a000为文件的实际大小,nandflash是256M 工具mkyaffs2image-256M)这个地址.(注:没有出错提示 只是有NAND write: device 0 offset 0x1a00000, size 0x77a000) 接下来就停在那里了
我试了别的地址,是可以的,但是会出现 ttempt to write error length data!/n 的错误.
我的 nand_write_skip_bad 函数修改如下
#if defined(CONFIG_MTD_NAND_YAFFS2)
if(nand->rw_oob==1)
{
size_t oobsize = nand->oobsize;
size_t datasize = nand->writesize;
int datapages = 0;
if (((*length)%(nand->oobsize+nand->writesize)) != 0)
{
printf ("Attempt to write error length data!/n");
return -EINVAL;
}
datapages = *length/(datasize+oobsize);
*length = datapages*datasize;
left_to_write = *length;
}
#endif
这是部分的代码
试了两种工具,一种是网友提供的mkyaffs2image-128M
写的结果是Load address: 0x30800000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
######
done
Bytes transferred = 7710912 (75a8c0 hex)
nand erase a100000 800000
nand write.yaffs2 30800000 1a00000 75a8c0
NAND write: device 0 offset 0x1a00000, size 0x75b000
Attempt to write error length data!/n 7712768 bytes written: ERROR
另一种是FL2440商家提供的mkyaffs2image-256M
写的结果是:
Load address: 0x30800000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
######
Bytes transferred = 78939744 (77a000 hex)
nand erase a100000 800000
nand write.yaffs2 30800000 1a00000 77a000
NAND write: device 0 offset 0x1a00000, size 0x77a000
(注:就停在这里了,没有出错信息)
希望有经验的网友们能提个醒,指点下迷津,再此谢了!
yaffs2的内核分区在1a00000这里
tftp 30800000 rootfs.bin
nand erase 30800000 a100000 800000
移植yaffs2文件系统时在u-boot下用write.yaffs2 命令写不了
write.yaffs2 30800000 a100000 77a000(77a000为文件的实际大小,nandflash是256M 工具mkyaffs2image-256M)这个地址.(注:没有出错提示 只是有NAND write: device 0 offset 0x1a00000, size 0x77a000) 接下来就停在那里了
我试了别的地址,是可以的,但是会出现 ttempt to write error length data!/n 的错误.
我的 nand_write_skip_bad 函数修改如下
#if defined(CONFIG_MTD_NAND_YAFFS2)
if(nand->rw_oob==1)
{
size_t oobsize = nand->oobsize;
size_t datasize = nand->writesize;
int datapages = 0;
if (((*length)%(nand->oobsize+nand->writesize)) != 0)
{
printf ("Attempt to write error length data!/n");
return -EINVAL;
}
datapages = *length/(datasize+oobsize);
*length = datapages*datasize;
left_to_write = *length;
}
#endif
这是部分的代码
试了两种工具,一种是网友提供的mkyaffs2image-128M
写的结果是Load address: 0x30800000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
######
done
Bytes transferred = 7710912 (75a8c0 hex)
nand erase a100000 800000
nand write.yaffs2 30800000 1a00000 75a8c0
NAND write: device 0 offset 0x1a00000, size 0x75b000
Attempt to write error length data!/n 7712768 bytes written: ERROR
另一种是FL2440商家提供的mkyaffs2image-256M
写的结果是:
Load address: 0x30800000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
######
Bytes transferred = 78939744 (77a000 hex)
nand erase a100000 800000
nand write.yaffs2 30800000 1a00000 77a000
NAND write: device 0 offset 0x1a00000, size 0x77a000
(注:就停在这里了,没有出错信息)
希望有经验的网友们能提个醒,指点下迷津,再此谢了!
|
1、Attempt to write error length data!/
这个是因为你传输的文件大小是Bytes transferred = 7710912 (75a8c0 hex)
而你烧写的大小是NAND write: device 0 offset 0x1a00000, size 0x75b000
并不是page+oob的整数倍,所以报错
2、将1的报错修正后,write.yaffs2 30800000 a100000 77a000这句如果还报错,就换个位置烧写试试,如果其他位置没报错,那确认下是不是烧写的大小超过flash大小了,或者是坏块没处理好
这个是因为你传输的文件大小是Bytes transferred = 7710912 (75a8c0 hex)
而你烧写的大小是NAND write: device 0 offset 0x1a00000, size 0x75b000
并不是page+oob的整数倍,所以报错
2、将1的报错修正后,write.yaffs2 30800000 a100000 77a000这句如果还报错,就换个位置烧写试试,如果其他位置没报错,那确认下是不是烧写的大小超过flash大小了,或者是坏块没处理好