try*_*tch 22 drivers embedded usb serial-port
我试图让一个带有自定义 PID 的 FTDI USB 串行设备自动(甚至手动)连接到 ttyUSB%n,但没有取得多大成功。设备的正常 VID/PID 为 0403/6001。以这种方式编程时,它可以完美运行并在插入时自动将自身连接到 ttyUSB0。即使重新编译驱动程序以尊重我们的新 PID,当使用自定义的 ttyUSB0 编程时,也不会出现,但它确实将其识别为 ftdi_sio 设备并且加载驱动程序。
我已将我们的 PID 添加到标题和源代码中:
// in ftdi_sio_ids.h
#define FTDI_CUSTOM_PID 0xABCD // not the actual pid
Run Code Online (Sandbox Code Playgroud)
// then in ftdi_sio.c
static struct usb_device_id id_table_combined [] = {
// devices....
{ USB_DEVICE(FTDI_VID, FTDI_CUSTOM_PID) },
// ....
Run Code Online (Sandbox Code Playgroud)
重新编译整个内核并刷新设备。当我插入设备时,我得到:
usb 1-1: new full-speed USB device number 2 using at91_ohci
usbcore: registered new interface driver usbserial
usbserial: USB Serial Driver core
USB Serial support registered for FTDI USB Serial Device
usbcore: registered new interface driver ftdi_sio
ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver
Run Code Online (Sandbox Code Playgroud)
lsusb 显示正确的自定义 VID/PID。驱动程序似乎认识到它应该与 ftdi_sio 一起使用,但没有像使用未修改的 PID 那样将它附加到 ttyUSB0。关于我在这里做错了什么的任何建议?
rob*_*at2 23
您不需要将内核修改为仅一次;你可以覆盖它。
modprobe ftdi_sio
echo 0403 6001 >/sys/bus/usb-serial/drivers/ftdi_sio/new_id
你的设备应该可以工作。
您的另一种选择是使用bind
sysfs 接口;lsusb -t
在这种情况下,我建议使用来找出正确的路径+接口。
使用我系统中的一个部分示例,一个 USB 存储设备(对于 USB 串行来说非常相似)。
$ lsusb -t
...
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
|__ Port 1: Dev 5, If 0, Class=Hub, Driver=hub/3p, 5000M
|__ Port 3: Dev 6, If 0, Class=Hub, Driver=hub/3p, 5000M
|__ Port 3: Dev 7, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
...
$ echo '4-1.3.3:1.0' >/sys/bus/usb/drivers/usb-storage/bind
Run Code Online (Sandbox Code Playgroud)
号码格式为:BUS-PORT(.PORT)+:1.INTERFACE
. 在 lsusb 输出中唯一不可见的数字是冒号后的第一个数字;这一直是1
我的经验。具有更深入内核知识的人可能会告诉我它是什么并提供一个反例。
小智 18
你不需要修改内核,你可以像这样自动化这个过程:
将以下单行添加到 /etc/udev/rules.d/99-ftdi.rules
ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", RUN+="/sbin/modprobe ftdi_sio" RUN+="/bin/sh -c 'echo 0403 6001 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id'"
重新启动或运行sudo udevadm control --reload
以获取新规则。
拔下设备。
插入设备。