• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : nand_write: Attempt to write not page aligned data 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 7800
精华: 0
发帖: 49
金钱: 490 两
威望: 257 点
贡献值: 0 点
综合积分: 98 分
注册时间: 2009-07-29
最后登录: 2017-09-13
楼主  发表于: 2009-10-22 11:51

 nand_write: Attempt to write not page aligned data

管理提醒: 本帖被 qq2440 从 Linux技术交流专区 移动到本区(2010-02-08)
小弟在mini2440上移植了nand 启动(nand 型号K9F1G08U0B) ,现在使用nand write 命令出错,还请高手指教!!
出错信息:
[mini2440]# tftp 30800000 ramdisk.gz
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
TFTP from server 192.168.9.101; our IP address is 192.168.9.100
Filename 'ramdisk.gz'.
Load address: 0x30800000
Loading: T #######################################
done
Bytes transferred = 564557 (89d4d hex)
[mini2440]# nand write 30008000 400000 89d4d
NAND write: device 0 offset 0x400000, size 0x89d4d
Skip bad block 0x00400000
nand_write: Attempt to write not page aligned data
NAND write to offset 4a0000 failed -22
524288 bytes written: ERROR
好像应该修改 nand_base.c中的nand_write函数,但是具体怎么修改呢?好像是没有对齐数据,网上说是分区要128K对齐,但是uboot的分区信息在哪里修改?我是在内核修改的,所以好像烧写也与uboot分区也无关吧?我仅仅是写入指定偏移的数据,只要指定的偏移满足128k对齐就行了吧?我这个地址400000是对齐的啊,大家帮帮忙吧。或者谁做过联系我QQ:168244380 万分感谢!
[ 此帖被linuxway在2009-10-23 14:45重新编辑 ]
级别: 新手上路
UID: 7800
精华: 0
发帖: 49
金钱: 490 两
威望: 257 点
贡献值: 0 点
综合积分: 98 分
注册时间: 2009-07-29
最后登录: 2017-09-13
1楼  发表于: 2009-10-22 11:55
顺便提下:saveenv命令是没有问题的!
级别: 新手上路
UID: 7800
精华: 0
发帖: 49
金钱: 490 两
威望: 257 点
贡献值: 0 点
综合积分: 98 分
注册时间: 2009-07-29
最后登录: 2017-09-13
2楼  发表于: 2009-10-22 17:38
谢谢kasim!
写入nand 的数据需要2k对齐的意思是说 我用mkyaffs2image制作文件系统时生成的镜像的大小需要2k对齐吗?
级别: 新手上路
UID: 7800
精华: 0
发帖: 49
金钱: 490 两
威望: 257 点
贡献值: 0 点
综合积分: 98 分
注册时间: 2009-07-29
最后登录: 2017-09-13
3楼  发表于: 2009-10-23 14:40

 Re:128M nand flash(型号:K9F1G08U0B)write 问题:nand_write: Attempt to write not page aligned ..

谢谢 kasim nand write的问题解决了,但是我现在用nand write.yaffs出现问题!要怎么修改呢?
级别: 新手上路
UID: 7800
精华: 0
发帖: 49
金钱: 490 两
威望: 257 点
贡献值: 0 点
综合积分: 98 分
注册时间: 2009-07-29
最后登录: 2017-09-13
4楼  发表于: 2009-10-23 14:45
参考了http://blog.chinaunix.net/u3/96581/showart.php?id=1934280不过是针对nand 64M的
我用的也是uboot2008.10:可以saveenv命令,nand write 也能写内核,为了支持nand write.yaffs,板子mini2440 flash 128M
参照网上修改了部分东西:在cmd_util.c文件中添加了



//长度不是528整数倍,认为数据出错。





if (((*length)%(nand->oobsize+nand->writesize)) != 0) {




printf ("Attempt to write error length data!\n");




return -EINVAL;




}


我知道128M nand flash 是2k对齐的 所以最初启动出现了 上面打印的 Attempt to write error length data,请问这里要怎么修改才能识别2k对齐呢?

我再注释掉了上面几行后,又出现了以下错误:
[mini2440]# tftp 30800000 fs_yaffs.image
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
TFTP from server 192.168.9.101; our IP address is 192.168.9.100
Filename 'fs_yaffs.image'.
Load address: 0x30800000
Loading: T #################################################################
        ############################################
done
Bytes transferred = 1599312 (186750 hex)
[mini2440]# nand write.yaffs 30800000 300000 200000
NAND write: device 0 offset 0x300000, size 0x200000
skip the first blcok!
Skip bad block 0x00320000
data abort
pc : [<33f85cb4>]          lr : [<33fa3254>]
sp : 33f3faa8  ip : 33fa332c    fp : 33fa31ac
r10: 00020000  r9 : 30821000    r8 : 33f3ffdc
r7 : 30820800  r6 : 00000000    r5 : 33fa3254  r4 : 00000000
r3 : c0a76665  r2 : 00020000    r1 : cfc5f7ff  r0 : 00000000
Flags: NzCv  IRQs off  FIQs off  Mode SVC_32
Resetting CPU ...

我直接用nand write 写yaffs文件系统,起不来,最后出现 init出错,可能必须要实现nand write.yaffs才能写yaffs格式的文件吧,还请高手帮帮!
级别: 新手上路
UID: 7800
精华: 0
发帖: 49
金钱: 490 两
威望: 257 点
贡献值: 0 点
综合积分: 98 分
注册时间: 2009-07-29
最后登录: 2017-09-13
5楼  发表于: 2009-10-23 15:39
我打印了上述退出出的值:
//长度不是2112整数倍,认为数据出错。
if (((*length)%(nand->oobsize+nand->writesize)) != 0) {
printf ("Attempt to write error length data!\n");
return -EINVAL;
}
[mini2440]# nand write.yaffs 30008000 300000 200000
NAND write: device 0 offset 0x300000, size 0x200000
*length=2097152,pagesize=2112
Attempt to write error length data!
2097152 bytes written: ERROR
可以看出pagesize是00b+size=64+2048
而length=0x200000(=2097152)
难道这里判断不对?不应该加上oob数据?
还是我的烧写大小应该满足2112对齐?而不是2048对齐呢?
级别: 新手上路
UID: 7800
精华: 0
发帖: 49
金钱: 490 两
威望: 257 点
贡献值: 0 点
综合积分: 98 分
注册时间: 2009-07-29
最后登录: 2017-09-13
6楼  发表于: 2009-10-23 15:41
明白了,那我nand write.yaffs 30008000 offset filesize 这个filesize大小就按照我下载的大小写就行了?因为用mkyaffs2制作的必定是2112对齐的?
级别: 新手上路
UID: 7800
精华: 0
发帖: 49
金钱: 490 两
威望: 257 点
贡献值: 0 点
综合积分: 98 分
注册时间: 2009-07-29
最后登录: 2017-09-13
7楼  发表于: 2009-10-23 15:50
换了版主提供的mkyaffs2image 制作出来大小还是1599312,怎么回事?
但是1159312是2048的整数倍哦!
级别: 新手上路
UID: 7800
精华: 0
发帖: 49
金钱: 490 两
威望: 257 点
贡献值: 0 点
综合积分: 98 分
注册时间: 2009-07-29
最后登录: 2017-09-13
8楼  发表于: 2009-10-23 16:03
等等 制作文件系统之前先要压缩文件成tgz的吗?
级别: 新手上路
UID: 7800
精华: 0
发帖: 49
金钱: 490 两
威望: 257 点
贡献值: 0 点
综合积分: 98 分
注册时间: 2009-07-29
最后登录: 2017-09-13
9楼  发表于: 2009-10-23 16:04
我的命令是 mkyaffs2image  fs  fs.image
fs是根文件系统顶层目录
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go