linux查看usb文件,linux 查看USB端口挂载设备 | USB端口检测 | USB热插拔检测

此文主要针对嵌入式板测USB端口需求,当然linux PC设备也同样适用。

目的是 检测当前 设备的USB端口是否正常,插入相应设备是否能够正常挂载。

作者主要想到了两种办法,第一种通过脚本命令,第二种则是通过C代码来实现检测USB的热插拔。

先来说第一种方法—-lsusb命令

———-华丽分割线———

通过lsusb命令我们可以实现某个USB端口的设备检测,一般嵌入式设备通常有几个USB总线端口,例如001 002 003总线,而通过下面的命令则可以查看001总线下的USB设备:

// 命令行

lsusb -s 002:

//运行结果:

root@ubuntu:~# lsusb -s 001:

Bus 001 Device 039: ID 203a:fffa

Bus 001 Device 038: ID 203a:fffa

Bus 001 Device 037: ID 203a:fff9

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

//当我们在该总线USB端口插入一个USB无线网卡,再次执行该命令,结果如下:

root@ubuntu:~# lsusb -s 001:

Bus 001 Device 043: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network Adapter

Bus 001 Device 039: ID 203a:fffa

Bus 001 Device 038: ID 203a:fffa

Bus 001 Device 037: ID 203a:fff9

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

//从结果可以看到多出一个043的USB设备,描述可以看出是一个型号为RTL8188EUS的无线网卡

以上就是第一种方法,而通过这个命令我们也可以用代码封装,解析返回结果,分析端口信息等,这里就不多做描述了,大家自己探索吧。

———-华丽分割线———

第二种方法,是通过 文件描述法 也就是常常了解的套接字,代码如下:

//

// USB.c

//

//

// Created by huangea on 2018/4/20.

//

#include #include #include #include #include #include int main(void)

{

struct sockaddr_nl clt;

struct timeval t1;

fd_set fd;

int buf_size = 2048, len, ret, usb_test;

//创建套接字

usb_test = socket(AF_NETLINK, SOCK_RAW, NETLINK_KOBJECT_UEVENT);

memset(&clt, 0, sizeof(clt));

clt.nl_pid = getpid();

clt.nl_family = AF_NETLINK;

clt.nl_groups = 1;

setsockopt(usb_test, SOL_SOCKET, SO_RCVBUF, &buf_size, sizeof(buf_size));

//绑定套接字

bind(usb_test, (struct sockaddr*)&clt, sizeof(clt));

while (1)

{

char buf[2048];

memset(&buf,0,sizeof(buf));

FD_ZERO(&fd);

FD_SET(usb_test, &fd);

//监测频率周期

t1.tv_sec = 0;

t1.tv_usec = 50 * 1000;

//监测

ret = select(usb_test + 1, &fd, NULL, NULL, &t1);

if(ret < 0)

continue;

if(!(ret > 0 && FD_ISSET(usb_test, &fd)))

continue;

len = recv(usb_test, &buf, sizeof(buf), 0);

if (len > 0)

{

printf("%s\n", buf);//打印收到的数据

}

}

close(usb_test);

return 0;

}

测试以上代码,当插入及拔出USB设备,程序输出结果如下:

root@ubuntu:~# ./usb.out

//此时插入USB无线网卡

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlan0

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlan0/queues/rx-0

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlan0/queues/rx-1

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlan0/queues/rx-2

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlan0/queues/rx-3

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlan0/queues/tx-0

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlan0/queues/tx-1

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlan0/queues/tx-2

add@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlan0/queues/tx-3

move@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlx0013ef800008

//此时移除USB网卡

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlx0013ef800008/queues/rx-3

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlx0013ef800008/queues/rx-2

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlx0013ef800008/queues/rx-1

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlx0013ef800008/queues/rx-0

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlx0013ef800008/queues/tx-3

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlx0013ef800008/queues/tx-2

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlx0013ef800008/queues/tx-1

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlx0013ef800008/queues/tx-0

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0/net/wlx0013ef800008

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0

remove@/devices/pci0000:00/0000:00:1d.7/usb1/1-4

通过以上实验,进行结果分析,依然可以检测当前USB总线是否正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值