udev相关

【转自维基百科】http://zh.wikipedia.org/wiki/Udev


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

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

1. 概要

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

    udev支持设备的固定命名,而并不依赖于设备插入系统的顺序。默认的udev设置提供了存储设备的固定命名。任何硬盘都根据其唯一的文件系统id、磁盘名称及硬件连接的物理位置来进行识别。

    udev完全在用户空间执行,而不是像devfs在内核空间一样执行。结果就是udev将命名策略从内核中移走,并可以在节点创建前用任意程序在设备属性中为设备命名。

2.运行方式

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

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

3. 系统架构

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

    libudev函数库,可以用来获取设备的信息。

    udevd守护进程,处于用户空间,用于管理虚拟/dev

    管理命令udevadm,用来诊断出错情况。

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


在Buildroot环境中配置和使用 `udev` 是构建嵌入式Linux系统过程中常见的需求之一,特别是在需要动态管理设备节点或实现设备热插拔支持的场景中。Buildroot 提供了对 `udev` 的集成支持,但需要正确配置以确保其正常运行。 ### 配置udev支持 在Buildroot中启用 `udev` 支持主要通过配置菜单完成。首先,进入Buildroot的配置界面: ```bash make menuconfig ``` 然后依次选择以下选项以启用 `udev`: - **Target packages** → - **System tools** → - **[*] udev** 该选项将确保在最终的根文件系统中包含 `udev` 工具和相关配置文件 [^2]。 此外,为了确保 `udev` 能够正常工作,还需要启用一些基础的内核特性,包括: - 在内核配置中启用 `CONFIG_UEVENT_HELPER_PATH`,并将其设置为 `/sbin/udevsend` 或 `/sbin/udevd`,这取决于具体使用的 `udev` 版本。 - 启用 `CONFIG_NETLINK_KOBJECT_UEVENT` 以支持通过 netlink 接口发送 uevent 事件 [^1]。 ### 使用udev规则 在Buildroot中添加自定义的 `udev` 规则可以通过以下方式实现: 1. **创建自定义规则文件**:在 `board/<your_board>/udev/rules.d/` 目录下创建 `.rules` 文件。例如,为特定的USB设备创建规则文件 `99-my-usb-device.rules`。 2. **规则示例**: ```udev SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", MODE="0666" ``` 3. **配置Buildroot使用自定义规则**:在 `make menuconfig` 中启用 `BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV` 选项,以确保在构建过程中将自定义规则包含到最终的根文件系统中 [^4]。 ### 启动时启用udev服务 为了确保 `udev` 在系统启动时自动运行,还需要确保初始化系统(如BusyBox init或systemd)中正确配置了 `udev` 的启动脚本。Buildroot会根据所选的初始化系统自动处理大部分配置,但如果使用的是自定义的启动脚本,则可能需要手动添加以下命令: ```bash udevd --daemon udevadm trigger ``` 上述命令将启动 `udev` 守护进程并触发所有设备事件,确保设备节点正确创建 [^2]。 ### 注意事项 - 如果项目对系统大小有严格限制,可以考虑使用 `mdev` 替代 `udev`,因为 `mdev` 更轻量级,但功能也相对有限。 - 对于需要高度定制化设备管理逻辑的项目,`udev` 提供了更丰富的功能和更高的灵活性 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值