Linux守护进程之udev-笔记

一、什么是 udev?

        udev 是 Linux 系统中的一个守护进程,它的主要任务是管理所有的设备节点。你可以把它想象成一个设备的“管家”,负责识别、监控和管理连接到计算机上的硬件设备。当一个新设备被连接到系统时,`udev` 会立刻识别它,并为其创建相应的文件和目录,这样其他程序就可以使用这个设备了。

二、udev的工作原理

        1、设备识别

        当你插入一个 USB 驱动器或其他硬件设备时,udev 会检查这个设备,并确定它的类型和特性。

        2、动态创建节点

        一旦识别了设备,udev 会动态地创建一个设备节点(通常在 /dev 目录下),并为这个节点分配一个合适的设备文件名。

        3、加载驱动

        udev还会尝试加载适合这个设备的驱动程序,确保设备能够正常工作。

        4.、通知应用程序:

        设备准备好后,udev会发送一个通知给系统,告诉其他程序设备已经可以使用了。

三、udev 的使用

  • 查看设备列表:

        你可以使用lsusb 或 lspci 命令来查看连接到系统的 USB 或 PCI 设备。这些命令会从 udev 获取设备信息。

  • 查看设备信息:

        对于特定的设备,你可以查看 /dev目录下的设备节点来获取更多信息。例如,cat /dev/sdX可以显示设备 sdX的信息(这里的 X是设备字母)。

  • 管理设备节点:

        系统管理员有时会需要手动创建、删除或修改设备节点。这可以通过编辑 udev 的规则文件(通常以 .rules结尾)来实现。

四、udev 的配置

       udev 的配置是通过一系列规则文件来实现的,这些规则文件告诉 udev 如何处理特定的硬件设备。规则文件通常以 .rules 扩展名结尾,并存放在 /etc/udev/rules.d/ 目录下。这些规则文件使用一种特定的语法来定义匹配模式和相应的动作

规则文件的结构

   udev 规则文件由一系列条目组成,每个条目包含一个或多个匹配属性(用于识别设备)和一组要执行的动作。条目通常遵循以下格式:

ACTION=="action", ATTR{attribute}=="value", ACTION=="command"
  • ACTION:指定当设备被添加("add")或移除("remove")时 udev 应该执行的操作。
  • ATTR{attribute}:指定设备的属性,如 idVendor(厂商 ID)、idProduct(产品 ID)等。
  • value:属性的值,用于匹配特定的设备。
  • ACTION=="command":当匹配条件满足时,udev 执行的命令或动作,如创建符号链接、设置权限等。

规则文件示例

        假设你想要为一个特定的 USB 打印机创建一个持久的设备节点,你可以创建一个如下的规则文件:

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0x03f0", ATTR{idProduct}=="0x1a42", SYMLINK+="myprinter"

        这个规则的含义是:当一个 USB 设备被添加到系统,且它的厂商 ID 是 0x03f0,产品 ID 是 0x1a42 时,udev 会为这个设备创建一个名为 myprinter 的符号链接。

五、配置udev详细示例

        假设我们有一个特定的 USB 无线网卡,我们需要为它创建一个持久的设备节点,并设置特定的权限,以便只有特定的用户组可以访问这个设备。

  • 设备信息

        首先,我们需要获取设备的相关信息。通常,设备的厂商 ID 和产品 ID 是配置 udev 规则所需的关键信息。我们可以使用 lsusb 命令来查看连接到系统的所有 USB 设备的信息。

lsusb

         假设输出中显示我们的无线网卡具有以下信息:

Bus 002 Device 003: ID 0x0846:0x9001

        这里 0x0846 是厂商 ID,0x9001 是产品 ID。 

  • 创建规则文件 

        接下来,我们创建一个新的 udev 规则文件。通常,规则文件位于 /etc/udev/rules.d/ 目录下。我们可以创建一个名为 70-persistent-net.rules 的文件,其中 70 表示规则的优先级(数字越小,优先级越高)。

sudo nano /etc/udev/rules.d/70-persistent-net.rules
  • 编写规则 

        在打开的文本编辑器中,我们将编写以下规则:

# 匹配特定的 USB 无线网卡
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0x0846", ATTRS{idProduct}=="0x9001",

# 为设备创建一个持久的节点名
SYMLINK+="wireless网卡%n",

# 设置设备节点的权限,使得只有 "wireless" 用户组可以访问
GROUP="wireless", MODE="0660"

        这个规则的含义是:

  • 当一个 USB 设备被添加到系统,并且它的厂商 ID 是 0x0846,产品 ID 是 0x9001 时,udev 将执行以下操作:
    • 为设备创建一个名为 wireless网卡N 的符号链接,其中 N 是设备实例的编号。
    • 将设备的文件权限设置为 0660,这意味着只有文件的所有者和 "wireless" 用户组的成员可以读写设备文件。
    • 将设备的所属用户组设置为 "wireless"。
  • 应用规则

        保存并关闭规则文件后,我们需要让 udev 重新加载规则:

sudo udevadm control --reload-rules

         然后,我们可以插入无线网卡并检查 udev 是否按照我们的规则创建了设备节点和符号链接:

udevadm info -a -n /dev/wireless网卡N

        替换 N 为你的设备实例的实际编号。

  • 验证权限

        最后,我们需要验证设备节点的权限是否正确设置。可以使用 ls -l 命令查看 /dev/ 目录下的设备节点:

ls -l /dev/wireless网卡N

        输出应该显示设备节点的权限是 660,并且所属组是 "wireless"。 

如果设备在插入时没有立即按预期工作,尝试重启 udev 服务或者重新启动系统。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值