免费注册 查看新帖 |

Chinaunix

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

[驱动] 恳求 指教!!jffs2文件系统问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-21 22:57 |只看该作者 |倒序浏览
嗨,各位好。斗胆提一个问题,希望能得到帮助。
在移植2.6.39.3版本的内核到一个S3C2440开发板的时候,遇到了一个关于JFFS2文件系统的问题。
移植完成后,在busybox下使用fdisk -l命令 提示 jffs2_flush_wbuf(): Write failed with -5
这个函数在fs/jffs2/wbuf.c文件中,问题是由于在调用MTD驱动接口函数nand_write函数(drivers/mtd/nand/nand_base.c)的时候其在调用nand_check_wp函数检测nand flash写保护的时候返回 错误值 造成的。
  但是我在文件系统下 建立 文件 删除文件 都没有问题,而且尝试 在nand_check_wp函数里面打印检测写保护的值得到如下的情况:
  在 建立 文件、删除 文件 之类 操作的时候,检测值 返回0xc0
   在调用fdisk -l这个命令的时候,检测值返回0x0。
  因为是这样,我想 应该 不是 底层操作函数引起的问题(毕竟在一些 操作 下是正常工作的)
  而是 上层 接口 调用的时候,由于某个 地方冲突造成 这个数据读不出来。不知道 自己想的 对不对,还请指点 一下,谢谢!!!!

论坛徽章:
0
2 [报告]
发表于 2011-08-21 23:09 |只看该作者
自己顶一下,恳求指教,我的理解是:jffs2_flush_wbuf()调用nand_write()出问题,而其他写函数调用nand_write()就是正常的。既然写保护检测已经封装到nand_check_wp里面,而且nand_write()函数又是直接调用,并且 一部分操作能读出正确数据来。那么这个问题到底是出在哪里?还请大家给个思路!!!!谢谢

论坛徽章:
0
3 [报告]
发表于 2011-08-22 21:08 |只看该作者
我在nand_base.c里面为每个调用的nand_check_wp的函数前面添加了语句
printk(KERN_INFO "nand_check_wp in %s",__func__);
实验结果如下:
/ # ls
bin   dev   etc   fzb   home  init  mnt   proc  sbin  sys   tmp   usr
/ # nand_check_wp() in :nand_do_write_ops
rm -r fzb
/ # nand_check_wp() in :nand_do_write_ops

fdisk -l
fdisk -l

Disk /dev/mtdblock0: 8 MB, 8388608 bytes
255 heads, 63 sectors/track, 1 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/mtdblock0 doesn't contain a valid partition table

Disk /dev/mtdblock1: 33 MB, 33554432 bytes
255 heads, 63 sectors/track, 4 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/mtdblock1 doesn't contain a valid partition table

Disk /dev/mtdblock2: 226 MB, 226492416 bytes
255 heads, 63 sectors/track, 27 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/mtdblock2 doesn't contain a valid partition table
/ # Unknown node type for REF_PRISTINE node at 0x00147838: 0x0000
JFFS2 notice: (114) jffs2_get_inode_nodes: Wrong magic bitmask 0x0000 in node he
ader at 0x147838.
JFFS2 warning: (114) jffs2_do_read_inode_internal: no data nodes found for ino #
69
nand_check_wp() in :nand_do_write_ops
write protected
jffs2_flush_wbuf(): Write failed with -5
nand_check_wp() in :nand_do_write_ops
write protected
jffs2_flush_wbuf(): Write failed with -5
nand_check_wp() in :nand_erase_nand
Erase at 0x003e0000 failed immediately: errno -5

大家注意看,都是同样 调用 nand_do_write_ops,但是在jffs2_flush_wbuf中调用失败了。

论坛徽章:
0
4 [报告]
发表于 2011-08-23 21:42 |只看该作者
今天用了df -i查看jffs2文件系统的节点使用情况
/ # df -i
Filesystem              Inodes      Used Available Use% Mounted on
/dev/root                    0         0         0   0% /

查看分区情况
/ # cat proc/mtd
dev:    size   erasesize  name
mtd0: 00800000 00020000 "kernel & busybox"
mtd1: 02000000 00020000 "basic runtime filesystem componet"
mtd2: 0d800000 00020000 "user space"
不知道问题出在哪里啊,考虑到jffs2文件系统能挂载上,而且ls能显示目录、mkdir能创建目录,vi能创建文件、rm能删除文件,df -h能显示flash的使用情况,但是
就是这个 fdisk -l运行后立刻就报错,因为在使用它的时候检测到nand flash的状态是写保护的状态!!我用的tq2440那个电路图看过,写保护管脚直接接高电平3.3V。为何在执行fdisk -l的时候写保护???现在看来只有看看busybox中fdisk命令的实现方法在来看看操作中除了啥错误。

一个人整好痛苦啊,请大牛帮助!!谢谢!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP