我尝试使用zigbee2mqtt使用 CC2531 USB 棒。我在两台计算机上尝试过:
- 在我的笔记本电脑上运行 ArchLinux (x86_64) (内核 5.2)。一切工作正常 (设备在 上被识别
dmesg
,zigbee2mqtt 工作正常:zigbee 设备出现在日志中) - 在我的 odroid-n2(单板计算机)上运行 Ubuntu 18.04.2 LTS 或 ArchLinuxARM(内核 4.9)(aarch64)。
zigbee2mqtt
启动后,但在 Ubuntu 和 ArchLinuxARM 上均未检测到 zigbee 设备。
从现在开始,每个命令都在 odroid 上执行。
sudo dmesg | grep -i usb
[ 115.960507] usb 1-1.1.1: new full-speed USB device number 8 using xhci-hcd
[ 116.064565] usb 1-1.1.1: New USB device found, idVendor=0451, idProduct=16a8
[ 116.064578] usb 1-1.1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 116.064585] usb 1-1.1.1: Product: TI CC2531 USB CDC
[ 116.064593] usb 1-1.1.1: Manufacturer: Texas Instruments
[ 116.064600] usb 1-1.1.1: SerialNumber: __0X00124B001938A33F
[ 116.087026] usb 1-1.1.1: Unsupported device
[ 116.087333] usb 1-1.1.1: Unsupported device
[ 116.125408] cdc_acm 1-1.1.1:1.0: ttyACM0: USB ACM device
[ 116.126816] usbcore: registered new interface driver cdc_acm
[ 116.126822] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
这不支持的设备让我怀疑是驱动程序问题,但当我拔下并重新插入 cc2531 时,我不再有不支持的设备(dmesg
我必须重新启动才能再次收到此错误)。
ls -l /dev/ttyACM0 odroid@odroid 0s
crw-rw---- 1 root dialout 166, 0 juil. 16 11:58 /dev/ttyACM0
groups odroid
odroid : odroid adm dialout cdrom sudo dip plugdev lpadmin lightdm nopasswdlogin pulse-access docker
在 odroid 上,zigbee2mqtt
没有记录任何错误(我甚至可以用参数关闭 cc2531 的 led zigbee2mqtt
-参见此帖查看完整zigbee2mqtt
日志),但是它没有检测到任何设备。
我尝试将记忆棒直接插入主板的 USB 端口,或使用外部供电集线器。每个端口都是 USB3 端口。cc2531 在集线器和板载集线器上的行为相同。
我不太确定这是否是驱动程序问题,但我不知道还有什么可能导致此问题。
答案1
谢谢观看此视频,我能够识别丢失的驱动程序。我需要USB_SERIAL_TI
在make menuconfig
编译 Linux 内核之前启用该选项。
找到正确选项的步骤:
- 使用识别
idVendor
USB 驱动器dmesg
。在我的例子中0451
- 在 Linux 内核中查找此驱动程序文件
idVendor
。我的 USB 棒由德州仪器 (TIdmesg
)制造
$ git clone --depth 1 --branch master https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git linux
...
$ cd linux
$ grep -i 0x0451 -r --include='*.c' drivers/
...
drivers/usb/serial/ti_usb_3410_5052.c:#define TI_VENDOR_ID 0x0451
...
- 驱动程序文件可能是
ti_usb_3410_5052.c
。现在我需要找到在 Linux 内核编译期间包含此文件的选项。我需要在与ti_usb_3410_5052.c
$ cat drivers/usb/serial/Makefile | grep -i ti_usb_3410_5052
obj-$(CONFIG_USB_SERIAL_TI) += ti_usb_3410_5052.o
- 该选项是
USB_SERIAL_TI
。我可以使用make menuconfig
来启用它。