Nand Flash Yaffs系统大量写入数据失败问题的解决方法。

一个朋友的问题,我们共同分析后搞定。其实以前也遇到过同样问题,时间长了,没总结。

 

事发:在Nand Flash上使用2.6.14的linux kernel,三星2440的板子,连续写入文件,到一定大小限制就删除,文件写入没有超过flash保留10%的空闲,应该说还差很多。

 

第一步,不适用syslog写,换做自己写代码写入,出现几率降低;

第二步,fwrite换成write,几率增加,很快就坏。

 

坏的时候提示:yaffs tragedy: no more eraased blocks !!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!

 

重新启动,就会标出很多坏块(bad block...),当然是假的,一格式化,就好。

 

第三步,朋友说用2.6.34的内核,没有问题,但从14移到34,需要修改的驱动之类太多,数据结构变化太大。

第四步,我想起以前说起nand时候mtd校验和yaffs校验不能同时开启。

第五步,让在14内核上关闭yaffs软校验,开启mtd nand硬件校验,出现:mtd ecc error unfixed on chunk 26784

第六步,14内核,关闭mtd nand硬件校验,使用yaffs软校验,出现: VFS: Mounted root (cramfs filesystem) readonly. Mounted devfs on /dev Freeing init memory: 108K Error -3 while decompressing! c02ccb50(312)->c3cc0000(4096) Failed to execute /linuxrc. Attempting defaults... Kernel panic - not syncing: No init found. Try passing init= option to kernel.

然后,想了想。

34可以,14同样的配置不可以,应该是软件差异。查看14下yaffs的版本,挺老。朋友说34下的yaffs拿过去编译无法通过。

我从这边使用的18内核抠出来yaffs部分给他,这个yaffs是:

Id: yaffs_mtdif.c,v 1.22 2009/03/06 17:20:51 wookey Exp $";

编译,还是有一个头文件(linux/uaccess.h)找不到,屏蔽之,OK。

再编译,使用mtd的硬nand ecc,关闭yaffs own ecc,测试,OK,写文件OK,写入断电 OK。

总结:主要就是两种ECC冲突的事情,yaffs官网上写道:

Nand interface: For yaffs to function, it must be able to be the only code that writes to the oob area on the NAND device. The existing NAND driver in kernel 2.4.19 assumes that it will do the ecc/oob management for the host fs. For yaffs, this is quite wrong. You can disable ecc/oob calculations either by hand patching the mtd code to bypass ecc calculations or by merging the latest mtd cvs.

当然这针对2.4的内核,莫非2.6也涛声依旧?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux上的壁纸软件下载,Ubuntu 17.10上安装开源壁纸工具Wallch 4.0

在Ubuntu 17.04上安装WallchWallch是一款免费的开源通用壁纸更换器,用户可以在设置的时间更改桌面背景图片。它会在桌面上更改并显示随机图片或维基百科的当天图片。它还具有一个实时地球Living Earth壁纸,每30分钟更换桌面背景,以显示阳光和…

Asp.NET 获取网站根目录

http://www.cnblogs.com/Leo_wl/archive/2010/06/12/1757148.html转载于:https://www.cnblogs.com/imihiroblog/archive/2012/05/23/2514649.html

小议同步IO :fsync与fdatasync

对于提供事务支持的数据库,在事务提交时,都要确保事务日志(包含该事务所有的修改操作以及一个提交记录)完全写到硬盘上,才认定事务提交成功并返回给应用层。 一个简单的问题:在*nix操作系统上,怎…

linux c++ queue 多线程,C++多线程,消息队列用法

进程是没有活力的,它只是一个静态的概念。为了让进程完成一些工作,进程必须至少占有一个线程,所以线程是描述进程内的执行,正是线程负责执行包含在进程的地址空间中的代码。实际上,单个进程可以包含几个线程&#xff0…

获取磁盘类型

1. GetLogicalDriveStrings获取所以的分区字符串 2. GetDriveType("C:\\"); 对每个分区字符串分别调用GetDriveType获得分区所在磁盘的磁盘类型。 0 DRIVE_UNKNOWN未知的磁盘类型   1 DRIVE_NO_ROOT_DIR说明lpRootPathName是无效的   2 DRIVE_REM…

css3 (2)

Php1情景模拟:如果是在C盘,遇到熊猫,数据丢失。我们要重装系统,格C盘。我们要更改对应的访问的目录。需要改apache下面的配置文件Appserv 是集成环境包,里面也是apache服务器在运行网页请求。Apache目录下面有一个conf…

linux find显示文件的基本信息,命令find搜索文件,命令stat查看文件的详细信息

命令stat命令语法stat(选项)(参数)命令描述命令stat用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。命令选项-L:支持符号连接;-f:显示文件系统状态而非文件状态;-t:以简洁方式输出信息&#…

C# String.Format格式说明

C#格式化数值结果表 字符 说明 示例 输出 C货币string.Format("{0:C3}", 2)$2.000D十进制string.Format("{0:D3}", 2)002E科学计数法1.20E0011.20E001G常规string.Format("{0:G}", 2)2N用分号隔开的数字string.Format("{0:N}…

Linux添加网站后无法显示,Linux:SElinux导致网站无法访问

通过更改SElinux状态可以判断出,当SElinux处于关闭状态时,网站内容访问正常。[rootmaster1-192-168-117-18 ~]# setenforce 0[rootmaster1-192-168-117-18 ~]# getenforcePermissive[rootmaster1-192-168-117-18 ~]# setenforce 1[rootmaster1-192-168-1…

Linux rpm 命令参数使用详解[介绍和应用]

RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包 二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代…

VS快捷键和小功能

转自:http://www.cnblogs.com/wangshenhe/archive/2012/05/28/2521393.html备份一个 VS隐藏的快捷键和小功能 可将代码放入工具箱,类似控件使用。CtrlShiftV:剪贴板循环粘贴。CtrlT:变换一个字符,即将字符后移。CtrlShiftT:变换一个词&#x…

linux 分区 文件,Linux的分区与文件结构

Linux操作系统与我们经常使用的windows操作系统有所不同,Linux主机上的设备以及系统的分区都以文件的形式存在着。接下来就将Linux系统中设备以及分区的标识方法以及目录结构做以详细介绍。在Linux系统中主要以接口类型来区分不同的存储设备:IDE接口用hd来表示&…

CentOS卸载OpenJDK并安装Sun JDK

第一步:查看Linux自带的JDK是否已安装 (卸载centOS已安装的1.4) 安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息: java version "1.6.0" OpenJDK Runtime Environment (build 1.6.0-b09…

AndroidManifest.xml文件详解(uses-sdk)

语法&#xff08;SYNTAX&#xff09;&#xff1a; <uses-sdkandroid:minSdkVersion"integer" android:targetSdkVersion"integer" android:maxSdkVersion"integer"/> 被包含于&#xff08;CONTAINED IN&#xff09;&a…

xps13 linux 硬盘分区,在xps13上安装ubuntu16.04教程

在windows界面下&#xff0c;通过磁盘管理器&#xff0c;从硬盘中分出40G的空闲空间。重启电脑&#xff0c;进入BIOS&#xff0c;将启动模式修改为ACHI(如果想系统安装成功后可以直接使用无线wifi&#xff0c;请将security boot关闭&#xff1b;否则&#xff0c;默认只能使用有…

Ubuntu10.10的网络配置

有一阵子着实对Ubuntu的网络配置很迷惑&#xff0c;耐下心来仔细上网找了找&#xff0c;有点小心得&#xff0c;总结一下。 先说下大概的配置过程&#xff0c;再去细究一些情况。 一、配置大概分三类&#xff1a;通过配置文件配置、通过命令配置、通过图形化的网络连接菜单配置…

sp_executesql介绍和使用 转

转自http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.htmlexecute相信大家都用的用熟了&#xff0c;简写为exec,除了用来执行存储过程&#xff0c;一般都用来执行动态Sql sp_executesql&#xff0c;sql2005中引入的新的系统存储过程&#xff0c;也是用来处理动态s…

linux多网卡udp组播收不到数,UDP组播,完成端口,双网卡收不到数据?帮帮忙

当前位置:我的异常网 网络通信 UDP组播&#xff0c;完成端口&#xff0c;双网卡收不到数据&#xff1f;帮帮忙UDP组播&#xff0c;完成端口&#xff0c;双网卡收不到数据&#xff1f;帮帮忙www.myexceptions.net 网友分享于&#xff1a;2013-04-13 浏览&#xff1a;848次UDP…

DllMain详解

1 DLL的进入/退出函数 1.1 DllMain简介 跟exe有个main或者WinMain入口函数一样&#xff0c;DLL也有一个入口函数&#xff0c;就是DllMain。以“DllMain”为关键字&#xff0c;来看看MSDN帮助文档怎么介绍这个函数的。 The DllMain function is an optional method of entr…

linux 视频学习

Linux 系统管理员要求对系统进行管理&#xff0c;备份等操作&#xff0c;linux程序员需要掌握c,c,java,php,jsp等 Linux平台上的开发&#xff0c;包括vi,gcc,gdb,make,jdk,tomcat,mysql… 书籍介绍&#xff1a;鸟哥LINUX私房菜&#xff0c;LINUX编程从入门到精通&#xff0c;li…