Articles of UDEV

如何停止自动Linux设备初始化

无论何时将USB大容量存储设备插入系统,我都会从内核中获取类似这样的事件。 (如udevadm监视器所示) KERNEL[104397.739313] add /devices/pci0000:00/0000:00:14.0/usb3/3-6 (usb) KERNEL[104397.740141] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0 (usb) KERNEL[104397.740787] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/host48 (scsi) KERNEL[104397.741362] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/host48/scsi_host/host48 (scsi_host) KERNEL[104399.210661] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/host48/target48:0:0 (scsi) KERNEL[104399.211095] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/host48/target48:0:0/48:0:0:0 (scsi) KERNEL[104399.211502] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/host48/target48:0:0/48:0:0:0/scsi_disk/48:0:0:0 (scsi_disk) KERNEL[104399.211757] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/host48/target48:0:0/48:0:0:0/scsi_device/48:0:0:0 (scsi_device) KERNEL[104399.212464] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/host48/target48:0:0/48:0:0:0/scsi_generic/sg1 (scsi_generic) KERNEL[104399.212743] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/host48/target48:0:0/48:0:0:0/bsg/48:0:0:0 (bsg) KERNEL[104399.215444] add /devices/virtual/bdi/8:16 (bdi) KERNEL[104399.220099] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/host48/target48:0:0/48:0:0:0/block/sdb (block) KERNEL[104399.220181] add /devices/pci0000:00/0000:00:14.0/usb3/3-6/3-6:1.0/host48/target48:0:0/48:0:0:0/block/sdb/sdb1 (block) 我需要尽快将USB设备连接到KVM,而udev规则允许我调用一个执行连接的脚本,内核处理仍然会自动进行。 […]

在Linux上使用libudev阻塞读取的问题

我们使用以下例程(在Linux上使用libudev)从configuration为USB HID设备的PIC单片机读取数据。 仅当连接到PIC单片机的button被按下或释放时,才会发送数据。 该例程缺less来自PIC控制器的消息,我怀疑这是因为调用下面的轮询不是应该如此。 轮询调用将可靠地阻塞1秒钟使用第一条消息被读取。 只要第一条消息被读取,轮询调用立即返回,而不是像它应该阻塞1秒(1000毫秒)。 我已经解决了这个问题,每次阅读后closures并重新打开设备。 这使投票performance正确,但我认为closures和重新打开设备可能是丢失信息的原因。 bool PicIo::Receive (unsigned char* picData, const size_t picDataSize) { static hiddev_report_info hidReportInfo; static hiddev_usage_ref_multi hidUsageRef; if (-1 == PicDeviceDescriptor()) { return false; } // Determine whether or not there is data available to be read pollfd pollFd; pollFd.fd = PicDeviceDescriptor(); pollFd.events = POLLIN; int dataPending = poll […]

为什么我的udev规则不能在运行的docker容器中工作?

我有udev规则写入创buildSYMLINKS设备连接时。 规则在主机上工作正常,但是当我用/etc/udev/rules.d中的相同规则启动一个容器时,它们不能在我的容器中工作。 我试图检测何时插入外部驱动器并创build相应的符号链接。 / dev / sdX是在容器启动时创build的,如果驱动器在docker run ,但在运行命令之后它不会出现,也不会在驱动器被删除后消失。 下面是一个在主机上正常工作的示例规则: KERNEL=="sd?", SYMLINK+="test_%k"

udev规则与bInterfaceNumber不起作用

我试图使用udev给相关的名称一个USB串行设备,但我现在有运气。 # lsusb -d 04e2:1412 -v Bus 004 Device 028: ID 04e2:1412 Exar Corp. Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 239 Miscellaneous Device bDeviceSubClass 2 Common Class bDeviceProtocol 1 Interface Association bMaxPacketSize0 64 idVendor 0x04e2 Exar Corp. idProduct 0x1412 bcdDevice 0.02 iManufacturer 0 iProduct 0 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength […]

Bash脚本不会等到命令正确执行完毕

我正在做一个非常简单的脚本,但由于某些原因,它似乎asynchronous运行。 singlePartDevice() { # http://www.linuxquestions.org/questions/linux-software-2/removing-all-partition-from-disk-690256/ # http://serverfault.com/questions/257356/mdadm-on-ubuntu-10-04-raid5-of-4-disks-one-disk-missing-after-reboot # Create single partition parted -s "$1" mklabel msdos # Find size of disk v_disk=$(parted -s "$1" print|awk '/^Disk/ {print $3}'|sed 's/[Mm][Bb]//') parted -s "$1" mkpart primary ext3 4096 ${v_disk} parted -s "$1" set 1 raid on return 0 } singlePartDevice "/dev/sdc" singlePartDevice "/dev/sdd" #/dev/sdc1 exists but /dev/sdd1 […]

拥有less量父设备属性的udev规则

我需要复杂而通用的udev规则来确定插入任何USB集线器某个端口的USB设备。 所以,我必须结合设备树的不同层的父属性… 我有这个: $udevadm info –query=all –name=/dev/ttyUSB0 –attribute-walk looking at device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4:1.0/ttyUSB0/tty/ttyUSB0': KERNEL=="ttyUSB0" SUBSYSTEM=="tty" DRIVER=="" . . . looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2.4': KERNELS=="1-1.2.4" SUBSYSTEMS=="usb" DRIVERS=="usb" … looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2': KERNELS=="1-1.2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{devpath}=="1.2" ATTRS{idVendor}=="0835" … ATTRS{idProduct}=="8500" ATTRS{bDeviceClass}=="09" ATTRS{product}=="USB2.0 Hub" . . . 然后我构build了这样的udev规则来识别某个USB集线器的某个端口: KERNEL=="ttyUSB[0-9]*", KERNELS=="1-1.2.4", ATTRS{idVendor}=="0835", ATTRS{idProduct}=="8500", SYMLINK+="port1" 但是,当我尝试使用来自不同父层的属性时,它不工作。 我知道udev仅支持来自一个特定父设备的附加属性。 但我真的需要得到结合我的设备的两个父节点的属性的规则 有人可以提出解决scheme吗? […]

电源连接/断开时使用udev激活脚本

当我连接/断开powersupply时,我试图让udev运行几个小脚本。 我在/etc/udev/rules.d/50-caff.rules中有以下代码: SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_STATUS}=="Charging", RUN+="/home/haukur/rules/off.sh" SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_STATUS}=="Discharging", RUN+="/home/haukur/rules/on.sh" 这里是on.sh: #!/bin/sh caffeine -a 和off.sh: #!/bin/sh caffeine -d 无论如何,我写了这些,写了udevadm control –reload-rules到bash和…什么也没有发生。 当我插上或拔下电源插头时,咖啡因根本看不到。 根据/var/log/syslog (Ubuntu的replace为/var/log/messages )udev识别当我拔插头时: Feb 26 08:44:52 (none) udevd[3838]: starting '/home/haukur/rules/off.sh' 但是当它试图运行off.sh(它本身试图运行咖啡因),它会返回这个错误: udevd[2719]: '/home/haukur/rules/off.sh'(err) '** (caffeine:3840): WARNING **: Command line `dbus-launch –autolaunch=62907743a139af9b3c86412e00000026 –binary-syntax –close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n' 你知道有什么办法来解决这个问题吗? […]

udev .rules文件以本地用户身份运行?

我有我的代码,每次udev检测到新的USB将运行。 当我作为本地用户运行它时,我的代码工作正常。 但是当我使用udev.rules文件时会失败,因为它以root身份运行我的脚本。 我如何以本地用户身份运行“.rules”? 谢谢。

更改设备文件的默认权限

我写了我的gio驱动程序,并使用udev在系统中注册。 这创build了我的所有设备文件,但创build的权限是600.我怎样才能将这个默认权限更改为666或任何其他。 因为我必须运行我的程序使用sudo读取这个文件。 我应该在udev写任何规则..请解释。 或者,我应该改变我的程序本身的程序的操作权限为根。 更新:我的udev rules.d包含 40-scratch.rules : ATTRS{idVendor}=="0694", ATTRS{idProduct}=="0003", SUBSYSTEMS=="usb", ACTION=="add", MODE="0666", GROUP="plugdev" 和99-input.rules : SUBSYSTEM=="input", GROUP="input", MODE="0660" 和udev.conf : udev_log="err"

Linux基于USB端口执行脚本

你好,我正在安装在embedded式系统上的debian系统上工作。 PC有3个端口USB我们称之为A,B,C。我想根据USB端口执行不同的脚本。 我怎样才能做到这一点? 我发现了很多关于udev规则的文章,并且我有下面的规则,如果我连接一个usb,它的工作原理。 ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[az]1", SYMLINK+="usb_to_check", RUN+="/usr/local/bin/check-usb1.sh" 我怎样才能扩展这个规则,只有当我连接设备让我们说的USB A?