免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 24701226 | 回复: 24701226
打印 上一主题 下一主题

[驱动] busybox提供的nandwrite是否支持yaffs2烧写? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-07 14:43 |只看该作者 |倒序浏览
我用的目标板是arm9 + linux 2.6.30.  采用yaffs2 文件系统。

分区如下:
dev:    size          erasesize  name
mtd0: 00020000 00020000 "bootstrap"
mtd1: 00040000 00020000 "uboot"
mtd2: 00020000 00020000 "env1"
mtd3: 00020000 00020000 "env2"
mtd4: 00200000 00020000 "linux"
mtd5: 07d60000 00020000 "root"


现在增加在线烧写固件的功能。编译最新的busybox 1.20后,得到flash_erase/flash_eraseall, nandwrite/nanddump.

在板子上分别运行
flash_eraseall /dev/mtd4
nandwrite -p /dev/mtd4 new_uImage   //新的kernel
flash_eraseall /dev/mtd5
nandwrite -p /dev/mtd5 new_rfs.yaffs2 //新的文件系统


# reboot
save exit: isCheckpointed 1
The system is going down NOW!
Sent SIGTERM to all processes
Sent SIGKILL to all processes
Requesting system reboot
Restarting system.



重启后,kernel升级成功,但文件系统载入失败。错误信息如下:


Kernel command line: console=ttyS0,115200 root=/dev/mtdblock5 mtdparts=atmel_nan
d:128k(bootstrap)ro,256k(uboot)ro,128k(env1)ro,128k(env2)ro,2M(linux),-(root) rw
rootfstype=yaffs2
.
.
.
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
yaffs Jun 20 2012 15:58:17 Installing.
msgmni has been set to 121
io scheduler noop registered
.
.
.
NAND device: Manufacturer ID: 0x20, Chip ID: 0xf1 (ST Micro NAND 128MiB 3,3V 8-b
it)
AT91 NAND: 8-bit, Software ECC
Scanning device for bad blocks
6 cmdlinepart partitions found on MTD device atmel_nand
Creating 6 MTD partitions on "atmel_nand":
0x000000000000-0x000000020000 : "bootstrap"
0x000000020000-0x000000060000 : "uboot"
0x000000060000-0x000000080000 : "env1"
0x000000080000-0x0000000a0000 : "env2"
0x0000000a0000-0x0000002a0000 : "linux"
0x0000002a0000-0x000008000000 : "root"
.
.
.
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
yaffs: dev is 32505861 name is "mtdblock5"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.5, "mtdblock5"
uncorrectable error : <3>uncorrectable error : yaffs_read_super: isCheckpointed
0
VFS: Mounted root (yaffs2 filesystem) on device 31:5.
Freeing init memory: 124K
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found.  Try passing init= option to kernel.
Backtrace:
[<c002b34c>] (dump_backtrace+0x0/0x104) from [<c002b468>] (dump_stack+0x18/0x1c)

r7:00000000 r6:c02ce87c r5:c0020eac r4:c02ce5b4
[<c002b450>] (dump_stack+0x0/0x1c) from [<c003ca4c>] (panic+0x40/0x10c)
[<c003ca0c>] (panic+0x0/0x10c) from [<c00274d4>] (init_post+0xd0/0x100)
r3:c3805e30 r2:0000000d r1:0000000c r0:c027794c
[<c0027404>] (init_post+0x0/0x100) from [<c0008a54>] (kernel_init+0xbc/0xe4)
r4:c02ce5b8
[<c0008998>] (kernel_init+0x0/0xe4) from [<c003ef5c>] (do_exit+0x0/0x58
r5:00000000 r4:00000000




请问是否busybox提供的nand擦写工具不支持yaffs2?


论坛徽章:
0
2 [报告]
发表于 2012-09-07 16:48 |只看该作者
改成nandwrite -a -o /dev/mtd5 new_rfs.yaffs2 试试

论坛徽章:
0
3 [报告]
发表于 2012-09-07 18:35 |只看该作者
看了一下nandwrite的参数,貌似比mtd-utils提供的相同命令要少啊。


#nandwrite -?

BusyBox v1.20.2 (2012-09-06 15:01:56 CST) multi-call binary.

Usage: nandwrite [-p] [-s ADDR] MTD_DEVICE [FILE]

Write to the specified MTD device

        -p      Pad to page size
        -s ADDR Start address



zhsishi 发表于 2012-09-07 16:48
改成nandwrite -a -o /dev/mtd5 new_rfs.yaffs2 试试

论坛徽章:
0
4 [报告]
发表于 2012-09-10 13:53 |只看该作者
有大虾出手帮忙吗? 这个问题郁闷死了。

论坛徽章:
0
5 [报告]
发表于 2012-09-10 15:26 |只看该作者
不采用在线升级,在bootloader下更新可以吗

论坛徽章:
0
6 [报告]
发表于 2012-09-10 16:38 |只看该作者
项目要求远程以太网升级, 而且还有其它设备的升级包一并处理 ~~   

__SevenEleven 发表于 2012-09-10 15:26
不采用在线升级,在bootloader下更新可以吗

论坛徽章:
0
7 [报告]
发表于 2012-09-12 16:13 |只看该作者
更新: 安装编译了mtd-utils v1.0.1版本,使用生成的nandwrite/flash_eraseall 工具去在线烧写固件,症状依旧,mtd4的kernel image烧写启动成功,mtd5的yaffs2文件系统烧写后,启动失败。

大家能帮忙分析一下吗? 或者有能提供编译好的工具和镜像文件供我测试对比一下吗?

这两天这问题调的很辛苦。。。

论坛徽章:
0
8 [报告]
发表于 2013-05-08 10:37 |只看该作者
楼主升级成功了吗?我也遇到同样的问题,linux下烧写yaffs2成功了,而且mount了一下,也看到文件了,就是启动还找不到文件系统

论坛徽章:
0
9 [报告]
发表于 2013-11-19 19:22 |只看该作者
回复 1# fifodct

这个帖子还有人看吗?
我前几天也碰到这个问题,找了好久才找到解决的方法。
不过我用的是mtd-utils
烧写yaffs2失败的一个重要原因是,nandwrite时需要跳过nand的第一个block,不管这个block是不是好的
可以用这样的格式:(这个nandwrite是mtd-utils里面的,推荐)
nandwrite -o -s 0x20000  /dev/mtd5   rfs.yaffs2
-s 表示跳过 0x20000大小的区域,在我的nand里面一个block为128k(就是0x20000)
-o 表示用rfs.yaffs2文件自带的oob数据。
如果这个不行的话 再加一个 -a
nandwrite -o  -a -s 0x20000  /dev/mtd5   rfs.yaffs2
   

论坛徽章:
0
10 [报告]
发表于 2013-11-19 19:24 |只看该作者
回复 8# shamofeiyu


    这个帖子还有人看吗?
我前几天也碰到这个问题,找了好久才找到解决的方法。
不过我用的是mtd-utils
烧写yaffs2失败的一个重要原因是,nandwrite时需要跳过nand的第一个block,不管这个block是不是好的
可以用这样的格式:(这个nandwrite是mtd-utils里面的,推荐)
nandwrite -o -s 0x20000  /dev/mtd5   rfs.yaffs2
-s 表示跳过 0x20000大小的区域,在我的nand里面一个block为128k(就是0x20000)
-o 表示用rfs.yaffs2文件自带的oob数据。
如果这个不行的话 再加一个 -a
nandwrite -o  -a -s 0x20000  /dev/mtd5   rfs.yaffs2
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP