Tag: usb

  • OpenWRT Auto Bind USB Device to USBIP

    OpenWRT 加载设备自动执行脚本使用的是 hotplug,官方文档在

    https://openwrt.org/docs/guide-user/base-system/hotplug

    一般 Linux 可能要使用 udev。

    此方案的设计目标是,使支持 OpenWRT 的随身路由,通过 USB/IP,改造成车载CAN采集终端,并可以支持远程实时采集、刷写。

    简单的脚本如下。(此处只使用了 ETAS 的产品的 USB VID,其他诸如 Vector,IntrepidCS,Peak 等的,修改 if 的条件即可。)

    /etc/hotplug/usb/99-usbcan

    #!/bin/sh
    
    # ETAS 58x
    #    108c/168/*) # es582.1
    #    108c/169/*) # es584.1
    #    108c/15a/*) # es583.1
    #    108c/159/*) # es581.4
    #    108c/15b/*) # es581.4
    
    if [ "${ACTION}" = "bind" ]; then
        if [[ "${PRODUCT}" =~ "108c/.*" ]]; then
          usbip bind -b ${DEVICENAME}
        fi
    fi
    
    if [ "${ACTION}" = "remove" ]; then
        if [[ "${PRODUCT}" =~ "108c/.*" ]]; then
          usbip unbind -b ${DEVICENAME}
        fi
    fi

    附上记录的日志,内容格式

    "$PRODUCT detected, Action=${ACTION}, DEVICENAME=${DEVICENAME}, DEVICE_TTY=${DEVICE_TTY}, DEVPATH=${DEVPATH}"

    插拔 ES582.1 的日志

    
    108c/168/100 detected, Action=add, DEVICENAME=3-1, DEVICE_TTY=, DEVPATH=/devices/platform/usbdrd3_0/fc000000.usb/xhci-hcd.6.auto/usb3/3-1
    108c/168/100 detected, Action=add, DEVICENAME=3-1:1.0, DEVICE_TTY=, DEVPATH=/devices/platform/usbdrd3_0/fc000000.usb/xhci-hcd.6.auto/usb3/3-1/3-1:1.0
    108c/168/100 detected, Action=add, DEVICENAME=3-1:1.1, DEVICE_TTY=, DEVPATH=/devices/platform/usbdrd3_0/fc000000.usb/xhci-hcd.6.auto/usb3/3-1/3-1:1.1
    108c/168/100 detected, Action=bind, DEVICENAME=3-1, DEVICE_TTY=, DEVPATH=/devices/platform/usbdrd3_0/fc000000.usb/xhci-hcd.6.auto/usb3/3-1
    
    108c/168/100 detected, Action=remove, DEVICENAME=3-1:1.0, DEVICE_TTY=, DEVPATH=/devices/platform/usbdrd3_0/fc000000.usb/xhci-hcd.6.auto/usb3/3-1/3-1:1.0
    108c/168/100 detected, Action=remove, DEVICENAME=3-1:1.1, DEVICE_TTY=, DEVPATH=/devices/platform/usbdrd3_0/fc000000.usb/xhci-hcd.6.auto/usb3/3-1/3-1:1.1
    108c/168/100 detected, Action=unbind, DEVICENAME=3-1, DEVICE_TTY=, DEVPATH=/devices/platform/usbdrd3_0/fc000000.usb/xhci-hcd.6.auto/usb3/3-1
    108c/168/100 detected, Action=remove, DEVICENAME=3-1, DEVICE_TTY=, DEVPATH=/devices/platform/usbdrd3_0/fc000000.usb/xhci-hcd.6.auto/usb3/3-1

    其他已知的 USB VIDs:

    Vector: 0x1248
    Peak System: 0x0C72
    Kvaser: 0x0BFD

    也可以从Linux 内核源码里找 https://github.com/torvalds/linux/tree/master/drivers/net/can/usb

  • USBIP + Windows

    测试环境:Linux(PVE) + Windows 10

    软件 https://github.com/vadimgrn/usbip-win2

    使用设备 ETAS ES582.1

    服务端安装

    # 安装
    apt update
    apt install usbip
    # 加载
    modprobe usbip-host
    modprobe usbip-core
    modprobe vhci-hcd
    # 查看列表,查找到 bus id
    usbip list -l
    # bind 设备
    usbip bind -b 1-3
    # 启动服务端
    usbipd -D

    启动后,服务端会打开 TCP 3240 端口。

    客户端,Windows,安装二进制,按要求重启。

    管理员模式 CMD 允许自定义驱动,执行完再重启

    bcdedit.exe /set testsigning on

    usbip.exe 被加到了 %PATH% 里,我是用的 0.9.5.5 版,命令行需要使用 usbip.exe ,如果使用 usbip 会无响应。

    >usbip.exe list -r 192.168.8.254
    Exportable USB devices
    ======================
        1-3    : Robert Bosch GmbH : unknown product (108c:0168)
               : /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3
               : (Defined at Interface level) (00/00/00)
               :  0 - Communications/Multi-Channel/? (02/04/01)
               :  1 - (Defined at Interface level) (00/00/00)
    >usbip.exe attach -r 192.168.8.254 -b 1-3
    succesfully attached to port 1

    使用 ETAS HSP,设备能正常识别。

    Linux 端,tcpdump 抓包,数据能抓到,但是 WireShark 自带的 dissector 暂时有问题,解析不完整。

    理论上到了 tcp/ip 的这条路,做个 mitm 应该就好搞了。