这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 征解:谁能解决我的JFFS2怪问题(真的很怪)!

共9条 1/1 1 跳转至

征解:谁能解决我的JFFS2怪问题(真的很怪)!

菜鸟
2005-06-13 20:22:19     打赏

搞了很久的一个关于的jffs2的问题,也试了好多办法,搞来搞去的实在没有办法了,只有求助与网上的各位高人了,3Q 先 !

硬件:S3C4510B,16MB SDRAM(32位接入),2MB flash(16位接入,型号SST39VF160)系统:uclinux,内核源码的版本是uClinux-dist0909.tgz,应该是03.09.09的版本针对4510移植过的。 2M的flash被我划做两半,各自1MB,分别拿来放kernel image和做jffs2文件系统。

问题:作出来的jffs2系统读还正常,但是写却非常之慢,这还算不了什么,更奇怪的现象是:

(1)、如果我使用image.rom版内核,直接烧入flash的0地址,然后开机由其自动解压加载内核完成后,我再加载JFFS2文件系统,这个时候写jffs2的速度慢的简直不能忍受,大概只有“几字节~几十字节每一秒”。无语......................

(2)、如果我使用image.ram版内核,通过一个bootloader调入0x8000位置运行,写jffs2的速度大概有1~2 Kb/s,不论是从romfs(比如\bin\目录)拷贝文件到jffs2分区,还是从var目录(ramdisk,ext2)拷贝文件到jffs2分区速度都差不多;

但是不论使用.ram还是.rom 的内核文件,所有保存在JFFS2文件系统上的数据都还是能够在掉电后正确重新加载并读取的,

我的操作方法:就参照了网上的《如何在uClinux下使用MTD&jffs2》、《移植mtd+jffs2到FS4510成功》和《HOW TO USE MTD&JFFS2 Under uClinux(中文版)》文章,源码改自m5272c3.c,不过几乎没做什么修改 !

不知以前有没有那位仁兄碰到过类似问题,或者那位高人能解决 ?

或者给我指条明路也可以 ! 谢谢 !




关键词: 征解     谁能     解决     我的     JFFS2     问题     真的    

菜鸟
2005-06-13 20:25:00     打赏
2楼

在使用.rom 内核文件时偶尔弹出一个下面的类似提示: Newly-erased block contained word 0x0 at offset 0x0007d000 ................................. Newly-erased block contained word 0x400040 at offset 0x0007e000

当然上面提示的地址等每次都可能不同,而且在向jffs2上写数据时总出现下面的提示:

Warning: DQ5 raised while program operation was in progress, however operation c ompleted OK ................................... Warning: DQ5 raised while program operation was in progress, however operation c ompleted OK

这句话随写的文件越大,出现的频率或次数就越高,几乎每次写文件都毕出现 !但使用.ram的内核文件没有上面的现象。

后来为了解决这个问题我试过040408版本的内核,弄出来后居然.ram和.rom内核文件都是一样的慢,只有10B/S左右,然后我又换用了030522版+dailzh的patch,弄出来后.ram和.rom内核文件速度都是差不多2KB/S,这个时候直接在jffs2的文件夹内相互拷贝文件和从var目录拷贝文件到jffs2速度感觉不出有什么差别 !

求解,求解 !3Q !


菜鸟
2005-06-13 23:05:00     打赏
3楼

我原想可能是dailzh的patch的原因,但是我仔细的看过dailzh的内容,也尝试按patch的内容修改过030909和040408两个版本的内容,不过没有用,

难到就没有别的人碰到我这样的问题 ?


菜鸟
2005-06-14 16:57:00     打赏
4楼

就没有那位兄弟帮我分析分析么 ?

任何可能的原因,任何可能的意见都可以告诉我,然后我试试看,

版主,能说说看你的意见么 ? 或者据你估计这个大概是什么问题导致出现的,

如果是我的个人问题,那么估计可以通过什么方法去解决 ?我可以去尝试 !

3Q !

我自己已经尝试了很多种可能相关的办法,但是始终没有用,郁闷!

[align=right][color=#000066][此贴子已经被作者于2005-6-14 9:04:13编辑过][/color][/align]

菜鸟
2005-06-14 19:57:00     打赏
5楼

zengyp说得很仔细了。注意到警告信息:“Warning: DQ5 raised while program operation was in progress, however operation completed OK”。印象里DQ5是Flash擦写操作超时标志,说明问题可能在底层,建议检查mtd驱动程序。

不记得SST的这个Flash是intel兼容还是amd兼容了。zengyp建议的修改点在cfi_cmdset_0002.c中,这说明应该是amd兼容的。仔细察一下手册,看看那几个toggle bit的定义和驱动程序中所用的是否一致。


菜鸟
2005-06-15 18:02:00     打赏
6楼

非常感谢两位的解答,

虽然已经讲的蛮详细了,不过我还是不是很懂 :(

看你的回文,好像你是叫我做3件事吧:

1、在cfi_cmdset_0002.c中添加 #define TOGGLE_BIT2 2

2、就不是很明白了,根据你的代码我查看了我的do_write_oneword函数,在030522版内核中好像是采用多次读出数据的方法验证数据正确性,而030909以及040408版内核中就跟你上面的代码相似,但是你的代码添加了几处“#if DQ5_WORK”的条件编译的命令,我搜索了整个cfi_cmdset_0002.c及相关文件都找不到任何关于DQ5_WORK的定义,你的回文好像也阐明了这一点,既然都没有定义,那你添加的这几条条件编译命令的作用是 ?就是为什么你要在那几个地方添加“#if DQ5_WORK”,难道就只是为了不编译相关代码 ? 那也就是说注释掉了toggle 的代码,仍然采用读出数据的方法验证数据正确性?那你的第3步的意思又是 ?

3、你是叫我替换所有的 “dq5 = CMD(1<<5);” 为“dq5 = CMD(1<<TOGGLE_BIT2);” ?

其实我都还不是很明白你这3步之间的关系,是这3步都需要做 ?

还是有的步骤是有选择性的 ?

3Q !

PS:

zengyp,如果你的回文是转载的,能把你转载页面的全文给我看看行么?或者给我链接也行,3Q

[align=right][color=#000066][此贴子已经被作者于2005-6-15 11:10:50编辑过][/color][/align]

菜鸟
2005-06-16 05:27:00     打赏
7楼

谢谢,你的修改方法是一共做了3步吧? 即 :

1、在cfi_cmdset_0002.c中添加 #define TOGGLE_BIT2 2

2、添加几处“#if DQ5_WORK”的条件编译的命令

3、替换所有的 “dq5 = CMD(1<<5);” 为“dq5 = CMD(1<<TOGGLE_BIT2);”

3步都要完成,是这样的么 ? 谢谢 !

[align=right][color=#000066][此贴子已经被作者于2005-6-15 21:28:30编辑过][/color][/align]

菜鸟
2005-06-17 20:51:00     打赏
8楼

注意:Kernel panic: VFS: Unable to mount root fs on 1e:00

你的根文件系统没有mount上去,很可能是你的.ram中没有rootfs,也就说你的rootfs是与kernel分开编译的,你可以去网上搜搜看关于分开或合并romfs.img的文章,很多的 !


菜鸟
2005-06-20 23:37:00     打赏
9楼

不要胡乱猜测,眼见为实 !

修改linux2.4.x/driver/block/blkmem.c文件:

=====================================

#ifdef CONFIG_BOARD_SNDS100 {0, romfs_data, -1},

#endif

=====================================

重新编译,就会生成一个较大的合并了的image.ram了。

好像是这样的,你试试看 ?

如果我记错了,方法反正是上面这样的,你仔细看看你的代码找找看 !


共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]