当前位置:  技术问答>linux和unix

linux下USB设备热插拔如何检测

    来源: 互联网  发布时间:2017-03-10

    本文导语:  现在做的项目中想实现USB设备插上以后自动挂载到/mnt/hd目录下。请问大侠们怎么实现。 如果拔出USB设备怎么检测到错误?假如我现在正在写U盘。突然U盘被拔出。我该怎么检测U盘被拔出的消息。我是在嵌入式linux下...

现在做的项目中想实现USB设备插上以后自动挂载到/mnt/hd目录下。请问大侠们怎么实现。
如果拔出USB设备怎么检测到错误?假如我现在正在写U盘。突然U盘被拔出。我该怎么检测U盘被拔出的消息。我是在嵌入式linux下做的项目。请大家帮帮忙

|
udevmonitor 的原理也是捕捉 netlink 的 socket 消息,这个消息是内核发出的,打印出来的消息跟我上面的小程序一样,2.6内核支持udev,udev是在用户空间实现的程序,在终端输入 udevmonitor(有的版本或许是 udevadm -monitor) 然后插拔 USB 设备,可以看到提示信息。

|
学习一下!

|
楼上的意思是用户态驱动吧。
无论如何都需要有一个线程来监控设备的状态。比如,插槽上或下位产生的中断,这个型号可以通过很多方式,如netlink、内存映射、软中断等等方式,让用户态线程能够感知是否有USB设备上线,如果有则调用mount函数,否则的话umonut。

|
学习了。我原来都是写配置文件来实现的。。。

|
框架是这样的,手头没编译器,你先看看试试。原理就是建立一个socket捕获内核发过来的netlink消息,很简单的。

#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  

#define UEVENT_BUFFER_SIZE 2048 

static int init_hotplug_sock() 

    const int buffersize = 1024; 
    int ret; 

    struct sockaddr_nl snl; 
    bzero(&snl, sizeof(struct sockaddr_nl)); 
    snl.nl_family = AF_NETLINK; 
    snl.nl_pid = getpid(); 
    snl.nl_groups = 1; 

    int s = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); 
    if (s == -1)  
    { 
        perror("socket"); 
        return -1; 
    } 
    setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buffersize, sizeof(buffersize)); 

    ret = bind(s, (struct sockaddr *)&snl, sizeof(struct sockaddr_nl)); 
    if (ret 

    
 
 

您可能感兴趣的文章:

  • 编一个程序,检测Linux系统下机器网卡的状态(只要检测网络线是否被拔掉?)
  • 如何让linux重启时自动检测文件系统!??
  • linux怎么加检测超时程序!!!
  • linux7.2网卡检测不到
  • linux启动时,能否跳过硬盘检测。
  • 在Linux下如何检测IP地址冲突,及网线脱落
  • linux下,如何检测网络线连接或断开?
  • linux怎么无法检测到我的键盘和鼠标?
  • 求助关于LINUX下检测不到网卡的问题。
  • linux下如何检测鼠标移动了。
  • 请教一个关于linux下检测fstream失效的问题
  • 如何 linux下检测 usb摄像头(或设备)热插拔事件
  • linux声音问题!可以检测到声卡型号但没声音!在线等待!
  • linux 硬件检测,驱动自动加载的问题
  • ********菜鸟问题,LINUX安装时没有检测到网卡*********
  • RedHat Linux下怎样检测新硬件?
  • linux程序中如何检测机器所用的硬件
  • 为什么我下载的RedHat Linux 被检测未知的操纵系统???
  • linux下如何检测网络状态
  • linux控制台程序如何检测有无按键?
  • UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍
  • Linux设备驱动(第三版)- 字符设备驱动 - 例子
  • linux 启动的时候 可以检查出很多设备 并给设备配以驱动程序
  • Linux下写了一个字符设备驱动,找不到设备文件在哪个目录
  • linux2.4如何在设备拔出后将无效的设备节点也删除
  • linux无法认出USB设备,说设备不响应
  • 有人在Linux下用过1394接口的设备吗?怎么装载一个1394接口的存储设备呢?
  • Linux的设备和设备号是指什么?可否简单的解释一下?
  • HTML教程 iis7站长之家
  • 各位设备驱动开发的朋友,请问,linux设备驱动开发和网络编程开发哪一样工资比较高呀?
  • 求助:usb转serial串口设备在linux内核中创建及生成tty设备的改写
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux主机检测不到开发板(USB-USB连接)
  • linux usb驱动中的usb0端口接收数据问题
  • 请问如何在USB上安装Linux,并通过USB引导
  • 对于linux下的usb蓝牙适配器驱动hci_usb.c中的一些宏(如HCI_RESET)是什么意思?
  • linux USB从口设备驱动问题
  • Linux2005下怎样使用USB移动U盘?
  • 求Linux下开发拥有USB通讯功能的资料
  • 有没有linux下USB作为从设备的驱动程序源码
  • usb在linux下的问题?
  • Linux下开发USB硬盘驱动
  • 嵌入式linux中usb host读device的程序在哪个文件中
  • 在redhat 9.0 linux底下怎么才能使用usb盘?
  • 求助:Linux下USB驱动的问题
  • 关于LINUX下USB硬盘使用
  • 在linux下如何使用usb移动硬盘
  • 怎么去做个运行LINUX系统的USB设备?
  • linux上的USB从设备驱动!
  • linux下怎么识别usb硬盘?
  • 在linux下怎么安装USB移动硬盘?
  • linux usb device driver
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3