내 규칙의 목표는 네트워크 인터페이스의 이름을 "eth0"(또는 무엇이든)에서 "gsm0"으로 바꾸고 AT 명령을 실행하는 데 사용하는 장치를 기반으로 /dev/ATCMD에서 /dev/ttyUSBX로의 심볼릭 링크를 만드는 것입니다.
나는 다음과 같은 규칙을 만들었습니다.
SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}!="02", GOTO="symlink_huaweiME909_end"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="15c1", SYMLINK+="ATCMD"
LABEL="symlink_huaweiME909_end"
SUBSYSTEM=="net", ACTION=="add", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="15c1", NAME="gsm0"
인터페이스 이름 바꾸기는 잘 작동하지만 심볼릭 링크 부분의 경우 시작 시에만 작동합니다. gsm0 인터페이스를 수동으로 닫았다가 다시 열면 심볼릭 링크가 더 이상 /dev/ttyUSBX로 리디렉션되지 않습니다. 그것은 다음에서 비롯됩니다:
lrwxrwxrwx 1 root root 7 Jan 1 1970 ATCMD -> ttyUSB0
도착하다:
lrwxrwxrwx 1 root root 15 Aug 14 11:03 ATCMD -> bus/usb/001/006
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) 명령은 다음을 제공합니다.
looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1:2.2/ttyUSB0/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1:2.2/ttyUSB0':
KERNELS=="ttyUSB0"
SUBSYSTEMS=="usb-serial"
DRIVERS=="option1"
ATTRS{port_number}=="0"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1:2.2':
KERNELS=="1-1:2.2"
SUBSYSTEMS=="usb"
DRIVERS=="option"
ATTRS{interface}=="Huawei Mobile Connect - Modem"
ATTRS{bInterfaceProtocol}=="10"
ATTRS{bInterfaceNumber}=="02"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bAlternateSetting}==" 0"
ATTRS{authorized}=="1"
ATTRS{bNumEndpoints}=="03"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceClass}=="00"
ATTRS{rx_lanes}=="1"
ATTRS{manufacturer}=="Huawei Technologies Co., Ltd."
ATTRS{bmAttributes}=="a0"
ATTRS{bConfigurationValue}=="2"
ATTRS{version}==" 2.00"
ATTRS{devnum}=="2"
ATTRS{bMaxPower}=="2mA"
ATTRS{idProduct}=="15c1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{urbnum}=="953"
ATTRS{bDeviceSubClass}=="00"
ATTRS{maxchild}=="0"
ATTRS{bcdDevice}=="0102"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{idVendor}=="12d1"
ATTRS{product}=="HUAWEI Mobile V7R11"
ATTRS{speed}=="480"
ATTRS{removable}=="unknown"
ATTRS{ltm_capable}=="no"
ATTRS{serial}=="0123456789ABCDEF"
ATTRS{bNumConfigurations}=="3"
ATTRS{busnum}=="1"
ATTRS{authorized}=="1"
ATTRS{tx_lanes}=="1"
ATTRS{quirks}=="0x0"
ATTRS{configuration}==""
ATTRS{devpath}=="1"
ATTRS{bDeviceProtocol}=="ff"
ATTRS{bNumInterfaces}==" 7"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceClass}=="09"
ATTRS{rx_lanes}=="1"
ATTRS{manufacturer}=="Linux 4.19.57 dwc_otg_hcd"
ATTRS{bmAttributes}=="e0"
ATTRS{bConfigurationValue}=="1"
ATTRS{version}==" 2.00"
ATTRS{devnum}=="1"
ATTRS{bMaxPower}=="0mA"
ATTRS{idProduct}=="0002"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{urbnum}=="25"
ATTRS{bDeviceSubClass}=="00"
ATTRS{maxchild}=="1"
ATTRS{bcdDevice}=="0419"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{idVendor}=="1d6b"
ATTRS{product}=="DWC OTG Controller"
ATTRS{speed}=="480"
ATTRS{authorized_default}=="1"
ATTRS{interface_authorized_default}=="1"
ATTRS{removable}=="unknown"
ATTRS{ltm_capable}=="no"
ATTRS{serial}=="3f980000.usb"
ATTRS{bNumConfigurations}=="1"
ATTRS{busnum}=="1"
ATTRS{authorized}=="1"
ATTRS{tx_lanes}=="1"
ATTRS{quirks}=="0x0"
ATTRS{configuration}==""
ATTRS{devpath}=="0"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bNumInterfaces}==" 1"
그리고 그 이후에도 몇 가지.
당신의 도움을 주셔서 감사합니다!
편집 1: 이 규칙은 커널 4.1에서 완벽하게 작동하지만 4.19에서는 이 문제가 있습니다.
답변1
규칙을 다음과 같이 수정했는데 이제 작동합니다. 그래서 저는 커널 4.1에서는 위의 규칙을 사용하고 4.19에서는 다음 규칙을 사용하고 있습니다.
SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}!="02", GOTO="symlink_huaweiME909_end"
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="15c1", SYMLINK+="ATCMD"
LABEL="symlink_huaweiME909_end"
SUBSYSTEM=="net", ACTION=="add", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="15c1", NAME="gsm0"