Linux 2.6.30 应用程序半分钟进行一次数据读写,采用yaffs2文件系统好吗?

时间:2022-09-04 22:32:34
各位大侠:

正在进行的一个项目:arm,linux2.6.30。遇到一个问题是:需要频繁保存数据,不到一分钟保存一次数据,数据长度为1k。说说我的想法,请各位大侠指点。

1、在nand flash上分一个区专用于这个数据保存,采用yaffs2文件系统。通过写文件的方式来保存,下次上电直接读这个文件。
   问题在于:虽然数据不大,但如此频繁地写数据,是否会对nand flash寿命产生影响(nand flash手册说是擦写10万次)?另外,yaffs2能够进行垃圾回收,这个分区的数据始终不多(小于1k),什么时候会启动垃圾回收呢?是否会严重占用系统资源,使系统运行很慢?

2、采用mtd接口直接操作nand flash,进行数据的读写。
   问题在于:nand flash具有坏块,需要我们进行标记。程序书写麻烦。并且读写始终在于一个范围的block,感觉比第一种方法更加伤害nand flash。相比较而言,第一种方法采用yaffs2,yaffs2是否会自动均衡写数据的block?这里说出自己的一个想法。各位大侠说说自己的看法最好了。
   
3、采用eeprom进行数据读写。
   这个方法貌似不错。但硬件上只有一块24c02,无法保存1k的数据。如果采用这种方法,只能更换器件。另外这条i2c总线同时连接rtc时钟,如此频繁操作eeprom,是否会对rtc时钟有影响,每次读取eeprom数据是否都是正确的?因为eeprom存储空间有限,存储的话,也只能存储一次数据,如果此次数据有错误,那么就无法恢复原始数据。相比较,nand flash可以采用冗余存储,存储多次数据以防万一。
   
4、采用data flash 如at45db321d 4MB。
   这个硬件没有连接,暂时没有试验。但硬件如果连接上,对以后的硬件操作产生影响,不太方便。所以暂时没有倾向于这个方案。

个人比较偏向于第一种方法,比较方便嘛,呵呵。

各位大侠说说哪种好些。

2 个解决方案

#1


1, 2的实质是一样的,  最后都是交由文件系统管理 都要经过mtd 最后调用 yaffs2的实现
 uboot有nand write命令, 我忘记kernel下是否有相应的命令了.  如果有,  跟1,2也是一样的.

kernel有坏块管理, 会把坏块保存到nand的最后某个块(好像是最后一个,不是很肯定)

由于做过u-boot与kernel的nand  坏块这块, 所以跟u-boot的有些混了.  记得不是很清楚.

写一个专门块时,如果是坏块,  u-boot 下有nand write.yaffs2 向Nand Flash写入数据,如果NandFlash相应的区域有坏块,可以跳过坏块,   kernel的是否会自动跳过我忘了,  但是如果没有,加上这个功能不是很难.


垃圾回收这块没研究.  不断写,对nand肯定有影响.    固定写在几个块中, 会对这几个块影响更大.

我觉得自己指定块写,不是好想法.  还是交由系统管理.   

#2


引用 1 楼 zmlovelx 的回复:
1, 2的实质是一样的,  最后都是交由文件系统管理 都要经过mtd 最后调用 yaffs2的实现
 uboot有nand write命令, 我忘记kernel下是否有相应的命令了.  如果有,  跟1,2也是一样的.

kernel有坏块管理, 会把坏块保存到nand的最后某个块(好像是最后一个,不是很肯定)

由于做过u-boot与kernel的nand  坏块这块, 所以跟u-b……


恩。交给系统来进行管理要好一些。感觉频繁写NAND FLASH也不是个事。

#1


1, 2的实质是一样的,  最后都是交由文件系统管理 都要经过mtd 最后调用 yaffs2的实现
 uboot有nand write命令, 我忘记kernel下是否有相应的命令了.  如果有,  跟1,2也是一样的.

kernel有坏块管理, 会把坏块保存到nand的最后某个块(好像是最后一个,不是很肯定)

由于做过u-boot与kernel的nand  坏块这块, 所以跟u-boot的有些混了.  记得不是很清楚.

写一个专门块时,如果是坏块,  u-boot 下有nand write.yaffs2 向Nand Flash写入数据,如果NandFlash相应的区域有坏块,可以跳过坏块,   kernel的是否会自动跳过我忘了,  但是如果没有,加上这个功能不是很难.


垃圾回收这块没研究.  不断写,对nand肯定有影响.    固定写在几个块中, 会对这几个块影响更大.

我觉得自己指定块写,不是好想法.  还是交由系统管理.   

#2


引用 1 楼 zmlovelx 的回复:
1, 2的实质是一样的,  最后都是交由文件系统管理 都要经过mtd 最后调用 yaffs2的实现
 uboot有nand write命令, 我忘记kernel下是否有相应的命令了.  如果有,  跟1,2也是一样的.

kernel有坏块管理, 会把坏块保存到nand的最后某个块(好像是最后一个,不是很肯定)

由于做过u-boot与kernel的nand  坏块这块, 所以跟u-b……


恩。交给系统来进行管理要好一些。感觉频繁写NAND FLASH也不是个事。