Usb
雖然 udevadm 列表的一部分我為規則擷取
我做了:
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==""
通常我使用
idVendor
和idProduct
例如對於我的 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