我正在寻找扭转的方法power关闭(然后重新打开)USB 端口。解决方案可以是 C、bash 等。我使用运行 32 位 Ubuntu 16.04 的 BeagleBone for armhf。
> uname -srvm
Linux 4.4.6-ti-r15 #1 SMP Tue Apr 5 12:32:22 UTC 2016 armv7l
我尝试过 StackOverflow 和 AskUbuntu 上讨论的许多内容,包括:
#include <linux/usbdevice_fs.h>
int main(void)
{
int fd = open( "/dev/bus/usb/001/002", O_WRONLY );
if (fd < 0) return 1;
int rc = ioctl( fd, USBDEVFS_RESET, 0 );
if (rc < 0) return 2;
close( fd );
return 0;
}
我需要关闭(并最终重新打开)的 USB 设备是 Champtek FS310 条码读取器,当我运行 lsusb 时,它显示为磁卡读卡器:
> lsusb
Bus 001 Device 002: ID 040b:6543 Weltrend Semiconductor Manhattan Magnetic Card Strip Reader
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
> lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=musb-hdrc/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
我发现运行这两个命令会导致设备关闭:
echo "1-1" > /sys/bus/usb/drivers/usb/unbind
echo "1-1" > /sys/bus/usb/drivers/usb/bind
奇怪的是,它只在“绑定”期间关闭,而不是在“取消绑定”期间关闭。但是,一旦以这种方式关闭,我发现重新打开它的唯一方法就是重新启动计算机,这不是一个可用的解决方案。