Linux 下监控USB设备拔插事件
使用Netlink来实现
这是一个特殊的socket,可以接受来自内核的消息
代码如下:
运行结果如下:
当有USB设备插入时:
当有USB设备拔出时:
2.使用udev的规则来实现
自2.6 核心开始,就可以使用udev 协助管理系统中各设备名称。例如,磁盘设备排序、网卡设备排序等。udev能动态地在/dev 目录里产生自定义的、标识性强的设备文件或设备链接。
2.4 内核使用devfs(设备文件系统)在设备初始化时创建设备文件,设备驱动程序可以指定设备号、所有者、用户空间等信息,devfs 运行在内核环境中,并有不少缺点:可能出现主/辅设备号不够,命名不灵活,不能指定设备名称等问题。而自2.6 内核开始,引入了sysfs 文件系统。sysfs 把连接在系统上的设备和总线组织成一个分级的文件,并提供给用户空间存取使用。udev 运行在用户模式,而非内核中。udev 的初始化脚本在系统启动时创建设备节点,并且当插入新设备——加入驱动模块——在sysfs上注册新的数据后,udev会创新新的设备节点。
udev 是一个工作在用户空间的工具,它能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建,删除,权限等。这些文件通常都定义在/dev 目录下,但也可以在配置文件中指定。udev 必须内核中的sysfs和tmpfs支持,sysfs 为udev 提供设备入口和uevent 通道,tmpfs 为udev 设备文件提供存放空间。
注意,udev 是通过对内核产生的设备文件修改,或增加别名的方式来达到自定义设备文件的目的。但是,udev 是用户模式程序,其不会更改内核行为。也就是说,内核仍然会创建sda,sdb等设备文件,而udev可根据设备的唯一信息来区分不同的设备,并产生新的设备文件(或链接)。而在用户的应用中,只要使用新产生的设备文件即可。
udev 的工作流程图:
相关实例如下:
在/etc/udev/rules.d文件夹下创建相关规则文件,内容如下:
当插入设备(ACTION=="add")在kernel中设备名为sdb4(KERNEL=="sdc1"),且为块设备(SUBSYSTEM=="block"),满足以上三个条件时,对设备文件命名为Myusb(NAME="Myusb"),并创建软链接Myusb_link(SYMLINK+="Myusb_link"),同时执行/home/usbadd.sh脚本(RUN+="/home/usbadd.sh")。
其中sdc1就是通过fdisk -l查看得到的,软链接会在/dev下创建,名字可以自定义(以后无论插入任何u盘都可以以同一名字来访问),usbadd.sh脚本中可以编写你想实现的任何内容,我的内容是将u盘挂载到/mnt/usb目录下:
当设备拔出时,运行/home/usbremove.sh脚本卸载u盘:
Linux 下监控USB设备拔插事件相关推荐
- linux u盘插入事件,Linux 下监控USB设备拔插事件
Linux 下监控USB设备拔插事件 发布时间:2018-01-29 00:00, 浏览次数:1111 , 标签: Linux USB * 使用Netlink来实现 这是一个特殊的socket,可以接 ...
- QT在Windows下检测USB设备热拔插的思路
一.问题描述: 使用QT开发视频会议时需要实现实时检测USB摄像头/麦克风拔插的功能,这里主要涉及到对一些Windows API的了解以及windows系统的设备管理识别不同种设备时的原理,在实现过程 ...
- 2022-08-29 AndroidR 修改默认usb连接模式为MTP(Media Transfer Protocol)),UsbDeviceManager.java里面处理OTG口usb设备拔插侦听
一.默认是做为adb 调试功能,实际测试修改persist.sys.usb.config 是没有用. 二.拔插usb设备默认的选项是No data transfer 三.按下面的修改就可以修改默认u ...
- linux自动运行upan可执行文件脚本,linux下插入USB设备使用脚本实现自动挂载
某天客户要求说要想在linux OS上插入U盘,然后像和在windows上一样实现自动挂载,在网上没有搜索到有用的信息,有一个软件usbmount,但是试验用不了,有兴趣可以瞧瞧,地址如下 客户就是客 ...
- linux查看usb设备文件,Linux下查看USB设备信息
首先需要将usbfs挂载一下,然后才能查看. $ mount -t usbfs none /proc/bus/usb $ cat /proc/bus/usb/devices 或者在文件(/etc/f ...
- linux 下查看 USB 设备的 PID 和 VID
这里以 centos7为例 方法一: 首先进入 /sys/bus/usb/devices 目录: cd /sys/bus/usb/devices 先不要插入 usb 设备,然后使用 ll 命令,可查看 ...
- linux下实现USB设备(U盘)及SD卡自动识别及挂载(应用层) linux下U盘识别及挂载 linux下SD卡识别及挂载
两种方式,一种是注册通信句柄去监测内核发送的消息,一种是直接读取文件.第一种网上有很多,可以自行百度,但是这种方式只能识别热插拔,下面主要介绍通过读取文件去识别U盘及SD卡节点,实现挂载. 两个目录及 ...
- linux下监控usb自动挂载
挂载路径自己修改即可: U盘挂载部分: #include "checkudisk.h"checkUdisk::checkUdisk(QObject *parent): QObjec ...
- 【C#】Winform监听USB串口设备拔插
[C#]Winform监听USB串口设备拔插 零.问题 最近在开发串口相关的软件,需要检测串口拔掉后主动关闭串口,因此需要检测到USB的拔插事件. 一.解决 在主窗口From类下覆盖WndProc方法 ...
最新文章
- typera插入网站
- jQuery常用方法一览
- Ironic 的 Rescue 救援模式实现流程
- Stanford UFLDL教程 用反向传导思想求导
- 【腾讯Bugly干货分享】动态链接库加载原理及HotFix方案介绍
- Halcon - 定位 - 卡尺
- oracle内存参数越大越好吗,什么是Oracle内存参数调优技术?
- python检测端口是否被侦听
- HDU1285 确定比赛名次【拓扑排序】
- Ubuntu下自定义调整CPU工作频率(用于省电或提高性能都好用)
- 安卓9开机 bootanimation.zip_小米手机如何从安卓10退回安卓9系统,不丢失传感器,不变砖...
- NHibernate中Example类使用注意事项
- 什么是cmm3规范?什么是CMMI5 呢?
- cad电气工程量计算机,CAD电气管线快速算量方法
- 数据仓库与数据挖掘的OLAP技术----韩家炜教授的《数据挖掘概念与技术》学习笔记
- 西门子PLCSIM仿真PLC的网口连接与设置
- shell笔记_重定向与文本处理命令
- VScode提交Git代码总是要输入账号和密码?
- ttf字体转换成woff2网页字体快捷方法
- 请假时间计算方式java_java计算两段时间的重复天数