本文介绍了未应用 Udev 规则的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 Android 设备上运行 Linux chroot 环境,并尝试与基于 Atmel atmega2560(Arduino Mega 衍生)的微控制器通信.执行ls -ld/dev/ttyACM0"显示调制解调器的以下权限:

I am running a Linux chroot environment on an Android device and I am attempting to communicate with an Atmel atmega2560 based (Arduino Mega derived) microcontroller. Doing "ls -ld /dev/ttyACM0" shows the following permissions for the modem:

crw------- 1 root root 166, 0 Feb 11 22:28 /dev/ttyACM0

lsusb"告诉我:

Bus 003 Devices: ID 03eb:204b Atmel Corp. LUFA USB to Serial Adpater Project

udevadm 信息 --attribute-walk --name=ttyACM0"说:

"udevadm info --attribute-walk --name=ttyACM0" says:

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/platform/sunxi_hcd_host0/usb3/3-1/3-1:1.0/tty/ttyACM0':
    KERNEL=="ttyACM0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/platform/sunxi_hcd_host0/usb3/3-1/3-1:1.0':
    KERNELS=="3-1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="cdc_acm"
    ATTRS{bInterfaceClass}=="02"
    ATTRS{bmCapabilities}=="6"
    ATTRS{bInterfaceSubClass}=="02"
    ATTRS{bInterfaceProtocol}=="01"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceNumber}=="00"

  looking at parent device '/devices/platform/sunxi_hcd_host0/usb3/3-1':
    KERNELS=="3-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="1"
    ATTRS{idVendor}=="03eb"
    ATTRS{speed}=="12"
    ATTRS{bNumInterfaces}==" 2"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{busnum}=="3"
    ATTRS{devnum}=="20"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="200mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="c0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bcdDevice}=="8888"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{serial}=="55330343534351415012"
    ATTRS{version}==" 1.10"
    ATTRS{urbnum}=="12"
    ATTRS{manufacturer}=="RRD (www.ru"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="204b"
    ATTRS{bDeviceClass}=="02"
    ATTRS{product}=="RUMBA - ATmega 2560 co"

  looking at parent device '/devices/platform/sunxi_hcd_host0/usb3':
    KERNELS=="usb3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="0"
    ATTRS{idVendor}=="1d6b"
    ATTRS{speed}=="12"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{authorized_default}=="1"
    ATTRS{busnum}=="3"
    ATTRS{devnum}=="1"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="1"
    ATTRS{bcdDevice}=="0304"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{serial}=="sunxi_hcd_host0"
    ATTRS{version}==" 1.10"
    ATTRS{urbnum}=="777"
    ATTRS{manufacturer}=="Linux 3.4.39 sunxi_hcd-hcd"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="0001"
    ATTRS{bDeviceClass}=="09"
    ATTRS{product}=="sunxi_hcd host driver"

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

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

因此,我创建了文件/etc/udev/rules.d/99-arduino.rules",其中包含:

Therefore, I created the file '/etc/udev/rules.d/99-arduino.rules' which contains:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204b", MODE:="0666"

试图为我的用户授予读/写权限.我不能只使用 root 权限运行我的应用程序,我需要 ttyACM* 的所有权(注意我也试过 OWNER="myusername" 而不是 MODE:="0666").

In an attempt to allow read/write permission for my user. I cannot just run my application with root permission, I need ownership of ttyACM* (note I have also tried OWNER="myusername" instead of MODE:="0666").

推荐答案

原来我只需要执行service udev restart",突然之间它就开始工作了.之前我尝试过udevadm control --reload-rules"、udevadm control --reload"、udevadm control trigger",然后重新启动系统,都没有奏效.

It turns out I just needed to do "service udev restart" and all of the sudden it started working. Previously I tried "udevadm control --reload-rules", "udevadm control --reload", "udevadm control trigger", and restarting the system, none of which worked.

这篇关于未应用 Udev 规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-29 18:57