Raspberry-Pi
連接到 HUB 的 USB 設備的 KERNELS 路徑
我正在創建 udev 規則以將我的 USB 設備 (ttyUSB*) 映射到它們所連接的 USB 埠。通常的方法是查看以下輸出:
udevadm info --name=/dev/ttyUSB0 --attribute-walk
這是我的輸出(我刪除了
ATTRS
沒有意義的行):looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5.6/1-1.5.6:1.0/ttyUSB0/tty/ttyUSB0': KERNEL=="ttyUSB0" SUBSYSTEM=="tty" DRIVER=="" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5.6/1-1.5.6:1.0/ttyUSB0': KERNELS=="ttyUSB0" SUBSYSTEMS=="usb-serial" DRIVERS=="ftdi_sio" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5.6/1-1.5.6:1.0': KERNELS=="1-1.5.6:1.0" SUBSYSTEMS=="usb" DRIVERS=="ftdi_sio" ATTRS{interface}=="USB-RS485 Cable" ATTRS{supports_autosuspend}=="1" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5.6': KERNELS=="1-1.5.6" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{idProduct}=="6001" ATTRS{idVendor}=="0403" ATTRS{manufacturer}=="FTDI" ATTRS{product}=="USB-RS485 Cable" ATTRS{serial}=="FTY48GF2" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5': KERNELS=="1-1.5" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{product}=="USB 2.0 Hub [MTT]" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1': KERNELS=="1-1" SUBSYSTEMS=="usb" DRIVERS=="usb" looking at parent device '/devices/platform/soc/3f980000.usb/usb1': KERNELS=="usb1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{manufacturer}=="Linux 4.9.41-v7+ dwc_otg_hcd" ATTRS{product}=="DWC OTG Controller" looking at parent device '/devices/platform/soc/3f980000.usb': KERNELS=="3f980000.usb" SUBSYSTEMS=="platform" DRIVERS=="dwc_otg" looking at parent device '/devices/platform/soc': KERNELS=="soc" SUBSYSTEMS=="platform" DRIVERS=="" looking at parent device '/devices/platform': KERNELS=="platform" SUBSYSTEMS=="" DRIVERS==""
這裡的連接:Raspberry Pi -> USB HUB -> FTDI dongle。我的規則如下:
$ cat /etc/udev/rules.d/99-usb.rules KERNEL=="1-1.5.6", SUBSYSTEM=="usb", SYMLINK+="rs485"
但:
# ls -l /dev/rs485 lrwxrwxrwx 1 root root 15 Oct 4 07:04 /dev/rs485 -> bus/usb/001/009
我期待符號連結應該創建到 /dev/ttyUSB0。現在,我了解到我的加密狗位於 USB 位置:
$ lsusb Bus 001 Device 006: ID 046d:c062 Logitech, Inc. M-UAS144 [LS1 Laser Mouse] Bus 001 Device 009: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC ...
但當然它不是串列埠(即我不能
echo
這樣做)。嘗試1-1.5.6:1.0
用作 KERNEL 密鑰不起作用 - 沒有創建符號連結。我應該使用什麼值?
如果您查看
man udev
,KERNELS
搜尋設備路徑,同時KERNEL
匹配設備本身,並SUBSYSTEM
表示生成事件的核心部分。插入 USB 加密狗後,會創建幾個udev 事件,因為核心的一部分會發現設備並做出相應的反應。您希望您的規則觸發設備本身的操作(
SUBSYSTEM=="tty"
因為您想要一個連結/dev/ttyUSB0
),但是使用SUBSYSTEMS=="usb"
時,它會在發現 USB 設備本身時觸發,而不是在啟動 USB 設備的驅動程序時觸發。這就是為什麼您會從 USB 子系統中看到指向 USB 設備的連結,bus/usb/001/009o
.所以你需要的是
KERNELS=="1-1.5.6", SUBSYSTEM=="tty", SYMLINK+="rs485"
(注意
S
和tty
)。