不同Linux

时间:2018-01-16 04:54:56

标签: linux ubuntu usb openwrt

由于物联网的发展,我需要在某些微控制器中使用稳定的USB CDC ACM固件。但是我发现相同的设备/固件在所有Linux操作系统中都不能正常工作。

我测试过以下主板/固件:

  1. 来自mbed社区的STM32F103C8T6_USBSerial
  2. 来自mbed OS的STM32F40X
  3. 用于STM32F103的Keil USB堆栈
  4. 来自NUCLEO的STLinkV2 VCP
  5. 恩智浦LPC54114 CMSIS-DAP VCP
  6. STM32F103 CubeMX HAL(待测试)
  7. Maple STM32F103 USB驱动程序(待测试)
  8. 我试图将这些电路板连接到:

    1. 的OpenWRT
    2. Ubuntu 12.04桌面/服务器
    3. Ubuntu 14.04桌面/服务器
    4. Ubuntu 15.04桌面
    5. 固件#1​​不适用于#1/2/3操作系统,而其他一些硬件可能适用于大多数操作系统。我尝试过不同的工具,包括gtkterm / echo / cat / stty / minicom / usbmon,python serial和lua.io.结果是一样的。

      固件和操作系统似乎都有问题。但是,在某些情况下,我们无法在操作系统中进行太多改动。但是如何确定根本原因并将其修复。

      更新

      我在此处粘贴了跟踪记录。

      dmesg的

      [  217.735609] usb 1-2: new full-speed USB device number 3 using ohci_hcd
      [  218.232189] usb 1-2: New USB device found, idVendor=1f00, idProduct=2012
      [  218.232195] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
      [  218.232199] usb 1-2: Product: CDC DEVICE
      [  218.232202] usb 1-2: Manufacturer: mbed.org
      [  218.232205] usb 1-2: SerialNumber: 0123456789
      [  218.298612] cdc_acm 1-2:1.0: ttyACM0: USB ACM device
      [  218.320171] usbcore: registered new interface driver cdc_acm
      [  218.320179] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
      

      的lsusb

      Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
      Bus 001 Device 003: ID 1f00:2012  
      Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
      

      lsbusb -v

      Bus 001 Device 003: ID 1f00:2012  
      Couldn't open device, some information will be missing
      Device Descriptor:
        bLength                18
        bDescriptorType         1
        bcdUSB               1.10
        bDeviceClass            2 Communications
        bDeviceSubClass         0 
        bDeviceProtocol         0 
        bMaxPacketSize0        64
        idVendor           0x1f00 
        idProduct          0x2012 
        bcdDevice            1.00
        iManufacturer           1 
        iProduct                2 
        iSerial                 3 
        bNumConfigurations      1
        Configuration Descriptor:
          bLength                 9
          bDescriptorType         2
          wTotalLength           75
          bNumInterfaces          2
          bConfigurationValue     1
          iConfiguration          0 
          bmAttributes         0x80
            (Bus Powered)
          MaxPower              100mA
          Interface Association:
            bLength                 8
            bDescriptorType        11
            bFirstInterface         0
            bInterfaceCount         2
            bFunctionClass          2 Communications
            bFunctionSubClass       2 Abstract (modem)
            bFunctionProtocol       0 None
            iFunction               0 
          Interface Descriptor:
            bLength                 9
            bDescriptorType         4
            bInterfaceNumber        0
            bAlternateSetting       0
            bNumEndpoints           1
            bInterfaceClass         2 Communications
            bInterfaceSubClass      2 Abstract (modem)
            bInterfaceProtocol      1 AT-commands (v.25ter)
            iInterface              0 
            CDC Header:
              bcdCDC               1.10
            CDC Call Management:
              bmCapabilities       0x03
                call management
                use DataInterface
              bDataInterface          1
            CDC ACM:
              bmCapabilities       0x06
                sends break
                line coding and serial state
            CDC Union:
              bMasterInterface        0
              bSlaveInterface         1 
            Endpoint Descriptor:
              bLength                 7
              bDescriptorType         5
              bEndpointAddress     0x81  EP 1 IN
              bmAttributes            3
                Transfer Type            Interrupt
                Synch Type               None
                Usage Type               Data
              wMaxPacketSize     0x0040  1x 64 bytes
              bInterval              16
          Interface Descriptor:
            bLength                 9
            bDescriptorType         4
            bInterfaceNumber        1
            bAlternateSetting       0
            bNumEndpoints           2
            bInterfaceClass        10 CDC Data
            bInterfaceSubClass      0 Unused
            bInterfaceProtocol      0 
            iInterface              0 
            Endpoint Descriptor:
              bLength                 7
              bDescriptorType         5
              bEndpointAddress     0x82  EP 2 IN
              bmAttributes            2
                Transfer Type            Bulk
                Synch Type               None
                Usage Type               Data
              wMaxPacketSize     0x0040  1x 64 bytes
              bInterval               0
            Endpoint Descriptor:
              bLength                 7
              bDescriptorType         5
              bEndpointAddress     0x02  EP 2 OUT
              bmAttributes            2
                Transfer Type            Bulk
                Synch Type               None
                Usage Type               Data
              wMaxPacketSize     0x0040  1x 64 bytes
              bInterval               0
      

      查找/ dev / bus

      /dev/bus
      /dev/bus/usb
      /dev/bus/usb/001
      /dev/bus/usb/001/003
      /dev/bus/usb/001/002
      /dev/bus/usb/001/001
      

      USB设备信息

      ll /sys/bus/usb/devices
      总用量 0
      drwxr-xr-x 2 root root 0  1月 26 19:34 ./
      drwxr-xr-x 4 root root 0  1月 26 19:34 ../
      lrwxrwxrwx 1 root root 0  1月 26 19:34 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:06.0/usb1/1-0:1.0/
      lrwxrwxrwx 1 root root 0  1月 26 19:34 1-1 -> ../../../devices/pci0000:00/0000:00:06.0/usb1/1-1/
      lrwxrwxrwx 1 root root 0  1月 26 19:34 1-1:1.0 -> ../../../devices/pci0000:00/0000:00:06.0/usb1/1-1/1-1:1.0/
      lrwxrwxrwx 1 root root 0  1月 26 19:38 1-2 -> ../../../devices/pci0000:00/0000:00:06.0/usb1/1-2/
      lrwxrwxrwx 1 root root 0  1月 26 19:41 1-2:1.0 -> ../../../devices/pci0000:00/0000:00:06.0/usb1/1-2/1-2:1.0/
      lrwxrwxrwx 1 root root 0  1月 26 19:41 1-2:1.1 -> ../../../devices/pci0000:00/0000:00:06.0/usb1/1-2/1-2:1.1/
      lrwxrwxrwx 1 root root 0  1月 26 19:34 usb1 -> ../../../devices/pci0000:00/0000:00:06.0/usb1/
      
      cd /sys/bus/usb/devices/1-2
      ll
      
      ll
      总用量 0
      drwxr-xr-x 6 root root     0  1月 26 19:38 ./
      drwxr-xr-x 7 root root     0  1月 26 19:34 ../
      drwxr-xr-x 5 root root     0  1月 26 19:38 1-2:1.0/
      drwxr-xr-x 5 root root     0  1月 26 19:38 1-2:1.1/
      -rw-r--r-- 1 root root  4096  1月 26 19:54 authorized
      -rw-r--r-- 1 root root  4096  1月 26 19:54 avoid_reset_quirk
      -r--r--r-- 1 root root  4096  1月 26 19:38 bcdDevice
      -rw-r--r-- 1 root root  4096  1月 26 19:54 bConfigurationValue
      -r--r--r-- 1 root root  4096  1月 26 19:38 bDeviceClass
      -r--r--r-- 1 root root  4096  1月 26 19:54 bDeviceProtocol
      -r--r--r-- 1 root root  4096  1月 26 19:54 bDeviceSubClass
      -r--r--r-- 1 root root  4096  1月 26 19:54 bmAttributes
      -r--r--r-- 1 root root  4096  1月 26 19:54 bMaxPacketSize0
      -r--r--r-- 1 root root  4096  1月 26 19:54 bMaxPower
      -r--r--r-- 1 root root  4096  1月 26 19:54 bNumConfigurations
      -r--r--r-- 1 root root  4096  1月 26 19:54 bNumInterfaces
      -r--r--r-- 1 root root  4096  1月 26 19:38 busnum
      -r--r--r-- 1 root root  4096  1月 26 19:54 configuration
      -r--r--r-- 1 root root 65553  1月 26 19:38 descriptors
      -r--r--r-- 1 root root  4096  1月 26 19:54 dev
      -r--r--r-- 1 root root  4096  1月 26 19:38 devnum
      -r--r--r-- 1 root root  4096  1月 26 19:54 devpath
      lrwxrwxrwx 1 root root     0  1月 26 19:38 driver -> ../../../../../bus/usb/drivers/usb/
      drwxr-xr-x 3 root root     0  1月 26 19:54 ep_00/
      -r--r--r-- 1 root root  4096  1月 26 19:38 idProduct
      -r--r--r-- 1 root root  4096  1月 26 19:38 idVendor
      -r--r--r-- 1 root root  4096  1月 26 19:54 ltm_capable
      -r--r--r-- 1 root root  4096  1月 26 19:38 manufacturer
      -r--r--r-- 1 root root  4096  1月 26 19:54 maxchild
      lrwxrwxrwx 1 root root     0  1月 26 19:54 port -> ../1-0:1.0/port2/
      drwxr-xr-x 2 root root     0  1月 26 19:54 power/
      -r--r--r-- 1 root root  4096  1月 26 19:38 product
      -r--r--r-- 1 root root  4096  1月 26 19:54 quirks
      -r--r--r-- 1 root root  4096  1月 26 19:38 removable
      --w------- 1 root root  4096  1月 26 19:54 remove
      -r--r--r-- 1 root root  4096  1月 26 19:38 serial
      -r--r--r-- 1 root root  4096  1月 26 19:38 speed
      lrwxrwxrwx 1 root root     0  1月 26 19:38 subsystem -> ../../../../../bus/usb/
      -rw-r--r-- 1 root root  4096  1月 26 19:38 uevent
      -r--r--r-- 1 root root  4096  1月 26 19:54 urbnum
      -r--r--r-- 1 root root  4096  1月 26 19:54 version
      

      cat virutal files

      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat authorized 
      1
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat avoid_reset_quirk 
      0
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat bcdDevice 
      0100
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat bConfigurationValue 
      1
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat bDeviceClass 
      02
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat bDeviceProtocol 
      00
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat bDeviceSubClass 
      00
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat bmAttributes 
      80
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat bMaxPacketSize0 
      64
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat bMaxPower 
      100mA
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat bNumConfigurations 
      1
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat bNumInterfaces 
       2
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat busnum 
      1
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat configuration 
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat descriptors 
      @   K�2
                              $$$$�@  
      �@@allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat dev
      189:2
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat devnum
      3
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat devpath 
      2
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat idProduct 
      2012
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat idVendor 
      1f00
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat ltm_capable 
      no
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat manufacturer 
      mbed.org
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat maxchild 
      0
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat product 
      CDC DEVICE
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat quirks 
      0x0
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat removable 
      unknown
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat remove
      cat: remove: 权限不够
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat serial 
      0123456789
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat speed 
      12
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat uevent 
      MAJOR=189
      MINOR=2
      DEVNAME=bus/usb/001/003
      DEVTYPE=usb_device
      DRIVER=usb
      PRODUCT=1f00/2012/100
      TYPE=2/0/0
      BUSNUM=001
      DEVNUM=003
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat urbnum 
      138
      allankliu@allankliu-VirtualBox:/sys/bus/usb/devices/1-2$ cat version 
       1.10
      

      检查/ dev / ttyACM0

      crw-rw----   1 root    dialout 166,   0  1月 26 19:38 ttyACM0
      

      usbmon

      sudo ls /sys/kernel/debug/usb/usbmon
      [sudo] password for allankliu: 
      0s  0u  1s  1t  1u
      
      sudo cat /sys/kernel/debug/usb/devices
      ...
      
      T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  3 Spd=12   MxCh= 0
      D:  Ver= 1.10 Cls=02(comm.) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
      P:  Vendor=1f00 ProdID=2012 Rev= 1.00
      S:  Manufacturer=mbed.org
      S:  Product=CDC DEVICE
      S:  SerialNumber=0123456789
      C:* #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=100mA
      A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=02 Prot=00
      I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=cdc_acm
      E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=16ms
      I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm
      E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
      E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
      

      设备文件系统

      插入设备后立即生成

      / dev / ttyACM0。

      gtkterm

      无论波特率如何,都可以打开设备,但不能输出。

      观察

      1. 在lsusb中,没有打印出产品名称,但工作CDC设备也存在同样的问题;
      2. 在lsusb -v中,无法打开设备时出现错误,部分信息将丢失,但即使是Linux集线器也存在相同的问题。
      3. 当cat / sys / bus / usb / devices / 1-2 / descriptor时,它返回二进制数据,但其他USB设备是相同的,无论如何它似乎是一个二进制文件。
      4. 到目前为止,根据数据,我无法找到操作系统的重大差异或错误,但无论如何都没有输出,但它在Windows / Ubuntu 15或更高版本中有输出。

        下一步,我将使用wireshark / tcpdump来查找。

        更新

        在一些实验室之后,我发现实际上这个STM32F103C8(所谓的bluepill)已经成功地发挥了作用。 OpenWRT / Ubuntu12.04 / 14.04 / 16.04 / 18.04支持USB加密狗,但有时设备会暂停一段时间。暂停后,通讯恢复正常。

        纯固件问题。

1 个答案:

答案 0 :(得分:0)

  • 我建议您使用Beagle USB 12之类的USB协议分析器,这样您就可以查看设备与操作系统之间的通信。您可以同时研究工作案例和非工作案例。
  • 您还应该运行@NgModule({ imports: [ RouterModule.forChild(routes), FormsModule, ReactiveFormsModule, CommonModule <================== this line ], declarations: [ RegisterComponent // this component wants to have access to built-in directives ], exports: [RouterModule] }) export class RegisterRouter { } 并在插入设备时查找来自Linux的cdc-acm驱动程序的消息。您可以找到与dmesg运行的内核版本和然后查看该内核版本中cdc-acm模块的源代码。
  • 您可以使用uname -a查看设备的USB描述符,并确保它们有效。
  • 您还应该确保清楚地了解系统在不起作用时会出现什么症状,并使用它来缩小搜索范围。例如,如果没有创建lsusb -v条目,那么与您对端口的读写失败相比,这是一种不同类型的问题。

使用上述方法,您应该能够找出问题所在并进行修复。这几乎肯定是固件问题,而不是硬件问题。我怀疑你的USB描述符有问题所以我先开始在那里看。