Linux USB设备热插拔检测
原文链接
#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设备热插拔检测相关推荐
- linux 怎么查看usb设备端口号,嵌入式Linux USB设备检测端口和地址
我发展我的板USB应用.它有两个USB端口.当我插上USB驱动器在他们每个人我得到控制台以下消息:嵌入式Linux USB设备检测端口和地址 端口1: usb 1-1: new high speed ...
- Linux USB设备驱动程序设计 和 USB下载线驱动设计
Linux USB设备驱动程序设计 和 USB下载线驱动设计 USB设备驱动模型 USB设备包括配置(configuration).接口(interface)和端点(endpoint),一个USB设备 ...
- Linux usb设备驱动
原文地址:http://blog.csdn.net/chenjin_zhong/article/details/6329316 1.Linux usb设备驱动框架 USB是通用串行总线的总称,Linu ...
- 嵌入式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. ...
- Linux usb设备驱动详解
1.Linux usb设备驱动框架 USB是通用串行总线的总称,Linux内核几乎支持所有的usb设备,包括键盘,鼠标,打印机,modem,扫描仪.Linux的usb驱动分为主机驱动与gadget驱动 ...
- usb设备的检测及区分(sata硬盘、优盘及移动硬盘)
原理: 1.如果有外置usb设备插入,会产生/proc/scsi/usb-storage目录(ide硬盘上默认 没有),并且会在/proc/scsi/usb-storage目录中产生数字文件,此文件存 ...
- USB 设备热插拔的检测
系统检测USB 设备往往分为两个过程: 1. USB 设备已经插入, 打开软件. 此时需要枚举当前设备列表中所有的设备,并过滤指定的USB 设备. 2. 打开软件后, USB 热插拔 . 此时用WM_ ...
- 浅谈Linux USB设备驱动
1.USB基础介绍 1-1.USB硬件接口介绍 USB接口在硬件上总共有四根线组成VCC.D+.D-.GND,通过计算D+和D-的差值来确定数据.USB设备在传输速率上可以分为低速(1.5Mbps). ...
- Linux usb设备驱动(2)--- usbmouse.c 源码分析
一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表.设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(usb de ...
最新文章
- linux longlong大小,Linux基本数据类型大小——int,char,long int,long long int
- 【spring】di(依赖注入)使用实例
- python最新版本-最新版Python 3.8.6 版本发布
- 数据挖掘导论读书笔记8FP树
- 关于使用asp.net调试器出现的问题及相关解决方法
- 仔细学习CSS(二)
- php 重定向到https,php - 如何从HTTPS重定向到HTTP? - SO中文参考 - www.soinside.com
- [css] 请说下你对css对象模型(CSSOM)的理解
- linux处置服务Iptables
- 诺基亚在日本测试5G网络 网速可达256MB/s
- canvas beginPath()的初步理解
- python代码打包成apk反编译_python程序打包和反编译
- uclient uc oracle,UClient下载
- 一元线性拟合的matlab,基于MATLAB的一元线性回归分析
- 【小程序源码】强大的万年历微信小程序源码下载
- 尤雨溪:Vue 3 将成为新的默认版本
- HTML5期末大作业——布卡漫画官网(4个页面)HTML+CSS+JavaScript
- 移动端框架lib-flexible
- BZOJ4768: 2555加强版之wxh loves substring
- php绕过宝塔,一句命令绕过宝塔面板强制绑定账号
热门文章
- QT实现一个图片显示器,有登录界面(附图片,源码可直接使用)
- Proxifier Socks5 代理(内网访问、远程办公)
- 如何用python画数学图案_使用Matplotlib 绘制精美的数学图形例子
- 有一种温暖,若春风细雨
- 九大PHP开源Wiki(维基百科)程序评测
- java部门管理_系统管理模块_部门管理_实现基本的增删改查功能
- Maven 开 发 规 范
- 汇总-13台虚拟机搭建一个高可用负载均衡集群架构
- Linux学习2_Sinno_Song_新浪博客
- Tcl -- eval