udev linux内核,udev (简体中文)

udev是Linux内核的设备管理器,它取代了devfs和hotplug,负责管理/dev中的设备节点,并处理硬件添加、删除事件及固件加载。本文介绍了udev的功能、优势、工作原理,包括如何编写udev规则来管理和自动化设备操作,以及解决设备命名不一致的问题。还涵盖了udev的安装、规则编写、设备属性的列举以及如何测试和应用新规则。
摘要由CSDN通过智能技术生成

翻译状态:本文是 Udev 的翻译。上次翻译日期:2017-10-19。如果英文版本有所更改,则您可以帮助同步翻译。

985f7e152ddfb13f29b2678b612154de.png本文或本节需要翻译。要贡献翻译,请访问简体中文翻译团队。985f7e152ddfb13f29b2678b612154de.png

udev 是 Linux 内核的设备管理器。总的来说,它取代了 devfs 和 hotplug,负责管理 /dev 中的设备节点。同时,udev 也处理所有用户空间发生的硬件添加、删除事件,以及某些特定设备所需的固件加载。

udev 取代了hotplug 和 hwdetect两个工具。

与传统的顺序加载相比,udev 通过并行加载内核模块提供了潜在的性能优势。异步加载模块的方式也有一个天生的缺点:无法保证每次加载模块的顺序,如果机器具有多个块设备,那么它们的设备节点可能随机变化。例如如果有两个硬盘,/dev/sda 可能会随机变成/dev/sdb。本文后面有更详细的信息。

安装

Udev 现在是 systemd-udevd.service(8) 的手册页。

AUR 里有一个独立的 Udev 派生版:eudev。

udev 规则

udev 规则以管理员身份编写并保存在 /etc/udev/rules.d/ 目录,其文件名必须以 .rules 结尾。各种软件包提供的规则文件位于 /lib/udev/rules.d/。如果 /usr/lib 和 /etc 这两个目录中有同名文件,则 /etc 中的文件优先。

编写 udev 规则

警告: 要挂载可移动设备,请不要通过在 udev 规则中调用 mount 命令的方法。对 FUSE 文件系统将会导致 Transport endpoint not connected 错误。应代之以 udisks 以正确处理自动挂载。或者把挂载动作放在 udev 规则内部:

将 /usr/lib/systemd/system/systemd-udevd.service 复制到 /etc/systemd/system/systemd-udevd.service,将 MountFlags=slave 替换为 MountFlags=shared。(来源)

Keep in mind though that udev is not intended to invoke long-running processes.

要想学习写udev规则,请访问编写 udev 规则。(译注:这里有一篇转载的该文简体中文译本)

要想查看 udev 规则的例子,请查阅上述文章的 范例 章节。

下面是一个规则的实例,给出的是当接入一个摄像头时创建一个符号链接 /dev/video-cam1 。首先,我们发现摄像头被接入并且被挂载为 /dev/video2 设备。写下这条规则的原因是由于下一次引导时这个设备可能会有个不同的名字,比如 /dev/video0。

# udevadm info -a -p $(udevadm info -q path -n /dev/video2)

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/pci0000:00/0000:00:04.1/usb3/3-2/3-2:1.0/video4linux/video2':

KERNEL=="video2"

SUBSYSTEM=="video4linux"

...

looking at parent device '/devices/pci0000:00/0000:00:04.1/usb3/3-2/3-2:1.0':

KERNELS=="3-2:1.0"

SUBSYSTEMS=="usb"

...

looking at parent device '/devices/pci0000:00/0000:00:04.1/usb3/3-2':

KERNELS=="3-2"

SUBSYSTEMS=="usb"

...

ATTRS{idVendor}=="05a9"

...

ATTRS{manufacturer}=="OmniVision Technologies, Inc."

ATTRS{removable}=="unknown"

ATTRS{idProduct}=="4519"

ATTRS{bDeviceClass}=="00"

ATTRS{product}=="USB Camera"

...

From the video4linux device we use KERNEL=="video2" and SUBSYSTEM=="video4linux", then we match the webcam using vendor and product ID's from the usb parent SUBSYSTEMS=="usb", ATTRS{idVendor}=="05a9" and ATTRS{idProduct}=="4519".

/etc/udev/rules.d/83-webcam.rules

KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTRS{idVendor}=="05a9", ATTRS{idProduct}=="4519", SYMLINK+="video-cam1"

In the example above we create a symlink using SYMLINK+="video-cam1" but we could easily set user OWNER="john&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值