Udev

udev
開發者Greg Kroah-Hartman和Kay Sievers
首次发布2003年11月,​20年前​(2003-11
当前版本
  • 256.1 (2024年6月18日;穩定版本)[1]
編輯維基數據鏈接
源代码库
  • github.com/systemd/systemd
編輯維基數據鏈接
编程语言C
操作系统Linux内核
类型设备节点
许可协议GPLv2
网站官方网站

udev 是Linux kernel的设备管理器,主要管理/dev目錄底下的设备节点。它同时也是用来接替devfs及hotplug的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括加载固件时。

udev的最新版本依赖于升级后的Linux kernel 2.6.13的uevent接口的最新版本。使用新版本udev的系统不能在2.6.13以下版本启动,除非使用noudev参数来禁用udev并使用传统的/dev来进行设备读取。

2012年4月,udev被合併至systemd。

概要

在传统的Linux系统中,/dev目录下的设备节点为一系列静态存在的文件,而udev则动态提供了在系统中实际存在的设备节点。虽然devfs提供了类似功能,udev的支持者也给出了很多udev实现得比devfs好的理由[2]

  • udev支持设备的固定命名,而并不依赖于设备插入系统的顺序。默认的udev设置提供了存储设备的固定命名。可以使用其vid(vendor)、pid(device)、设备名称(model)等属性或其父设备的对应属性来确认某一设备。
  • udev完全在用户空间执行,而不是像devfs在内核空间一样执行。结果就是udev将命名策略从内核中移走,并可以在节点创建前用任意程序在设备属性中为设备命名。

运行方式

udev是一个通用的内核设备管理器。它以守护进程的方式运行于Linux系统,并监听在新设备初始化或设备从系统中移除时,内核(通过netlink socket)所发出的uevent。

系统提供了一套规则用于匹配可发现的设备事件和属性的导出值。匹配规则可能命名并创建设备节点,并运行配置程序来对设备进行设置。udev规则可以匹配像内核子系统、内核设备名称、设备的物理等属性,或设备序列号的属性。规则也可以请求外部程序提供信息来命名设备,或指定一个永远一样的自定义名称来命名设备,而不管设备什么时候被系统发现。

系统架构

udev系统可以分为三个部分:

  • libudev函数库,可以用来获取设备的信息。
  • udevd守护进程,处于用户空间,用于管理虚拟/dev
  • 管理命令udevadm,用来诊断出错情况。

系统获取内核通过netlink socket发出的信息。早期的版本使用hotplug,并在/etc/hotplug.d/default添加一个链接到自身来达到目的。

命令格式

BUS 总线 KERNEL 内核名如sd* ID 设备id 如总线id PLACE

SYSFS{filename} 或 ATTR{filename}

PROGRAM 调用外部程序 RESULT 匹配program返回的结果 NAME

SYMLINK 连接规则

编写规则

udev配置文件是/etc/udev/udev.conf,文件内容中很重要的一项是指定udev规则存储的目录,形如udev_rules=“/etc/udev/rules.d”. 指定的目录中存储一系列以.rules结束的规则文件,每个文件处理一系列规则来帮助udev分配名字给设备文件并保证内核可以识别此名字。

规则文件由系列键-值对组成,键值对分两类:匹配键(使用操作符"==","!="等)和赋值键(使用"=","+=",":="等)。匹配键判断规则是否应被应用,赋值键可以被分配一到多个值。

有些常用的键已经有了固定的含义,这里列举出最基本的几个。这也是基本规则之一,更多编辑规则请参见man udev页。

  • KERNEL - 匹配设备的内核名字
  • SUBSYSTEM - 匹配设备的子系统
  • DRIVER - 匹配设备驱动名
  • NAME - 应当被采用为设备节点的名字
  • SYMLINK - 一系列被作为设备节点替补名字的符号链接

常用键举例:KERNEL=="hdb", DRIVER=="ide-disk", NAME="my_spare_disk", SYMLINK+="sparedisk"

作者

udev由Greg Kroah-Hartman和Kay Sievers共同开发,并得到Dan Stekloff等人的帮助。

參見

外部链接

  • (英文)udev在kernel.org的主页
  • (英文)Kay Sievers写的udev最近动态
  • (英文)如何编写udev规则 (页面存档备份,存于互联网档案馆
  • (英文)udev问答集
  • (英文)Gentoo的udev指南 (页面存档备份,存于互联网档案馆
  • (英文)udev和devfs的对比
  • (英文)Linux1394常见问题:在不同驱动器上创建设备节点要如何设置udev规则
  • (英文)udev教程

参考文献

  1. ^ Release 256.1. 2024年6月18日 [2024年6月27日]. 
  2. ^ udev and devfs - The final word. 2003-12-30 [2008-01-13]. (原始内容存档于2011-04-11) (英语).  Authors list列表中的|first1=缺少|last1= (帮助)
组织
内核
支持
技术
调试
  • CRIU英语CRIU
  • ftrace英语ftrace
  • kdump
  • Linux内核oops
  • SystemTap英语SystemTap
启动过程
ABI
API
用户空间
FS守护进程
封装库
内核部分
系统调用接口
内核内
  • ALSA
  • DRI
  • Video4Linux
  • New API英语New API
  • Crypto API英语Crypto API (Linux)
内核组件
  • 安全模块AppArmor
  • Exec Shield英语Exec Shield
  • grsecurity英语grsecurity
    • PaX英语PaX
  • seccomp英语seccomp
  • SELinux
  • Smack
  • TOMOYO Linux英语TOMOYO Linux
  • Linux PAM英语Linux PAM
  • initramfs
  • kexec
  • kGraft英语kGraft
  • kpatch英语kpatch
  • Ksplice
变种
虛擬化
采用
使用范围
采用者
  • Linux采用者列表
  • GENIVI联盟
  • Linux专有软件
人物
  • 分类 分类
  • 共享资源页面 共享资源
  • 维基百科图书 教科书
  • 维基学院页面 学院
  • 主题 主题