标签: udev

启动期间自动挂载单独分区时systemd/udev依赖性失败

编辑:当我尝试使用具有任何挂载点的单独分区时,会发生这种情况,而不仅仅是/var.

我正在使用Buildroot来构建嵌入式Linux系统.我正在尝试为/ var使用单独的分区,但这适用于任何挂载点.我的init系统是systemd,udev用于设备管理.我把我的fstab编辑为:

# <file system> <mount pt>     <type>   <options>                <dump> <pass>
/dev/root       /              ext2     rw,noauto                0      1
/dev/mmcblk0p4  /var           ext2     defaults                 0      2
proc            /proc          proc     defaults                 0      0
devpts          /dev/pts       devpts   defaults,gid=5,mode=620  0      0
tmpfs           /dev/shm       tmpfs    mode=0777                0      0
tmpfs           /tmp           tmpfs    defaults                 0      0
sysfs           /sys           sysfs    defaults                 0      0
tmpfs           /run           tmpfs    defaults                 0      0
Run Code Online (Sandbox Code Playgroud)

一旦系统启动,我收到一条消息" Expecting device dev-mmcblk0p4.device ... ",最后接着是:

" 等待设备dev-mmcblk0p4.device超时. "

" / var的依赖失败 "

" 本地文件系统的依赖性失败. "


如果我使用/var2 …

linux udev buildroot systemd

8
推荐指数
1
解决办法
3万
查看次数

Linux:如何将USB驱动程序分配给设备

这个问题有两个问题:

1-如何从USB设备手动分离驱动程序并附加另一个驱动程序?例如,我有一个设备,当连接自动使用USB存储驱动程序.

// usbview输出

Vendor Id: xxxx
Product Id: xxxx
...
    Number of Interfaces: 2
    Interface Number: 0
        Name: usb-storage
        Number of Endpoints: 2
        ...
    Interface Number: 1
        Name: (none)
        Number of Endpoints: 2
        ...
Run Code Online (Sandbox Code Playgroud)

我不想使用usb-storage驱动程序,因此我在主机上运行了一个应用程序,我在其中使用libusb库来分离usb存储驱动程序然后我声明了接口.然后,我可以在USB设备和主机Linux系统上运行的应用程序之间发送数据.

如何在应用程序外手动分离驱动程序?

2-如何自动分配驱动程序以附加到设备插件上.我目前有一个udev规则设置来自动设置设备权限.

SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666"
Run Code Online (Sandbox Code Playgroud)

我可以使用udev规则将驱动程序分配给USB设备上的特定接口吗?例如,如果我想在接口0而不是usb-storage上自动使用usbnet模块,那么在udev中是否可以使用?

谢谢,

(我对StackExchange如何使用它的不同网站或者它们都是一样的有点困惑.这是一个Linux问题所以它也发布在Unix和Linux上.请原谅我,如果它也不应该在这里发布,但是StackOverflow也处理Linux,所以...)

linux usb udev kernel-module linux-kernel

7
推荐指数
1
解决办法
1万
查看次数

ubuntu 12.04 libudev-dev因为依赖而无法安装

我有一些示例c ++代码,它使用udev库接收hotplug事件.它在Ubuntu 10.04中运行良好.它的唯一先决条件是libudev-dev包:sudo apt-get install libudev-dev

但是当我尝试在12.04中安装该软件包时,我得到:

sudo apt-get install libudev-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
libudev-dev : Depends: libudev0 …
Run Code Online (Sandbox Code Playgroud)

usb ubuntu udev

7
推荐指数
1
解决办法
3万
查看次数

udev 规则适用于“udevadm test”,但不适用于“udevadm trigger”

我有一个 4 端口 USB 转 RS232 集线器的 udev 规则,是根据这个问题创建的:

SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{serial}=="A4018BU0", SYMLINK+="ttyLumagen"

它没有按预期创建符号链接,因此为了调试我尝试了udevadm test,它似乎有效:

% sudo udevadm info --query=path --name=/dev/ttyUSB0
/devices/pci0000:00/0000:00:14.0/usb3/3-9/3-9.1/3-9.1:1.0/ttyUSB0/tty/ttyUSB0
% sudo udevadm test /devices/pci0000:00/0000:00:14.0/usb3/3-9/3-9.1/3-9.1:1.0/ttyUSB0/tty/ttyUSB0
calling: test
version 204
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

=== trie on-disk ===
tool version:          204
file …
Run Code Online (Sandbox Code Playgroud)

ubuntu udev

7
推荐指数
1
解决办法
5646
查看次数

如何在USB闪存驱动器插入上运行Python脚本

我的目标是在USB闪存驱动器插入时运行Python脚本.我编写了一个udev规则和一个在该规则中调用的shell脚本.

udev规则:/etc/udev/rules.d/10-usb.rules

KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", RUN+="/home/Hypotheron/Desktop/script.sh" 
Run Code Online (Sandbox Code Playgroud)

script.sh:

#!/bin/sh

echo 'Hello, world.' > /home/Hypotheron/Desktop/foo.txt
#/home/Hypotheron/Desktop/job.py & exit
Run Code Online (Sandbox Code Playgroud)

我的Python文件的第一行是:

#!/usr/bin/python 
Run Code Online (Sandbox Code Playgroud)

我还做了以下命令:

chmod +x job.py
chmod +x script.sh
Run Code Online (Sandbox Code Playgroud)

在脚本.sh中,当写入foo.txt的行被取消注释时,每次闪存驱动器插入时都会创建foo.txt文件.

当我评论该行并取消注释运行Python文件的行时,它不起作用.

在两种情况下都可以通过终端运行script.sh,但是当插入闪存驱动器时,只有foo.txt案例有效.

任何帮助,将不胜感激.

python linux usb udev

7
推荐指数
1
解决办法
1956
查看次数

为什么 udev init 脚本默认禁用容器支持,而实际上它可以工作?

使用docker run -idt -v /dev:/dev --privileged --name delete ubuntu:18.04 /bin/bash新的容器,并在容器使用apt-get install -y udev安装的udev。

当启动 udev 时,它报告下一个:

root@0947408dab9b:~# service udev start
 * udev does not support containers, not started
Run Code Online (Sandbox Code Playgroud)

然后,我更改了 init 脚本/etc/init.d/udev,评论了接下来的两部分:

1) Comments next:
#if ! ps --no-headers --format args ax | egrep -q '^\['; then
#    log_warning_msg "udev does not support containers, not started"
#    exit 0
#fi

2) Comments next:
#if [ ! -w /sys ]; then
#    log_warning_msg "udev does not …
Run Code Online (Sandbox Code Playgroud)

udev docker

7
推荐指数
1
解决办法
456
查看次数

Linux Evdev 轮询延迟

我的笔记本电脑连接了 2 个键盘(内置键盘和 USB 键盘)。我正在获取这些连接的键盘并libudev使用epoll它们通过接口轮询输入evdev

// Compile with $(gcc udev.c -ludev)

#include <stdbool.h>
#include <stdio.h>
#include <string.h>

#include <sys/epoll.h>
#include <sys/poll.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
#include <time.h>
#include <libudev.h>

#define BILLION 1000000000L

long timespec_diff(struct timespec *start, struct timespec *end)
{
  return (BILLION * (end->tv_sec - start->tv_sec)) +
         (end->tv_nsec - start->tv_nsec);
}

bool want_to_run = true;

int
main(int argc, char *argv[])
{
  int epoll_fd = epoll_create1(0);

  struct udev *udev_obj = udev_new(); …
Run Code Online (Sandbox Code Playgroud)

c linux epoll udev evdev

7
推荐指数
1
解决办法
445
查看次数

暂停后在 Xorg 环境中恢复键盘设置

我没有使用像 Gnome 或 KDE 这样的大型 DE 并使用xset命令更改键盘速率:

xset r rate 250 70
Run Code Online (Sandbox Code Playgroud)

但是在系统挂起 (by pm-suspend) 之后,此设置将丢失,因为 udev 删除并再次添加所有设备。

  1. 我尝试使用 udev 规则:

    # /etc/udev/rules.d/00-custom-keyboard.rules
    ACTION=="add", SUBSYSTEM=="usb", RUN+="/usr/bin/xset r rate 250 70" # Not working
    ACTION=="add", SUBSYSTEM=="usb", RUN+="touch /tmp/test"             # Working pretty!
    
    Run Code Online (Sandbox Code Playgroud)

    我认为第一条规则不起作用,因为xset实用程序需要一些在上下文中不可用的evdev上下文数据。

  2. 我试图用xorg的配置,却发现只有选项来改变键盘布局,也就是XkbLayoutXkbOptions

有没有办法在系统挂起后自动恢复键盘设置?

linux udev xorg

6
推荐指数
1
解决办法
1013
查看次数

从接口名称而不是摄像机编号创建openCV VideoCapture

创建视频捕获的正常方法是:

cam = cv2.VideoCapture(n)

其中n对应于的数量/dev/video0dev/video1

但是,因为我正在构建一个使用多个摄像机来完成不同任务的机器人,所以我需要确保已将其分配给正确的摄像机,所以我创建了udev规则,该规则创建的设备在每次特定摄像机被连接时都具有指向正确端口的符号链接插入。

它们似乎正在工作,因为当我查看/dev目录时,可以看到链接:

/dev/front_cam -> video1

但是我不确定现在如何实际使用它。

我以为可以从文件名中打开它,就好像它是一个视频一样,但是cam = cv2.VideoCapture('/dev/front_cam') 不起作用。

也没有 cv2.VideoCapture('/dev/video1')

它不会引发错误,它会返回一个VideoCapture对象,只是没有打开一个对象(cam.isOpened()返回False)。

python opencv interface udev

6
推荐指数
2
解决办法
5281
查看次数

docker --device 使用绝对设备路径,但因符号链接而失败

我有一个USB GPIO设备,其中包含一些第三方驱动程序,我想在容器中与其进行交互。编译,在主机上运行良好。也可以编译,如果我通过--device=/dev/bus/usb/001/$NUM其中 $NUM 是插入设备时自动生成的路径,则可以在容器中正常工作;我猜想 udev 正在分配这个。但是我想要一个确定性的绑定点,所以我修改了 udev规则来分配一个符号链接:

SUBSYSTEM=="usb", ATTR{idVendor}=="09db", 
ATTR{idProduct}=="0075", MODE="0666", 
TAG+="uaccess", TAG+="udev-acl", 
SYMLINK+="mcc_daq"
Run Code Online (Sandbox Code Playgroud)

这给了我一个位于/dev/mcc_daqto的符号链接/dev/bus/usb/whatever。在主机上仍然可以正常工作。

但是,如果我运行:

docker run --rm -it \
        --device=/dev/mcc_daq \
        mcc_daq1
Run Code Online (Sandbox Code Playgroud)

我明白了

usb_device_find_USB_MCC: libusb_open failed.: No such file or directory 
Failure, did not find a USB 2408 or 2408_2AO!
Run Code Online (Sandbox Code Playgroud)

这是测试程序在找不到设备时输出的内容(使用libusb_get_device_descriptor)。

当我在容器中运行时,我得到的输出与使用 启动容器时的udevadm info -q all /dev/mcc_daq输出完全相同。但是,如果我将符号链接路径传递给docker,则无法查询绝对路径。 udevadm info -q all /dev/bus/usb/001/004--device=/.../004

udev 输出在主机系统上更加详细,我不确定这是否是问题或预期行为的一部分。我的直觉是缺少这些额外的条目意味着 libusb 可以找到设备,但找不到产品的供应商 ID。然而,udev 输出在容器中是相同的(无论是符号链接还是硬路径)这一事实让我对此产生疑问。

更新:新的有趣事实:当我在测试程序上运行 …

usb symlink udev libusb-1.0 docker

6
推荐指数
1
解决办法
4004
查看次数