Usb

雖然 udevadm 列表的一部分我為規則擷取

  • August 2, 2016

我做了:

udevadm info -a -n /dev/ttyUSB0

因為我正在嘗試為 arduino 制定符號連結規則。問題是,我不確定輸出中的哪些部分用於規則。我第一次為它制定規則時,效果很好,我抓住了 SUBSYSTEMS、DRIVER、ATTRS{idVendor} 為我認為的那個,它是,重新載入規則並且它起作用了。當我重新啟動時,符號連結不起作用 - 我簽入並且我使用的部分缺少 idVendor - 它在父項上,但不在具有相同子系統和驅動程序的同一部分中。那麼,我使用其中哪些來唯一標識我的 Arduino 以作為符號連結串列埠的規則?

looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB0/tty/ttyUSB0':
   KERNEL=="ttyUSB0"
   SUBSYSTEM=="tty"
   DRIVER==""

 looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB0':
   KERNELS=="ttyUSB0"
   SUBSYSTEMS=="usb-serial"
   DRIVERS=="ch341-uart"
   ATTRS{port_number}=="0"

 looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0':
   KERNELS=="1-1.3:1.0"
   SUBSYSTEMS=="usb"
   DRIVERS=="ch341"
   ATTRS{bInterfaceClass}=="ff"
   ATTRS{bInterfaceSubClass}=="01"
   ATTRS{bInterfaceProtocol}=="02"
   ATTRS{bNumEndpoints}=="03"
   ATTRS{authorized}=="1"
   ATTRS{supports_autosuspend}=="1"
   ATTRS{bAlternateSetting}==" 0"
   ATTRS{bInterfaceNumber}=="00"

 looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3':
   KERNELS=="1-1.3"
   SUBSYSTEMS=="usb"
   DRIVERS=="usb"
   ATTRS{bDeviceSubClass}=="00"
   ATTRS{bDeviceProtocol}=="00"
   ATTRS{devpath}=="1.3"
   ATTRS{idVendor}=="1a86"
   ATTRS{speed}=="12"
   ATTRS{bNumInterfaces}==" 1"
   ATTRS{bConfigurationValue}=="1"
   ATTRS{bMaxPacketSize0}=="8"
   ATTRS{busnum}=="1"
   ATTRS{devnum}=="4"
   ATTRS{configuration}==""
   ATTRS{bMaxPower}=="96mA"
   ATTRS{authorized}=="1"
   ATTRS{bmAttributes}=="80"
   ATTRS{bNumConfigurations}=="1"
   ATTRS{maxchild}=="0"
   ATTRS{bcdDevice}=="0254"
   ATTRS{avoid_reset_quirk}=="0"
   ATTRS{quirks}=="0x0"
   ATTRS{version}==" 1.10"
   ATTRS{urbnum}=="62"
   ATTRS{ltm_capable}=="no"
   ATTRS{removable}=="removable"
   ATTRS{idProduct}=="7523"
   ATTRS{bDeviceClass}=="ff"
   ATTRS{product}=="USB2.0-Serial"

 looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1':
   KERNELS=="1-1"
   SUBSYSTEMS=="usb"
   DRIVERS=="usb"
   ATTRS{bDeviceSubClass}=="00"
   ATTRS{bDeviceProtocol}=="02"
   ATTRS{devpath}=="1"
   ATTRS{idVendor}=="0424"
   ATTRS{speed}=="480"
   ATTRS{bNumInterfaces}==" 1"
   ATTRS{bConfigurationValue}=="1"
   ATTRS{bMaxPacketSize0}=="64"
   ATTRS{busnum}=="1"
   ATTRS{devnum}=="2"
   ATTRS{configuration}==""
   ATTRS{bMaxPower}=="2mA"
   ATTRS{authorized}=="1"
   ATTRS{bmAttributes}=="e0"
   ATTRS{bNumConfigurations}=="1"
   ATTRS{maxchild}=="5"
   ATTRS{bcdDevice}=="0200"
   ATTRS{avoid_reset_quirk}=="0"
   ATTRS{quirks}=="0x0"
   ATTRS{version}==" 2.00"
   ATTRS{urbnum}=="57"
   ATTRS{ltm_capable}=="no"
   ATTRS{removable}=="unknown"
   ATTRS{idProduct}=="9514"
   ATTRS{bDeviceClass}=="09"

 looking at parent device '/devices/platform/soc/3f980000.usb/usb1':
   KERNELS=="usb1"
   SUBSYSTEMS=="usb"
   DRIVERS=="usb"
   ATTRS{bDeviceSubClass}=="00"
   ATTRS{bDeviceProtocol}=="01"
   ATTRS{devpath}=="0"
   ATTRS{idVendor}=="1d6b"
   ATTRS{speed}=="480"
   ATTRS{bNumInterfaces}==" 1"
   ATTRS{bConfigurationValue}=="1"
   ATTRS{bMaxPacketSize0}=="64"
   ATTRS{authorized_default}=="1"
   ATTRS{busnum}=="1"
   ATTRS{devnum}=="1"
   ATTRS{configuration}==""
   ATTRS{bMaxPower}=="0mA"
   ATTRS{authorized}=="1"
   ATTRS{bmAttributes}=="e0"
   ATTRS{bNumConfigurations}=="1"
   ATTRS{maxchild}=="1"
   ATTRS{interface_authorized_default}=="1"
   ATTRS{bcdDevice}=="0404"
   ATTRS{avoid_reset_quirk}=="0"
   ATTRS{quirks}=="0x0"
   ATTRS{serial}=="3f980000.usb"
   ATTRS{version}==" 2.00"
   ATTRS{urbnum}=="25"
   ATTRS{ltm_capable}=="no"
   ATTRS{manufacturer}=="Linux 4.4.13-v7+ dwc_otg_hcd"
   ATTRS{removable}=="unknown"
   ATTRS{idProduct}=="0002"
   ATTRS{bDeviceClass}=="09"
   ATTRS{product}=="DWC OTG Controller"

 looking at parent device '/devices/platform/soc/3f980000.usb':
   KERNELS=="3f980000.usb"
   SUBSYSTEMS=="platform"
   DRIVERS=="dwc_otg"
   ATTRS{hnp}=="HstNegScs = 0x0"
   ATTRS{srp}=="SesReqScs = 0x1"
   ATTRS{regvalue}=="invalid offset"
   ATTRS{hsic_connect}=="HSIC Connect = 0x1"
   ATTRS{guid}=="GUID = 0x2708a000"
   ATTRS{mode}=="Mode = 0x1"
   ATTRS{srpcapable}=="SRPCapable = 0x1"
   ATTRS{regdump}=="Register Dump"
   ATTRS{gpvndctl}=="GPVNDCTL = 0x00000000"
   ATTRS{ggpio}=="GGPIO = 0x00000000"
   ATTRS{hprt0}=="HPRT0 = 0x00001005"
   ATTRS{wr_reg_test}=="Time to write GNPTXFSIZ reg 10000000 times: 360 msecs (36 jiffies)"
   ATTRS{driver_override}=="(null)"
   ATTRS{hcd_frrem}=="HCD Dump Frame Remaining"
   ATTRS{mode_ch_tim_en}=="Mode Change Ready Timer Enable = 0x0"
   ATTRS{gnptxfsiz}=="GNPTXFSIZ = 0x01000306"
   ATTRS{remote_wakeup}=="Remote Wakeup Sig = 0 Enabled = 0 LPM Remote Wakeup = 0"
   ATTRS{busconnected}=="Bus Connected = 0x1"
   ATTRS{hcddump}=="HCD Dump"
   ATTRS{gotgctl}=="GOTGCTL = 0x001c0001"
   ATTRS{spramdump}=="SPRAM Dump"
   ATTRS{grxfsiz}=="GRXFSIZ = 0x00000306"
   ATTRS{gsnpsid}=="GSNPSID = 0x4f54280a"
   ATTRS{gusbcfg}=="GUSBCFG = 0x20001700"
   ATTRS{hptxfsiz}=="HPTXFSIZ = 0x02000406"
   ATTRS{devspeed}=="Device Speed = 0x0"
   ATTRS{fr_interval}=="Frame Interval = 0x1d4c"
   ATTRS{rem_wakeup_pwrdn}==""
   ATTRS{bussuspend}=="Bus Suspend = 0x0"
   ATTRS{buspower}=="Bus Power = 0x1"
   ATTRS{hnpcapable}=="HNPCapable = 0x1"
   ATTRS{rd_reg_test}=="Time to read GNPTXFSIZ reg 10000000 times: 980 msecs (98 jiffies)"
   ATTRS{enumspeed}=="Device Enumeration Speed = 0x1"
   ATTRS{inv_sel_hsic}=="Invert Select HSIC = 0x0"
   ATTRS{regoffset}=="0xffffffff"

 looking at parent device '/devices/platform/soc':
   KERNELS=="soc"
   SUBSYSTEMS=="platform"
   DRIVERS==""
   ATTRS{driver_override}=="(null)"

 looking at parent device '/devices/platform':
   KERNELS=="platform"
   SUBSYSTEMS==""
   DRIVERS==""

通常我使用idVendoridProduct

例如對於我的 OpenLogic Sniffer,我有:

ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="fc92", MODE="0666", SYMLINK+="OpenLogicSniffer"

對於我的 Arduinos,我只使用idVendor來設置模式;我不創建符號連結

ACTION=="add", ATTRS{idVendor}=="16d0", MODE="0666"
ACTION=="add", ATTRS{idVendor}=="1a86", MODE="0666"
ACTION=="add", ATTRS{idVendor}=="2341", MODE="0666"

同樣,對於我的 Altera Blaster,我希望它對我的 VirtualBox 實例可見,所以我有

ATTR{idVendor}=="09fb", ATTRS{idProduct}=="6001", GROUP="vboxusers" 

這些值很容易得到lsusb

例如

Bus 003 Device 003: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

我們可以看到設備:

% ls -l /dev/ttyACM0 
crw-rw-rw- 1 root dialout 166, 0 Aug  2 14:28 /dev/ttyACM0

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