目前要做一个在嵌入式平台上的USB口的热插拔事件。

经过我现在的分析总结目前有如下方法:

1,定时检查/proc/scsi/scsi文件

此方法只能在PC上,但在嵌入式平台上不可用。

2,netlink方式

使用netlink.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/un.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <linux/types.h>
#include <linux/netlink.h>
#include <errno.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#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 < 0)
  {
        perror("bind");
        close(s);
        return -1;
  }

return s;
}

int main(int argc, char* argv[])
{
  int hotplug_sock = init_hotplug_sock();

while(1)
  {
      /* Netlink message buffer */
      char buf[UEVENT_BUFFER_SIZE * 2] = {0};
      recv(hotplug_sock, &buf, sizeof(buf), 0);
      printf("%s\n", buf);

/* USB 设备的插拔会出现字符信息,通过比较不同的信息确定特定设备的插拔,在这添加比较代码 */
  }
  return 0;

}

经过测试发现只能实现插与拔,但是无法具体到具体是什么设备。

3,使用mdev。

此方法相当麻烦,现在在研究中。

4,使用最原始的解析文件方式

此方法相当麻烦,生成很多文件。

就是用cat /proc/bus/usb/devices的信息生成的文件进行解析。

目前我已经完成此功能。虽然能用,但是效率太低。

转自: http://www.linuxidc.com/Linux/2011-12/49112.htm

Linux下实现USB口的热插拔相关推荐

  1. 07-20210305在WIN10下通过USB口给华为海思Hi3516DV300刷机(鸿蒙系统)

    07-20210305在WIN10下通过USB口给华为海思Hi3516DV300刷机(鸿蒙系统) 2021/3/5 17:26 https://blog.csdn.net/cocoron/articl ...

  2. Linux下的USB总线驱动 mouse

    Linux下的USB总线驱动(03)--USB鼠标驱动 usbmouse.c USB鼠标驱动 usbmouse.c 原文链接:http://www.linuxidc.com/Linux/2012-12 ...

  3. 手动制作linux live,Linux下Live USB如何制作

    Linux下Live USB如何制作?Linux系统下该如何制作Live USB呢?下面小编就给大家介绍几种方法.一起去看看吧! 1.UNetbootin 这是创建Live USB最流行的工具之一.U ...

  4. linux 开发板传文件,Linux下用USB传输文件到开发板

    记录一下解决EZ6410的板子在Linux下用USB来传输文件问题的过程~ 前两天ARM11的开发板到了,需要先验证一下各项功能.以往用FS2410时用的是minicom+usb2ram,功能比win ...

  5. *Linux下的USB总线驱动 u盘驱动分析*

    Linux下的USB总线驱动(三) u盘驱动分析 版权所有,转载请说明转自 http://my.csdn.net/weiqing1981127 https://www.xuebuyuan.com/13 ...

  6. linux u盘插入事件,Linux 下监控USB设备拔插事件

    Linux 下监控USB设备拔插事件 发布时间:2018-01-29 00:00, 浏览次数:1111 , 标签: Linux USB * 使用Netlink来实现 这是一个特殊的socket,可以接 ...

  7. 在Fedora 16 linux下安装USB无线网卡驱动88x2bu

    在Fedora 16 linux下安装USB无线网卡驱动88x2bu USB无线网卡翼联EP-AC1610兼容linux系统 我之前已经买了一个USB无线网卡是水星mw150us,但是没有linux驱 ...

  8. 如何编写Linux 下的 USB 键盘驱动

     如何编写Linux 下的 USB 键盘驱动 1. 指定 USB 键盘驱动所需的头文件: #include <linux/kernel.h>/*内核头文件,含有内核一些常用函数的原型定 ...

  9. usb hub 要驱动 linux,Linux下的USB HUB驱动

    Linux下的USB HUB驱动 [日期:2012-07-29] 来源:Linux社区 作者:zhengmeifu [字体:大 中 小] 五:hub接口驱动分析 5.1:接口驱动架构 是时候来分析接口 ...

最新文章

  1. leetcode dfs_深度优先搜索:具有6个Leetcode示例的DFS图遍历指南
  2. Spark运行模式Local+Standalone+Yarn+mesos
  3. struts2学习笔记(二):Struts2配置
  4. Openstack Nova 源码分析 — RPC 远程调用过程
  5. 移动应用开发必备工具盘点
  6. 17、有名管道与无名管道之间的区别
  7. 利用std::allocator实现自定义的vector类
  8. virtualbox 使用
  9. android phone win10下载,微软Your Phone新功能: 可在Win 10 PC 上运行 Android 应用程序...
  10. html5图片动且平移,HTML5 Canvas平移,放缩,旋转演示
  11. 安大计算机学院李炜教授,李炜-北京航空航天大学计算机学院
  12. 开课吧9.9学python课_python 自动化运维 零基础入门 课程
  13. C# Access 读写数据库
  14. 几个常用的视频分析工具
  15. directx修复工具win7_[Win] DirectX修复工具 v3.8 增强版
  16. luogu P3934 [Ynoi2016] 炸脖龙 I
  17. OSError: [Errno 28] inotify watch limit reached
  18. 【LOJ2863】【IOI2018】组合动作(交互)
  19. 数据分析学习笔记(二)数据分析三思维七技巧
  20. 大二下-个人课堂总结

热门文章

  1. SharePoint Set-SPUser 命令拒绝访问
  2. 8080处理器计算机启动
  3. [C++] 我们需要掌握多少语法细节
  4. 奇异值分解讨论及其实现的计算步骤
  5. Git 学习笔记:自定义Git(完)
  6. 回溯法模板(矩阵中操作)
  7. 十四、“沥沥雨丝如落泪,麻麻密密总为愁。”(2021.5.2)
  8. [MATLAB调试笔记]Field plot (Ex,Ey,Ez,By,Bz)
  9. 嵌入式linux开发课程设计,嵌入式Linux开发课程设计指导书
  10. vuecli3 引入全局scss变量_在vue-cli 3中给stylus、sass样式传入共享的全局变量