ESXi 6에서 실행되는 Ubuntu 17.04 VM의 홈 자동화 서버에서 일부 USB 장치에 대해 일관된 장치 이름을 설정하려고 합니다. 지금까지 /etc/udev/rules.d/99-usb -serial.rules에 다음 규칙이 있습니다.
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idproduct}=="6001", ATTRS{serial}=="A19DVOA", SYMLINK+="USBrfxcom", MODE="0660", GROUP="dialout"
KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="USBzwave2", MODE="0660", GROUP="dialout"
KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", ATTRS{idVendor}=="0658", ATTRS{idProduct}=="0200", SYMLINK+="USBzwave5", MODE="0660", GROUP="dialout"
KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204b", SYMLINK+="USBcul", MODE="0660", GROUP="dialout"
Vendorid 0403 및 productid 6001을 포함하는 첫 번째 규칙은 /dev/ttyUSB* 범위에 나타나는 유일한 장치이므로 현재로서는 큰 문제가 아닙니다. 즉, 미래에 변경될 수 있지만 항상 /dev/ttyUSB0입니다. I 장치를 더 추가할 때. 규칙 2-4는 문제의 규칙이며, 모두 /dev/ttyACM* 범위에 있는 세 개의 장치에 대해 트리거됩니다. 재부팅 후 각 USB 장치는 /dev/ttyACM0 /dev/ttyACM1 또는 /dev/ttyACM2로 나타날 수 있습니다. 저는 이러한 장치가 /dev/USBzwave2, /dev/USBzwave5 및 /dev/USBcul로 나타나기를 원합니다.
산출sudo udevadm test -a -p $(udevadm 정보 -q 경로 -n /dev/ttyACM1)나에게주세요:
Reading rules file: /etc/udev/rules.d/99-usb-serial.rules
Reading rules file: /lib/udev/rules.d/99-vmware-scsi-udev.rules
rules contain 49152 bytes tokens (4096 * 12 bytes), 14768 bytes strings
2093 strings (26721 bytes), 1358 de-duplicated (12689 bytes), 736 trie nodes used
value '[dmi/id]sys_vendor' is 'VMware, Inc.'
value '[dmi/id]sys_vendor' is 'VMware, Inc.'
IMPORT builtin 'hwdb' /lib/udev/rules.d/60-serial.rules:7
IMPORT builtin 'usb_id' /lib/udev/rules.d/60-serial.rules:8
/sys/devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb1/1-3/1-3.2/1-3.2:1.0: if_class 2 protocol 0
IMPORT builtin 'hwdb' /lib/udev/rules.d/60-serial.rules:8
IMPORT builtin 'path_id' /lib/udev/rules.d/60-serial.rules:15
LINK 'serial/by-path/pci-0000:13:00.0-usb-0:3.2:1.0' /lib/udev/rules.d/60-serial.rules:16
IMPORT builtin skip 'usb_id' /lib/udev/rules.d/60-serial.rules:19
LINK 'serial/by-id/usb-busware.de_CUL868-if00' /lib/udev/rules.d/60-serial.rules:23
GROUP 20 /etc/udev/rules.d/99-usb-serial.rules:4
MODE 0660 /etc/udev/rules.d/99-usb-serial.rules:4
LINK 'USBcul' /etc/udev/rules.d/99-usb-serial.rules:4
handling device node '/dev/ttyACM1', devnum=c166:1, mode=0660, uid=0, gid=20
preserve permissions /dev/ttyACM1, 020660, uid=0, gid=20
preserve already existing symlink '/dev/char/166:1' to '../ttyACM1'
found 'c166:1' claiming '/run/udev/links/\x2fUSBcul'
creating link '/dev/USBcul' to '/dev/ttyACM1'
preserve already existing symlink '/dev/USBcul' to 'ttyACM1'
found 'c166:1' claiming '/run/udev/links/\x2fserial\x2fby-id\x2fusb-busware.de_CUL868-if00'
creating link '/dev/serial/by-id/usb-busware.de_CUL868-if00' to '/dev/ttyACM1'
preserve already existing symlink '/dev/serial/by-id/usb-busware.de_CUL868-if00' to '../../ttyACM1'
found 'c166:1' claiming '/run/udev/links/\x2fserial\x2fby-path\x2fpci-0000:13:00.0-usb-0:3.2:1.0'
creating link '/dev/serial/by-path/pci-0000:13:00.0-usb-0:3.2:1.0' to '/dev/ttyACM1'
preserve already existing symlink '/dev/serial/by-path/pci-0000:13:00.0-usb-0:3.2:1.0' to '../../ttyACM1'
created db file '/run/udev/data/c166:1' for '/devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb1/1-3/1-3.2/1-3.2:1.0/tty/ttyACM1'
ACTION=-p
DEVLINKS=/dev/serial/by-id/usb-busware.de_CUL868-if00 /dev/USBcul /dev/serial/by-path/pci-0000:13:00.0-usb-0:3.2:1.0
DEVNAME=/dev/ttyACM1
DEVPATH=/devices/pci0000:00/0000:00:17.0/0000:13:00.0/usb1/1-3/1-3.2/1-3.2:1.0/tty/ttyACM1
ID_BUS=usb
ID_MODEL=CUL868
ID_MODEL_ENC=CUL868
ID_MODEL_FROM_DATABASE=LUFA USB to Serial Adapter Project
ID_MODEL_ID=204b
ID_PATH=pci-0000:13:00.0-usb-0:3.2:1.0
ID_PATH_TAG=pci-0000_13_00_0-usb-0_3_2_1_0
ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
ID_PCI_INTERFACE_FROM_DATABASE=XHCI
ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
ID_REVISION=0000
ID_SERIAL=busware.de_CUL868
ID_TYPE=generic
ID_USB_CLASS_FROM_DATABASE=Communications
ID_USB_DRIVER=cdc_acm
ID_USB_INTERFACES=:020201:0a0000:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=busware.de
ID_VENDOR_ENC=busware.de
ID_VENDOR_FROM_DATABASE=Atmel Corp.
ID_VENDOR_ID=03eb
MAJOR=166
MINOR=1
SUBSYSTEM=tty
TAGS=:systemd:
USEC_INITIALIZED=5912804
Unload module index
Unloaded link configuration context.
이것이 솔루션의 99%인 것 같습니다. 그러나 출력을 올바르게 읽으면 규칙에 따라 두 개의 심볼릭 링크가 생성되는 것 같습니다.
creating link '/dev/USBcul' to '/dev/ttyACM1'
preserve already existing symlink '/dev/USBcul' to 'ttyACM1'
첫 번째 줄은 괜찮아 보이지만 두 번째 줄은 잘못된 것 같습니다.
ls -l /dev/USB*다음을 제공합니다:
lrwxrwxrwx 1 root root 7 Oct 1 14:46 /dev/USBcul -> ttyACM1
내 생각에는 다음과 같이 바뀌어야 한다고 생각합니다.
lrwxrwxrwx 1 root root 7 Oct 1 14:46 /dev/USBcul -> /dev/ttyACM1
또한 규칙에 지정된 그룹은 무시되는 것 같습니다. 루트가 아닌 다이얼아웃으로 설정해야 하며 권한이 잘못되었습니다. 660이 아닌 777입니다. 이러한 권한 문제는 잘못된 심볼릭 링크로 인해 발생한다고 생각합니다.
그렇다면 내가 무엇을 놓치고 있는 걸까요? 그것이 내 얼굴을 쳐다보고 있는 것 같지만 나는 그것을 볼 수 없습니다.
답변1
귀하의 예에서 두 심볼릭 링크는 모두 동일한 것을 가리킵니다. 두 번째 ( /dev/USBcul -> ttyACM
)는 상대 심볼릭 링크입니다. 상대 기호 링크는 기호 링크와 동일한 디렉토리에 있는 파일을 가리킵니다(이 경우 ) /dev
.
심볼릭 링크가 없는 권한: 대상 파일에 대한 액세스는 대상 파일의 권한과 소유권에 따라 결정됩니다. 심볼릭 링크는 링크를 생성한 프로세스의 uid 및 gid에서 사용자 및 그룹 소유권을 가져옵니다. 귀하의 예에서 링크는 루트에 의해 생성됩니다. 다시 말하지만, 링크의 소유권은 거의 의미가 없습니다. 지정된 파일에 대한 액세스는 대상 파일의 소유권에 의해 결정됩니다. 링크 소유권이 중요한 상황 중 하나는 링크가 고정 비트가 설정된 디렉터리에 포함된 경우 링크 소유자만 삭제할 수 있다는 것입니다.
또 어떤 문제에 부딪혔나요?