原文链接

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <linux/netlink.h>#define MAX_RECV_SIZE   1024static int Init_USB_Monitor( void )
{// 本函数返回值int iResult = 0;// 接收内核发来的消息缓冲区大小const unsigned int uiRecvBuffSize = MAX_RECV_SIZE;// 套接字地址struct sockaddr_nl snl;// 套接字文件描述符int sfd = -1;// 1.添写套接字地址snl.nl_family = AF_NETLINK;snl.nl_pad = 0;// 如果希望内核处理消息或多播消息,就把该字段设置为 0,// 否则设置为处理消息的进程ID。snl.nl_pid = getpid();snl.nl_groups = 1;// 2.创建套接字// NETLINK_KOBJECT_UEVENT - 内核消息到用户空间,出现在 Linux 2.6.10sfd = socket( PF_NETLINK, // 使用 netlinkSOCK_DGRAM, // 使用不连续不可信赖的数据包连接NETLINK_KOBJECT_UEVENT );// 如果 创建套接字失败 的话,则if ( -1 == sfd ){return -1;}// 3.设置套接字接收缓冲区大小setsockopt( sfd,SOL_SOCKET, // 存取 socket 层SO_RCVBUF,  // 设置接收缓冲区大小&uiRecvBuffSize,sizeof( uiRecvBuffSize ) );// 4.将套接字加入指定的多播组iResult = bind( sfd,(struct sockaddr*)&snl,sizeof( snl ) );// 如果 将套接字加入指定的多播组失败 的话,则if ( -1 == iResult ){return -2;}return sfd;
}int USB_Monitoring(int fd)
{// 接收内核发来的消息字符串char caKernelMsgBuff[MAX_RECV_SIZE];if(fd <= 0){return -1;}// 接收内核消息recv(fd, &caKernelMsgBuff, sizeof( caKernelMsgBuff ), 0);printf( "Kernel Message:\n%s\n", caKernelMsgBuff );#if 0// USB 设备的插入时,会出现以 add@/devices/ 开头,含 usb 的字符串if( 0 == memcmp( caKernelMsgBuff,"add@",4 )&&NULL != strstr( caKernelMsgBuff,"usb" ) ){printf( "Add USB Device\n" );//break;}// USB 设备的拔除时,会出现以 remove@/devices/ 开头,含 usb 的字符串if( 0 == memcmp( caKernelMsgBuff,"remove@",7 )&&NULL != strstr( caKernelMsgBuff,"usb" ) ){printf( "Remove USB Device\n" );//break;}
#endifreturn 0;
}int main(int argc, char* argv[])
{int fd = Init_USB_Monitor();while(1){USB_Monitoring(fd);}if (fd > 0){close(fd);fd = -1;}return 0;}

Linux USB设备热插拔检测相关推荐

  1. linux 怎么查看usb设备端口号,嵌入式Linux USB设备检测端口和地址

    我发展我的板USB应用.它有两个USB端口.当我插上USB驱动器在他们每个人我得到控制台以下消息:嵌入式Linux USB设备检测端口和地址 端口1: usb 1-1: new high speed ...

  2. Linux USB设备驱动程序设计 和 USB下载线驱动设计

    Linux USB设备驱动程序设计 和 USB下载线驱动设计 USB设备驱动模型 USB设备包括配置(configuration).接口(interface)和端点(endpoint),一个USB设备 ...

  3. Linux usb设备驱动

    原文地址:http://blog.csdn.net/chenjin_zhong/article/details/6329316 1.Linux usb设备驱动框架 USB是通用串行总线的总称,Linu ...

  4. 嵌入式Linux设备驱动程序开发指南20(Linux USB设备驱动)——读书笔记

    Linux USB设备驱动 二十.Linux USB设备驱动 20.1 USB简介 20.1.1 USB2.0总线拓扑 20.1.2 USB总线枚举和设备布局 20.1.3 USB数据传输 20.1. ...

  5. Linux usb设备驱动详解

    1.Linux usb设备驱动框架 USB是通用串行总线的总称,Linux内核几乎支持所有的usb设备,包括键盘,鼠标,打印机,modem,扫描仪.Linux的usb驱动分为主机驱动与gadget驱动 ...

  6. usb设备的检测及区分(sata硬盘、优盘及移动硬盘)

    原理: 1.如果有外置usb设备插入,会产生/proc/scsi/usb-storage目录(ide硬盘上默认 没有),并且会在/proc/scsi/usb-storage目录中产生数字文件,此文件存 ...

  7. USB 设备热插拔的检测

    系统检测USB 设备往往分为两个过程: 1. USB 设备已经插入, 打开软件. 此时需要枚举当前设备列表中所有的设备,并过滤指定的USB 设备. 2. 打开软件后, USB 热插拔 . 此时用WM_ ...

  8. 浅谈Linux USB设备驱动

    1.USB基础介绍 1-1.USB硬件接口介绍 USB接口在硬件上总共有四根线组成VCC.D+.D-.GND,通过计算D+和D-的差值来确定数据.USB设备在传输速率上可以分为低速(1.5Mbps). ...

  9. Linux usb设备驱动(2)--- usbmouse.c 源码分析

    一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表.设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(usb de ...

最新文章

  1. linux longlong大小,Linux基本数据类型大小——int,char,long int,long long int
  2. 【spring】di(依赖注入)使用实例
  3. python最新版本-最新版Python 3.8.6 版本发布
  4. 数据挖掘导论读书笔记8FP树
  5. 关于使用asp.net调试器出现的问题及相关解决方法
  6. 仔细学习CSS(二)
  7. php 重定向到https,php - 如何从HTTPS重定向到HTTP? - SO中文参考 - www.soinside.com
  8. [css] 请说下你对css对象模型(CSSOM)的理解
  9. linux处置服务Iptables
  10. 诺基亚在日本测试5G网络 网速可达256MB/s
  11. canvas beginPath()的初步理解
  12. python代码打包成apk反编译_python程序打包和反编译
  13. uclient uc oracle,UClient下载
  14. 一元线性拟合的matlab,基于MATLAB的一元线性回归分析
  15. 【小程序源码】强大的万年历微信小程序源码下载
  16. 尤雨溪:Vue 3 将成为新的默认版本
  17. HTML5期末大作业——布卡漫画官网(4个页面)HTML+CSS+JavaScript
  18. 移动端框架lib-flexible
  19. BZOJ4768: 2555加强版之wxh loves substring
  20. php绕过宝塔,一句命令绕过宝塔面板强制绑定账号

热门文章

  1. QT实现一个图片显示器,有登录界面(附图片,源码可直接使用)
  2. Proxifier Socks5 代理(内网访问、远程办公)
  3. 如何用python画数学图案_使用Matplotlib 绘制精美的数学图形例子
  4. 有一种温暖,若春风细雨
  5. 九大PHP开源Wiki(维基百科)程序评测
  6. java部门管理_系统管理模块_部门管理_实现基本的增删改查功能
  7. Maven 开 发 规 范
  8. 汇总-13台虚拟机搭建一个高可用负载均衡集群架构
  9. Linux学习2_Sinno_Song_新浪博客
  10. Tcl -- eval