Chinaunix
标题:
嵌入式sd卡只读解决办法
[打印本页]
作者:
sss0213
时间:
2009-03-31 14:22
标题:
嵌入式sd卡只读解决办法
LINUX环境下使用C语言能够实现原子操作吗?
[无满意答案结帖,结帖人:kingboy1982]
加为好友
发送私信
在线聊天
kingboy1982
等级:
可用分等级:长工总技术分:40总技术分排名:338017结帖率:100.00%
发表于:2009-02-08 23:29:18 楼主
在我做的一个项目中,需要对音视频数据进行转码(fork一个子进程excel一个程序来将音频数据和视频数据转换为ASF格式文件)和存盘(写
入SD卡),这里偶尔会出现SD卡变成只读导致数据无法写入的情况。为解决只读的问题,我在这个地方将只读的情况(多个相关标志位)写入
一个文件,重启后备份数据格式化只读分区的方法来保证原有数据不会丢失。
但是压力测试情况下在这个地方,程序偶尔会被Killed,如果刚好出现了只读现象,我那个只读标记处理函数往往是执行了一部分系统就重启了
,结果导致写入文件的标记位不一致,开机处理后数据会丢失。
最主要是要能解决那个Killed的问题就好了,通过GDB调试,分析生成的Core文件也始终无法查找到Killed的原因,现在就是想能不能通过原子
操作的办法来规避这个问题:那个只读标记处理函数要么完全执行完毕,要么完全不执行,最后是能够完全执行,那我那些数据就不会丢失了
。
使用的操作系统是LINUX,CPU为ARM9,编程语言为C语言。希望哪位高人能够指点一下,小生不胜感激!
另外我想请教一个问题是:SD卡在什么情况下会变成只读?正常读写情况下会发生只读现象吗?只读是因为程序中存在非法操作还是SD卡本身的硬件质量问题?
虽然发生的几率比较小,但这个问题困扰我很久了,一直无法根除。我一个朋友说他们也使用SD卡也存在大量的数据读写操作却没有只读现象,难道是因为我们的
应用程序中存在Bug的原因引起的吗?
问题点数:30 回复次数:5
显示所有回复显示星级回复显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
gettext
冰雪之崖等级:
可用分等级:小地主总技术分:19149总技术分排名:697
3
2
发表于:2009-02-14 13:16:251楼 得分:0
其实你提到的这些问题中, 最critical的还是那个只读问题,被Kill掉也算是个问题, 但你有机制可以work around, 所以事实上没有只读问题严重。原子操作问题是你自己制作出来的, 根本可以避免, 也无法实现, 至少对硬件断电这种情况。
关于SD卡的只读问题, 首先, 你是如何断定“出现SD卡变成只读导致数据无法写入”?
也就是说SD卡有没有被umount再mount成只读的可能? 如果没有, 那数据无法写入不是由于只读引起的。 那是由什么引起的吗? 很简单,
打印出errno, 再驱动里跟踪一下应该就知道原因。及时由于硬件问题造成暂时无法写入, 也有很多其他解决方法, 比如放后台任务来做。
预留的文字链广告位
//-->
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
hairetz
每天保持一颗轻松幽默的心.等级:
可用分等级:掌柜总技术分:18701总技术分排名:1132
发表于:2009-02-14 15:33:002楼 得分:0
解决被kill掉的问题是治标不治本啊,关键是为何你的SD卡有时候会变成只读状态呢?
预留的文字链广告位
//-->
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
kingboy1982
等级:
可用分等级:长工总技术分:40总技术分排名:338017
发表于:2009-02-14 17:01:083楼 得分:0
目
前只读的检测方法是往SD卡里写入一个文件,如果写入失败,就认为是只读了。采用了多个分区来备份数据,如果认为本分区只读了,我就设置相关标志位,重启
机器,重启后交换数据分区,将只读分区数据拷贝到另一个分区后格式化只读分区,只要我那个设置标志都正确的话,就不会出现数据丢失的问题,只是在重启前的
那个数据没有写入。现在就是希望能够保证我那个标识位设置没有问题就可以了。
在程序整个运行过程中,不会MOUNT和UNMOUNT SD卡,只是在机器启动是加载。
预留的文字链广告位
//-->
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
kingboy1982
等级:
可用分等级:长工总技术分:60总技术分排名:122191
发表于:2009-03-28 00:04:144楼 得分:0
哈哈, 我终于解决了这个问题,采用了一定的方法来规避这个问题,就是开机时我会去同时检查只读标志位和分区标志位,还有备份分区下是否有数据,用一种很笨但有效的方法解决了这个问题!
本文来自ChinaUnix博客,如果查看原文请点:
http://blog.chinaunix.net/u1/50685/showart_1886170.html
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2