Udev
udev 不適用規則
我在從 udev 分配規則時遇到一些問題。
我的板上安裝了 2 個FTDI232晶片(它們總共有 3 個,但我現在對其中 2 個感興趣),核心使用驅動程序ftdi_sio管理它們,將它們命名為ttyUS0和ttyUSB1並且我正在應用這些規則以將它們命名為usbS1和usbS2:
KERNELS=="1-2.1" KERNEL=="ttyUSB0" ATTR{idVendor}=="0403" ATTR{idProduct}=="6001" SUBSYSTEMS=="usb" NAME="usbS1" KERNELS=="1-2.2" KERNEL=="ttyUSB1" ATTR{idVendor}=="0403" ATTR{idProduct}=="6001" SUBSYSTEMS=="usb" NAME="usbS2"
根據dmesg的資訊
[ 4.676116] usb 1-2.1: new full-speed USB device number 3 using ehci-omap [ 4.811920] usb 1-2.1: New USB device found, idVendor=0403, idProduct=6001 [ 4.819244] usb 1-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 4.826965] usb 1-2.1: Product: FT232R USB UART [ 4.831726] usb 1-2.1: Manufacturer: FTDI [ 4.835968] usb 1-2.1: SerialNumber: A101XRTT [ 4.963256] usb 1-2.2: new full-speed USB device number 4 using ehci-omap [ 5.102355] usb 1-2.2: New USB device found, idVendor=0403, idProduct=6001 [ 5.109649] usb 1-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 5.117370] usb 1-2.2: Product: FT232R USB UART [ 5.122161] usb 1-2.2: Manufacturer: FTDI [ 5.126403] usb 1-2.2: SerialNumber: A101XRTQ ... [ 16.839935] usbserial: USB Serial support registered for FTDI USB Serial Device [ 16.848327] ftdi_sio 1-2.1:1.0: FTDI USB Serial Device converter detected [ 16.856781] usb 1-2.1: Detected FT232RL [ 16.977935] usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0 [ 16.986785] ftdi_sio 1-2.2:1.0: FTDI USB Serial Device converter detected [ 16.994720] usb 1-2.2: Detected FT232RL [ 17.099914] usb 1-2.2: FTDI USB Serial Device converter now attached to ttyUSB1 [ 17.108581] ftdi_sio 1-2.7:1.0: FTDI USB Serial Device converter detected [ 17.116485] usb 1-2.7: Detected FT232RL [ 17.165710] i2c 2-005c: Driver mt9v032 requests probe deferral [ 17.187561] twl4030_madc 48070000.i2c:twl@48:madc: clk disabled, enabling [ 17.228759] usb 1-2.7: FTDI USB Serial Device converter now attached to ttyUSB2
但它不起作用。我不知道為什麼。
在舊系統(核心 2.6.34)上,我只是應用這些規則:
KERNELS=="2-2.1" SUBSYSTEMS=="usb" NAME="usbS1" KERNELS=="2-2.2" SUBSYSTEMS=="usb" NAME="usbS2"
它在那個系統上工作得很好,但在我現在正在工作的這個系統上卻不行(當然改變了 KERNELS 參數)。
我的規則文件有什麼問題?
可能是以下情況之一:
- 在規則中,您通過它們的核心名稱 (KERNEL=) 直接引用這些設備,並且核心可能不會呼叫您的設備
ttyUSB?
,因此,該規則不適用udev
不會或無法讀取您編寫規則的文件。udev
對於相同的設備,已經有另一個規則覆蓋了您的規則,並將ttyUSB?
名稱應用於它們。所以,我建議你…
- 檢查您設備的核心名稱是否確實是
ttyUSB?
- 檢查是否沒有其他規則
udev
對同一設備進行任何其他可能覆蓋您的規則的重命名。- 檢查是否確實
udev
載入了新規則(如果可能,使用其他設備進行測試)並且udev
可以讀取新規則所在的文件……或者通過將這些規則放在現有規則文件中來測試這些規則是否被讀取。
為了幫助調試,您可以(不是以 root 身份):
udevadm monitor
然後插入設備以查看 udev 看到的事件。您可能會看到您的規則匹配多個
add
事件。您可以將設備名稱轉換為路徑,例如
udevadm info -q path -n /dev/ttyUSB0
然後給這個輸出路徑
udevadm test <path>
跟踪 udev 正在讀取的文件及其遵循的規則。它實際上並不執行命令等,所以它只是一個提示。