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项目快速搞定,有什…

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…

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)提出的一个协议,旨在解决移动设备在不同网络间切换时的通信问题,确保移动设备可以在离开原有网络或子网…

嵌入式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

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 轻松实现人脸检测

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

Qt 控件与布局管理

1. Qt 控件的父子继承关系 在 Qt 中&#xff0c;继承自 QWidget 的类&#xff0c;通常会在构造函数中接收一个 parent 参数。 这个参数用于指定当前空间的父控件&#xff0c;从而建立控件间的父子关系。 当一个控件被设置为另一控件的子控件时&#xff0c;它会自动成为该父控…

20250122-正则表达式

1. 正则标记 表示一位字符&#xff1a;\\ 表示指定的一位字符&#xff1a;x 表示任意的一位字符&#xff1a;. 表示任意一位数字&#xff1a;\d 表示任意一位非数字&#xff1a;\D 表示任意一个字母&#xff1a;[a-zA-Z]&#xff08;大写或小写&#xff09; 表示任意一个…

基于DNN深度神经网络的OFDM+QPSK信号检测与误码率matlab仿真

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 在现代通信…

一文详解Filter类源码和应用

背景 在日常开发中&#xff0c;经常会有需要统一对请求做一些处理&#xff0c;常见的比如记录日志、权限安全控制、响应处理等。此时&#xff0c;ServletApi中的Filter类&#xff0c;就可以很方便的实现上述效果。 Filter类 是一个接口&#xff0c;属于 Java Servlet API 的一部…

switch组件的功能与用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了PageView这个Widget,本章回中将介绍Switch Widget.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的Switch是指左右滑动的开关&#xff0c;常用来表示某项设置是打开还是关闭。Fl…

C++ 复习总结记录九

C 复习总结记录九 主要内容 1、list 介绍及使用 2、list 剖析及模拟实现 3、list 与 vector 对比 一 list 介绍及使用 List 相关文档 1、List 在任意位置进行插入和删除的序列式容器 O(1) &#xff0c;且该容器可前后双向迭代 2、List 底层是带头双向循环链表&#xff…