工业网关开发:SD卡识别为只读问题调试

在工业网关产品的开发阶段,因为频繁的调试,有一定概率SD卡会识别为只读,甚至在试产过程中,因为更换SD卡品牌之后又出现了这个问题。生产怀疑这个问题在研发阶段并没有根本解决。本文从头到尾详述了在研发过程中SD卡识别为只读问题的解决过程帮助开发者重新梳理问题根本原因。

问题的现象

Opnewrt作为基于Linux内核的嵌入式操作系统,支持市面上很多的路由器产品以及诸如LinkIt Smart 7688这样的物联网核心开发板,为我们快速开发实现不同物理层设备(Wifi,RJ45,Uart,485)之间通信的“网关设备“提供了很好的平台。
SD卡作为可插拔的外存储器往往是这种中转站式产品的必要组成部分,SD卡在Openwrt上识别为/dev/mmcblk0(若识别不了请检查相关的电路以及在Openwrt编译选项中中是否选择支持SD卡的驱动),命令:

mount -f /dev/mmcblk0 /mnt

会将SD卡作为只读系统挂载到/mnt目录下。
但是,我们今天要讨论的不是怎么将SD卡挂载为只读,而是我在开发中遇到的问题是我以可读写的方式挂载之后,在业务程序(会对SD卡进行读写)正常运行过程中断电,重新在上电,就会出现SD卡正常的挂载之后却变成了只读的文件系统。

查找问题原因

我查阅了Openwrt官网对文件系统相关的说明 官网链接,发现了系统对FAT32这种跨平台的文件系统支持有一些问题,而SD卡的文件系统正是FAT32的。于是着手将SD卡的文件系统换为EXT4。

问题的解决过程

当初在编译Openwrt时没有考虑支持EXT4的文件系统,所以需要将kmod-fs-ext4作为编译成IPK的安装包,跟着业务软件的更新脚本一并安装到Openwrt中,这样不需要更新Openwrt即可完成对EXT4文件系统的支持。
在安装过程中发现内核依赖出了问题,都是同一套代码编译出来的(未同步更新Openwrt代码),为什么会出现这样的问题呢?原来虽然依赖的内核版本一致,但是后边跟的MD5值却不相同,于是打开/usr/lib/opkg/status文件找到:

Package: kmod-usb-serial
Package: kernel
Version: 4.4.135-1-dd771f070793a57e639ba899b957b9d9
Depends: libc
Status: install user installed
Architecture: mipsel_24kc
Installed-Time: 1528658724
Auto-Installed: yes

在安装脚本中使用sed命令将后边的MD5值替换为安装失败提示的依赖MD5值:

sed -i ‘s/Version: 4.4.135-1-dd771f070793a57e639ba899b957b9d9/Version: 4.4.135-1-bd23b504438a969434409f08c297498a/’ /usr/lib/opkg/status

替换成功后即可成功安装,但是SD卡此时还是FAT32,于是利用Openwrt源码编译出e2fsprogs格式化工具安装包。安装过后即可格式化SD卡。但是这个格式化工具依赖librtlibuuidlibext2fs,需要先安装这三个库才能使用。
在一切安装准备妥当之后,使用命令

mkfs.ext4 -F /dev/mmcblk0

将SD卡格式化成ext4。格式化完成后使用

mount -t ext4 /dev/mmcblk0 /mnt

命令将SD卡成功挂载到/mnt之后即告完成。
将SD卡更换为EXT4之后再未出现过SD卡挂载上来的文件系统为只读的问题。

十六宿舍 原创作品,转载必须标注原文链接。
©2023 Yang Li. All rights reserved.
欢迎关注『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十六宿舍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值