Udev

udev 不適用規則

  • October 1, 2015

我在從 udev 分配規則時遇到一些問題。

我的板上安裝了 2 個FTDI232晶片(它們總共有 3 個,但我現在對其中 2 個感興趣),核心使用驅動程序ftdi_sio管理它們,將它們命名為ttyUS0ttyUSB1並且我正在應用這些規則以將它們命名為usbS1usbS2

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 參數)。

我的規則文件有什麼問題?

可能是以下情況之一:

  1. 在規則中,您通過它們的核心名稱 (KERNEL=) 直接引用這些設備,並且核心可能不會呼叫您的設備ttyUSB?,因此,該規則不適用
  2. udev不會或無法讀取您編寫規則的文件。
  3. udev對於相同的設備,已經有另一個規則覆蓋了您的規則,並將ttyUSB?名稱應用於它們。

所以,我建議你…

  • 檢查您設備的核心名稱是否確實是ttyUSB?
  • 檢查是否沒有其他規則udev對同一設備進行任何其他可能覆蓋您的規則的重命名。
  • 檢查是否確實udev載入了新規則(如果可能,使用其他設備進行測試)並且udev可以讀取新規則所在的文件……或者通過將這些規則放在現有規則文件中來測試這些規則是否被讀取。

為了幫助調試,您可以(不是以 root 身份):

udevadm monitor

然後插入設備以查看 udev 看到的事件。您可能會看到您的規則匹配多個add事件。

您可以將設備名稱轉換為路徑,例如

udevadm info -q path -n /dev/ttyUSB0

然後給這個輸出路徑

udevadm test <path>

跟踪 udev 正在讀取的文件及其遵循的規則。它實際上並不執行命令等,所以它只是一個提示。

引用自:https://unix.stackexchange.com/questions/232987