簡體   English   中英

如何在邏輯上斷開和重新連接USB調制解調器而又無需物理拔出

[英]How to logically disconnect and reconnect a USB modem without unplugging it physically

我想像重新啟動電源一樣重新啟動USB調制解調器,而無需在Linux計算機中物理上重新啟動和拔下USB調制解調器。 我嘗試執行此過程:

  • echo -n 0> /sys/devices/platform/omap/ti81xx-usbss/musb-hdrc.0/usb1/bConfigurationValue
  • echo -n 1> /sys/devices/platform/omap/ti81xx-usbss/musb-hdrc.0/usb1/bConfigurationValue

但是我只能斷開它,但是第二條命令失敗了。 提供以下打印:

hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
usb 1-1: new full speed USB device using musb-hdrc and address 4
usb 1-1: device descriptor read/64, error -19
usb 1-1: device descriptor read/64, error -19
usb 1-1: new full speed USB device using musb-hdrc and address 5
usb 1-1: device descriptor read/64, error -19
usb 1-1: device descriptor read/64, error -19
usb 1-1: new full speed USB device using musb-hdrc and address 6
usb 1-1: device not accepting address 6, error -19
usb 1-1: new full speed USB device using musb-hdrc and address 7
usb 1-1: device not accepting address 7, error -19
hub 1-0:1.0: unable to enumerate USB device on port 1

有什么方法可以使此重置過程自動化。 這樣,如果我插入模塊,它應該注冊USB設備,而當我rmmod一個模塊時,它應該斷開USB設備。

有沒有這樣的模塊?

就像您要在管理上關閉/不關閉任何其他接口一樣。

#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>

void main(int argc, char **argv)
{
    const char *filename;
    int fd;

     filename = argv[1];
    fd = open(filename, O_WRONLY);
    ioctl(fd, USBDEVFS_RESET, 0);
    close(fd);
    return;
}

編譯代碼:

$ gcc -o usb-reset usb-reset.c

我在/dev/ttyACM0將Arduino連接到我的ubuntu機器,我將嘗試通過以下方式重置Arduino:

sudo ./usb-reset /dev/ttyACM0

這重置了主板!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM