免费注册 查看新帖 |

Chinaunix

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

[存储网络] 嵌入式sd卡只读解决办法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-31 14:22 |只看该作者 |倒序浏览

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP