Linux的udev详解、安装和使用(dev下的设备每次开机的名称不固定怎么办?)

前言(问题与需求):

在传统的devfs
1:设备映射的不确定:一个设备多次加载设备的设备文件可能不同,比如一个hub有可能是ttyUSB0或ttyUSB2或ttyUSB3
2:devfs没有足够的主辅设备号,当设备过多的时候,会出现问题。(0-255)

解决方式:

使用udev来编写规则来固定设备的映射名称。这样可以防止设备名称变动了

udev简介:

首先udev是一个基于sysfs逻辑文件系统开发的一个应用程序,是devfs的替代品。
udev‌是一个用户空间的设备管理器,很确定在用户空间运行,主要用于Linux系统中动态管理设备节点和符号链接。
udev替代了传统的devfs和hotplug机制,成为当前Linux默认的设备管理工具。
官网的描述:/dev/目录和热插拔管理守护程序(可以管理usb,scsi,block等等子设备)
udev 为一守护程序,能够在/dev/目录下动态创建和移除设备节点,处理热插拔事件,在启动时载入驱动。

udev的基本功能

1:设备管理‌:udev负责在系统启动时创建设备节点,并在设备插入或移除时动态更新/dev目录下的设备文件。只有被内核检测到的设备才会为其创建设备节点,这些节点存储在内存中,不占用磁盘空间‌。
‌2:热插拔支持‌:udev支持热插拔设备,即在系统运行时插入或移除设备。它可以动态地更新设备节点,而无需重新启动系统‌。
‌3:规则系统‌:udev使用规则文件来定义在设备事件发生时要执行的操作。这些规则可以基于设备属性、类型和其他标识符来匹配,并允许用户执行自定义脚本、设置环境变量、创建符号链接等操作‌。
‌4:设备命名‌:udev为设备节点提供一个规范的命名机制,确保相同类型的设备在不同系统上都有相似的设备节点名称,便于用户和应用程序识别‌。

udev的历史背景

在Linux 2.4版本中,devfs被引入作为动态创建设备节点的方法,但由于维护问题最终被废弃。在2.6版本的内核中,sysfs被引入,udev作为其用户空间组件,负责管理/dev目录下的设备节点和符号链接。udev替代了devfs和hotplug,成为更高效和可靠的设备管理工具‌13。
udev的架构和组件
udev的主要组件包括udev守护进程(udevd),它监听内核的uevents并根据udev规则对设备事件进行处理。udev规则定义了设备事件发生时要执行的操作,这些规则可以包含匹配键(如DEVPATH)、动作(如add或remove)等

udev的安装:

大多数linux系统默认会安装udev
centos

sudo yum install systemd-udev

ubuntu

sudo apt update
sudo apt install udev

udev的使用:

一: 配置 udev 规则

udev 的规则存储在 /etc/udev/rules.d/ 目录下。你可以通过编辑或添加新的规则文件来定制设备行为。例如,创建一个新的规则文件:

sudo vim /etc/udev/rules.d/10-custom.rules

在文件中添加规则,例如为 USB 设备设置静态设备名称:

ACTION=="add", KERNELS=="1-5.6", SUBSYSTEMS=="usb", MODE="0666", SYMLINK+="THEUSB1", GROUP="sky_api"

SUBSYSTEM==“usb”:指定子系统为USB。
ACTION==“add”:指定设备添加时执行操作。
KERNELS==“1-5.6”:内核总线的设备地址。
SYMLINK+=“THEUSB1”:在/dev/ 目录下新建一个名为THEUSB1的设备
GROUP=“sky_api”:新建的设备属于 sky_api组。
MODE=“0666”:设置设备的权限为:0666

这行规则为具有内核总线的设备地址 USB 设备创建名为 THEUSB1的符号链接。

二:重载 udev 规则

修改完 udev 规则后,需要重新加载规则,以便 udev 读取并应用这些更改:

sudo udevadm control --reload-rules
sudo udevadm trigger

或者直接重启udev(这样可能会影响正在使用的设备,导致断开连接)

sudo systemctl restart udev.servicesudo systemctl restart systemd-udevd  # 对于使用 systemd 的系统

测试规则:

插入一个符合规则的USB设备,检查是否在/dev目录下生成了名为THEUSB1的设备节点。

其它问题及使用技巧:

调试 udev

通过命令可查看udev的日志打印:

journalctl -xefu systemd-udevd
或
sudo systemctl status udev

可以使用 udevadm 来调试:

udevadm info --query=property --name=/dev/sda

这将显示 /dev/sda 的详细属性。
常见问题解决

设备节点未创建:确保你的 udev 规则正确无误,并且已经通过 udevadm trigger 触发了规则。

权限问题:确保 /etc/udev/rules.d/ 目录及其文件有适当的读写权限。通常,这些文件应该属于 root 用户和 root 组。

日志查看:查看 /var/log/messages 或使用 journalctl 来获取 udev 的日志信息,这有助于诊断问题。例如:

  journalctl -xefu systemd-udevd

通过上述步骤,你应该能够有效地管理和配置系统中的 udev

sudo systemctl restart devfs # 对于较老的系统,使用 devfs 而不是 udevd

请注意,编写和测试udev规则可能需要一定的Linux内核和设备协议知识。如果你不熟悉这些概念,建议在进行更改之前先备份重要数据,并谨慎操作。

不同系统,同一个系统的不同版本,他们的语法可能不同。需要实事求是。

udev流程图:

在这里插入图片描述

除了以上内容,还需要了解udev的匹配规则及运行流程可以参考:

https://blog.51cto.com/u_16213565/10618584

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/69228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 内核中的 InfiniBand 核心模块:drivers/infiniband/core/device.c 分析

InfiniBand 是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux 内核中的 InfiniBand 子系统提供了对 InfiniBand 设备的支持,而 drivers/infiniband/core/device.c 文件则是 InfiniBand 核心模块的重要组成部分。本文将对 dev…

如何快速开发LabVIEW项目,成为LabVIEW开发的高手

发现了一篇多年前写的文章,转发到这里 如何快速开发LabVIEW项目,成为LabVIEW开发的高手。 如果您手里有LabVIEW项目,领导催的又很紧,该怎么办? 如果您公司规模小,就想把LabVIEW项目快速搞定,有什…

Zookeeper(27)Zookeeper的CAP理论是什么?

CAP 理论,又称为 Brewer 定理,是分布式系统设计中的一个基本定理。CAP 代表一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。该理论指出,…

CodeForces 611:New Year and Domino ← 二维前缀和

【题目来源】 https://codeforces.com/contest/611/problem/C 【题目描述】 They say "years are like dominoes, tumbling one after the other". But would a year fit into a grid? I dont think so. Limak is a little polar bear who loves to play. He has r…

数组

数组 栈区的空间很有限,静态区的空间大些,一般在静态区去申请较大的空间 考虑特例能不能归并到一起也很重要 在二维数组中,基于范围的 for 循环直接遍历的是行,而不是单个元素 对于一个 int arr[3][4] 的二维数组, m…

网易Android开发面试题200道及参考答案 (下)

说明原码、反码、补码的概念 原码:是一种简单的机器数表示法。对于有符号数,最高位为符号位,0 表示正数,1 表示负数,其余位表示数值的绝对值。比如,对于 8 位二进制数,+5 的原码是 00000101,-5 的原码是 10000101。原码的优点是直观,容易理解,但在进行加减法运算时,…

K8S中的数据存储之基本存储

基本存储类型 EmptyDir 描述:当 Pod 被调度到节点上时,Kubernetes 会为 Pod 创建一个空目录,所有在该 Pod 中的容器都可以访问这个目录。特点: 生命周期与 Pod 绑定,Pod 删除时,数据也会丢失。适用于临时…

如何移植ftp服务器到arm板子?

很多厂家提供的sdk,一般都不自带ftp服务器功能, 需要要发人员自己移植ftp服务器程序。 本文手把手教大家如何移植ftp server到arm板子。 环境 sdk:复旦微 Buildroot 2018.02.31. 解压 $ mkdir ~/vsftpd $ cp vsftpd-3.0.2.tar.gz ~/vs…

Alfresco Content Services docker自动化部署操作

Alfresco Content Services docker部署文档 前提条件 在开始之前,需要确保已经安装了 Docker 和 Docker Compose。Docker 用于创建和管理容器,Docker Compose 则用于定义和运行多容器的 Docker 应用。 步骤 1. 创建目录结构 首先,创建一个…

计算机网络 (61)移动IP

前言 移动IP(Mobile IP)是由Internet工程任务小组(Internet Engineering Task Force,IETF)提出的一个协议,旨在解决移动设备在不同网络间切换时的通信问题,确保移动设备可以在离开原有网络或子网…

二十三种设计模式-桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,其核心思想是将抽象与实现解耦,让它们可以独立变化。桥接模式主要用于解决类的继承问题,避免由于继承而带来的类层次结构过于复杂和难以维护的问题。 1. 核心概念 桥接…

什么是Pytest Fixtures作用域及如何为Pytest Fixtures设置合适的作用域

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 编写重复代码很可能是你最不乐意做的事情之一。至少对我来说是这样。 在一个全力追…

嵌入式MCU面试笔记2

目录 串口通信 概论 原理 配置 HAL库代码 1. 初始化函数 2. 数据发送和接收函数 3. 中断和DMA函数 4. 中断服务函数 串口通信 概论 我们知道,通信桥接了两个设备之间的交流。一个经典的例子就是使用串口通信交换上位机和单片机之间的数据。 比较常见的串…

Charles 4.6.7 浏览器网络调试指南:流量过滤与分析(六)

1. 概述 在网络调试和优化过程中,Charles 不仅可以实现简单的网络抓包操作,还支持更高级的抓包技巧和流量分析功能。这些功能能够帮助开发者深入挖掘网络请求的细节,为复杂问题提供有效的解决方案。本文将重点讲解 Charles 的过滤规则、自定…

xss靶场

xss-labs下载地址&#xff1a;GitHub - do0dl3/xss-labs: xss 跨站漏洞平台 xss常见触发标签&#xff1a;XSS跨站脚本攻击实例与防御策略-CSDN博客 level-1 首先查看网页的源代码发现get传参的name的值test插入了html里头&#xff0c;还回显了payload的长度。 <!DOCTYPE …

主机监控软件WGCLOUD使用指南 - 如何设置主题背景色

WGCLOUD运维监控系统&#xff0c;从v3.5.7版本开始支持设置不同的主题背景色&#xff0c;如下 更多主题查看说明 如何设置主题背景色 - WGCLOUD

Bootstrap4 模态框

Bootstrap4 模态框 Bootstrap 是一个流行的前端框架,它可以帮助开发者快速构建响应式、移动设备优先的网站和应用程序。Bootstrap 4 是其最新版本,提供了许多易于使用的组件,其中模态框(Modal)组件是其中之一。本文将详细介绍 Bootstrap 4 模态框的用法、特性和优化技巧。…

C语言:数据的存储

本文重点&#xff1a; 1. 数据类型详细介绍 2. 整形在内存中的存储&#xff1a;原码、反码、补码 3. 大小端字节序介绍及判断 4. 浮点型在内存中的存储解析 数据类型结构的介绍&#xff1a; 类型的基本归类&#xff1a; 整型家族 浮点家族 构造类型&#xff1a; 指针类型&…

51单片机入门_01_单片机(MCU)概述(使用STC89C52芯片;使用到的硬件及课程安排)

文章目录 1. 什么是单片机1.1 微型计算机的组成1.2 微型计算机的应用形态1.3 单板微型计算机1.4 单片机(MCU)1.4.1 单片机内部结构1.4.2 单片机应用系统的组成 1.5 80C51单片机系列1.5.1 STC公司的51单片机1.5.1 STC公司单片机的命名规则 2. 单片机的特点及应用领域2.1 单片机的…

使用 OpenCV 和 Python 轻松实现人脸检测

目录 一、准备工作 二、加载人脸检测模型 三、读取图像并进行人脸检测 四、处理视频中的人脸检测 五、优化人脸检测效果 六、总结 在人工智能和计算机视觉领域,人脸检测是一项非常基础且重要的技术。通过人脸检测,我们可以在图像或视频中识别并定位人脸,进而进行后续的…