udev 규칙은 4개의 ttyUSB 포트가 있는 모뎀에 동일한 포트 이름을 할당합니다.

udev 규칙은 4개의 ttyUSB 포트가 있는 모뎀에 동일한 포트 이름을 할당합니다.

나는 dlink DW-157 3g 어댑터를 가지고 있습니다. udev 규칙 파일을 수정하여 부팅할 때마다 동글에 동일한 포트를 할당하려고 합니다. 부팅 시 동글이 저장 매체로 부팅되기 때문에 모뎀 모드를 꺼내고 설치하려면 다음 명령을 입력해야 했고, 모뎀의 ttyUSB 포트를 활용하여 전화 접속 모뎀을 실행하려면 아래 추가 명령을 입력해야 했습니다.

sudo eject /dev/sr0
sudo /bin/sh -c "echo 2001 7d0e > /sys/bus/usb-serial/drivers/option1/new_id

이를 입력한 후 sudo dmesg| grep ttyUSB는 다음을 읽습니다.

[   17.581264] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1
[   17.584470] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2
[   17.593854] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB3
[   17.594869] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB4

모뎀을 사용하여 전화를 걸 수 있는 실제 포트는 ttyUSB1입니다. 그래서 udev 규칙 파일에서 d_uart에 ttyUSB1을 할당해 보았습니다.

ACTION=="add", ATTRS{idVendor}=="2001", ATTRS{idProduct}=="7d0e", SYMLINK+="d_uart"

그러나 d_uart가 ttyUSB4에 할당되면 무슨 일이 일어날까요? 항상 첫 번째 포트(이 경우 ttyUSB1)에 할당되도록 하려면 어떻게 해야 합니까?

또한 ttyUSB1, ttyUSB2, ttyUSB3 및 ttyUSB4의 명령 출력은 다음과 같습니다.

udevadm info -a -n /dev/ttyUSB4 | grep '{serial}' | head -n1

그것은 동일합니다.

ATTRS{일련번호}=="3f980000.usb"

또한 ls -l /dev/d_uart 명령의 출력은

lrwxrwxrwx 1 root root 7 Oct  3 13:27 /dev/d_uart -> ttyUSB4

lsusb 출력:

Bus 001 Device 006: ID 2001:7d0e D-Link Corp.
Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root h

udevadm info -n /dev/ttyUSB2의 출력:

P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.3/ttyUSB2/tty/ttyUSB2
N: ttyUSB2
S: d_uart
S: serial/by-id/usb-D-Link_Inc_D-Link_DWM-157-if03-port0
S: serial/by-path/platform-3f980000.usb-usb-0:1.4:1.3-port0
E: DEVLINKS=/dev/d_uart /dev/serial/by-id/usb-D-Link_Inc_D-Link_DWM-157-if03-port0 /dev/serial/by-path/platform-3f980000.usb-usb-0:1.4:1.3-port0
E: DEVNAME=/dev/ttyUSB2
E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.3/ttyUSB2/tty/ttyUSB2
E: ID_BUS=usb
E: ID_MODEL=D-Link_DWM-157
E: ID_MODEL_ENC=D-Link\x20DWM-157
E: ID_MODEL_ID=7d0e
E: ID_PATH=platform-3f980000.usb-usb-0:1.4:1.3
E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_4_1_3
E: ID_REVISION=0300
E: ID_SERIAL=D-Link_Inc_D-Link_DWM-157
E: ID_TYPE=generic
E: ID_USB_CLASS_FROM_DATABASE=Miscellaneous Device
E: ID_USB_DRIVER=option
E: ID_USB_INTERFACES=:020e00:0a0002:ff0201:ff0000:080650:
E: ID_USB_INTERFACE_NUM=03
E: ID_USB_PROTOCOL_FROM_DATABASE=Interface Association
E: ID_VENDOR=D-Link_Inc
E: ID_VENDOR_ENC=D-Link\x2cInc\x20\x20
E: ID_VENDOR_FROM_DATABASE=D-Link Corp.
E: ID_VENDOR_ID=2001
E: MAJOR=188
E: MINOR=2
E: SUBSYSTEM=tty
E: TAGS=:systemd:
E: USEC_INITIALIZED=978899

답변1

ttyUSB1 장치 생성 시 일치를 시도해 볼 수 있습니다. 규칙을 다음으로 변경하세요.

ACTION=="add", ENV{ID_VENDOR_ID}=="2001", ENV{ID_MODEL_ID}=="7d0e", ENV{DEVNAME}=="/dev/ttyUSB1", SYMLINK+="d_uart"

sudo udevadm control --reload변경한 후에는 반드시 이 작업을 수행하십시오 . 포트마다 상황이 다를 경우 ID_USB_INTERFACE_NUM다른 장치가 있어도 ttyUSB*작동 하도록 일치시켜야 할 것입니다.

관련 정보