S5P4418: SD 卡热插拔和自动挂载卸载支持

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. 背景

本文基于 S5P4418, Linux 3.4.y内核,buildroot-2016.08.1 制作的 rootfs。

3. 建立SD卡热插拔自动挂载和卸载支持

3.1 配置编译内核

首先配置 CONFIG_HOTPLUG=y
在这里插入图片描述在这里插入图片描述在这里插入图片描述
同时配置CONFIG_MMC_UNSAFE_RESUME=n

在这里插入图片描述在这里插入图片描述在这里插入图片描述
配置完成,编译内核。

3.2 修改、配置、编译buildroot

3.2.1 修改 buildroot

(1) 修改mdev配置文件package/busybox/mdev.conf在这里插入图片描述
上面的配置中,第1列是用来匹配的设备文件名,第2列是uid:gid,第3列是文件权限,最后一列带@标识设备加载后执行的动作,带$的标识设备移除前执行的动作。关于更多mdev.conf配置细节可参考链接 :mdev
(2) 在 buildroot 根目录下建立如下文件列表:

board/s5p4418/post-build.sh
board/s5p4418/etc/hotplug/sd/sd_insert
board/s5p4418/etc/hotplug/sd/sd_remove

各脚本文件的内容如下:

#!/bin/sh
# board/s5p4418/post-build.sh

cp -fr board/lanxus/etc ${TARGET_DIR} && \
chmod 755 ${TARGET_DIR}/etc/hotplug/sd/*

构造rootfs前,执行脚本board/s5p4418/post-build.sh,目的是将后面的board/s5p4418/etc/hotplug/sd/sd_insertboard/s5p4418/etc/hotplug/sd/sd_remove两个脚本放到rootfs中去。

#!/bin/sh
# board/s5p4418/etc/hotplug/sd/sd_insert

if [ -d /sys/block/*/$MDEV ]; then
	mkdir -p /media/$MDEV
	mount /dev/$MDEV /media/$MDEV
fi

其中$MDEV是自动被设置的 shell 变量,标识插入的设备名。

#!/bin/sh
# board/s5p4418/etc/hotplug/sd/sd_remove

umount -l /media/${MDEV}p[0-9]
rm -rf /media/${MDEV}p[0-9]

其中$MDEV是自动被设置的 shell 变量,但代表是整个设备,和前面的稍有不同。

3.2.2 配置 buildroot

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
上图中红色框中部分,正是指向我们前面新建的board/s5p4418/post-build.sh脚本。buildroot配置完成,编译buildroot。在编译buildroot之前,确保将board/s5p4418/etc/hotplug/sd/sd_insertboard/s5p4418/etc/hotplug/sd/sd_remove脚本,拷贝到根文件系统相应目录中。

4. 验证sd卡的热插拔和自动挂载功能

将编译好的内核rootfsfastboot下载到目标板。

4.1 系统启动SD卡插入测试

在启系统前,已经将sd卡插入,所以应该可以看到sd卡设备被识别并自动挂载了。启动系统后,运行如下几个命令:

df
ls /media/
ls /media/mmcblk1p1

看到如下输出:
在这里插入图片描述
好的,我们看到设备/dev/mmcblk1p1被挂载在/media/mmcblk1p1,并可以查看其中的内容。

4.2 系统启动后的拔出测试

接上节的上下文,拔出sd卡,并在之后运行命令:

df
ls /media

可看到如下输出结果:
在这里插入图片描述
可以看到,sd卡不再挂载在/media下了。

4.3 系统启动后的插入测试

接上节上下文,插入sd卡,运行命令:

df
ls /media

可看到如下输入结果:
在这里插入图片描述
可见,sd再次被挂载到了/media/mmcblk1p1的路径下。

4.4 SD卡挂在后的读写测试

4.1 SD卡写入测试

依次运行如下命令序列:

cd /media/mmcblk1p1
echo “Test to write mmc device.” > mmc_write_test.txt
ls
cat mmc_write_test.txt

可得如下输出结果:
在这里插入图片描述可见,可以写入sd卡。我们再来看一下,写入的内容是否存储到了SD卡(数据可能驻留在内存)。
移除sd卡后再插入,然后依次运行命令:

cd /media/mmcblk1p1
ls
cat mmc_write_test.txt

可得如下输出结果:
在这里插入图片描述
由结果可知,文件存在且内容正常。我们还应该用更多的io工具做进一步验证,在此不做展开。
最后看一下设备加载情况,运行命令:

fdisk –l

在这里插入图片描述
从上图中红框部分,可以看出,挂载的是一个FAT32格式,4G的sd卡。

5. 后记

写下这篇笔记时,还是个初接触嵌入式Linux开发、还在试用期内的小白_,对io性能、testbench之类的工具是一无所知,所以整个过程中,存在验证不够充分的地方,欢迎批评指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值