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"
의 정보를 바탕으로정보
[ 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"
해당 시스템에서는 제대로 작동했지만 지금 개발 중인 시스템에서는 작동하지 않았습니다(물론 커널 매개변수가 변경됨).
내 규칙 파일에 어떤 문제가 있나요?
답변1
다음 중 하나일 수 있습니다.
- 규칙에서는 이러한 장치를 커널 이름(KERNEL=)으로 직접 참조하고 커널이 장치를 호출하지 않을 수 있으므로
ttyUSB?
규칙이 적용되지 않습니다. udev
규칙을 작성한 파일을 읽을 수 없거나 읽을 수 없습니다.udev
ttyUSB?
동일한 장치에 대한 규칙을 재정의하고 해당 장치에 이름을 적용하는 다른 규칙이 이미 있습니다 .
그래서 나는 당신에게 제안합니다 ...
- 다음 사항을 확인하세요.커널 이름당신의 장치는 정말
ttyUSB?
udev
규칙을 재정의할 수 있는 다른 규칙에 의해 동일한 장치에 대한 다른 이름 변경이 있는지 확인하세요 .- 새 규칙이 실제로 로드되었는지 확인하고
udev
(가능한 경우 다른 장치를 사용하여 테스트)udev
새 규칙이 있는 파일을 읽을 수 있는지 확인하거나 규칙을 기존 규칙 파일에 넣어서 규칙을 읽을 수 있는지 테스트하세요.
답변2
디버깅을 돕기 위해 루트가 아닌 다음을 수행할 수 있습니다.
udevadm monitor
그런 다음 장치를 연결하여 udev에 표시되는 이벤트를 확인하세요. 규칙이 add
여러 이벤트와 일치하는 것을 확인할 수 있습니다 .
장치 이름을 다음과 같은 경로로 변환할 수 있습니다.
udevadm info -q path -n /dev/ttyUSB0
그런 다음 이 출력 경로를
udevadm test <path>
udev가 읽고 있는 파일과 그들이 따르는 규칙을 추적하십시오. 실제로 명령 등을 실행하지 않으므로 단지 프롬프트일 뿐입니다.
답변3
이것이 내가 해결한 방법입니다.
KERNELS=="1-2.1", SUBSYSTEMS=="usb", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", SYMLINK+="usbS0"
KERNELS=="1-2.2", SUBSYSTEMS=="usb", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", SYMLINK+="usbS1"
KERNELS=="1-2.7", SUBSYSTEMS=="usb", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", SYMLINK+="usbS3"
쉼표와 SYMLINK 지시어를 사용하면 작동합니다.