Buildroot根文件系统之mdev自动挂载U盘C程序检测

mdev作用

在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需要的节点文件。
mdev不加参数时就是利用hotplug机制来决定创建什么样的设备文件。mdev -s程序通过扫描/sys/class和/sys/block中所有的类设备目录,利用这些信息在/dev下创建设备节点。

启用buildroot中的mdev

buildroot中有4种设备节点管理方式,在→ System configuration → /dev management 中可以选择

Static using device table (静态分配,rootfs中有就有,没有的话,启动后也不会动态创建)
Dynamic using devtmpfs only (启动过程中动态创建,启动后不会自动创建设备节点)
Dynamic using devtmpfs + mdev(启动过程中动态创建,启动后使用mdev管理设备节点)
Dynamic using devtmpfs + eudev (启动过程中动态创建,启动后使用eudev管理设备节点)

前两种都能知道怎么回事,而mdev基本是eudev的简化版,因此eudev由于功能更多更复杂,也导致占用比mdev大得多。实测打包后,依旧比mdev大1.4M左右。
在这里插入图片描述

mdev配置文件

如果你想使用完整mdev的功能,比如自动挂载/卸载,那么还应该有一个/etc/mdev.conf文件(此文件是可选的)。该文件在busybox的examples/mdev.conf中有参考例子。我在我的开发板上插入一个usb读卡器,/dev下会创建/dev/sda和/dev/sda1文件;当我拔下这个读卡器,/dev下的这两个文件就会消失,这意味着mdev已经在工作了,但系统并没有自动帮我对这个U盘进行挂载。
mdev的配置文件为 /etc/mdev.conf,新版的buildroot 启用mdev时,已经自动配置好启动过程中根据/sys/目录创建/dev/下设备节点,且自动启动mdev。

自动挂载U盘

mdev当检测到hotplug时,会根据配置文件的配置执行相应的脚本。而当系统检测到U盘插入时,系统会将U盘首先映射到 /dev/sd* (如sda sdb 等)。
我们编写/etc/mdev.conf:

sd[a-z][0-9]      0:0 666        @/etc/mdev/udisk_add
sd[a-z]           0:0 666        $/etc/mdev/udisk_remove

说明:
@ 表示当检测到hotplug有设备名为sda0~sdz9的设备插入时,执行的脚本。
$ 表示该设备拔出时执行的脚本。

下面编写检测到U盘插入时调用的脚本 /etc/mdev/udisk_add :

#!/bin/sh

if [ -d /sys/block/*/$MDEV ] ; then
	mkdir /mnt/$MDEV  -p
	mount /dev/$MDEV /mnt/$MDEV/ -t vfat -o iocharset=utf8 
fi

注:$MDEV 是传入的设备名。
先创建准备挂载到的设备文件夹,这里挂载到 /mnt/<设备名>/,再将设备挂载到该目录。一般U盘使用fat文件系统,因此我们指定挂载的目标文件系统为vfat。

下面编写检测到U盘拔出时调用的脚本 /etc/mdev/udisk_remove:

#!/bin/sh
sync
umount -l /mnt/$MDEV
rm -rf /mnt/$MDEV

程序中判断U盘是否插入

C程序中可通过access函数判断挂载文件是否存在来判断U盘是否插入

if(0!=access("/mnt/sda1".c_str(), F_OK)){
	fclose(fd);
	fd = NULL;
	cout << "udisk not exist" <<endl;
}else{
	cout << "udisk exist" <<endl;
}

产品介绍
https://seeker.taobao.com/?spm=2013.1.1000126.2.35411024NrGP85

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值