【Linux应用】Linux系统的设备管理——Udev

1.udev概述

udev是 Linux2.6内核里的一个功能,它替代了原来的 devfs,成为当前 Linux 默认的设备管理工具,能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。
udev以守护进程的形式运行,通过帧听内核发出来的uevent来管理/dev目录下的设备文件。不像之前的设备管理工具,udev在用户空间运行,而不在内核空间运行。
udev会根据/etc/udev/udev.conf文件中的udev_rules指定的目录,逐个检查该目录下的文件,这个目录下的文件都是针对某类或某个设备应该施行什么措施的规则文件。
在这里插入图片描述

2.udev作用

Udev用于动态管理设备的设备管理器,主要是在设备插入或移除时,负责管理与这些事件相关联设备节点以及执行相应动作。
设备发现和管理:udev负责在 Linux 系统中检测和管理设备。当新设备插入或旧设备被移除时,udev负责识别这些变化,并在 /dev 目录下创建或删除相应的设备节点。

1.设备命名:Udev为设备节点提供了一个规范的命名机制,以便用户和应用程序能够更容易地识别设备。这有助于确保相同类型的设备在不同系统上都有相似的设备节点名称。

2.热插拔支持:Udev支持热插拔设备,即在系统运行时插入或移除设备。它可以动态地更新设备节点,而无需重新启动系统。

3.规则系统:Udev使用规则文件来定义在设备事件发生时要执行的操作。这些规则可以基于设备属性、类型和其他标识符来匹配。规则允许用户执行自定义脚本、设置环境变量、创建符号链接等操作。

4.持久化设备节点:Udev提供了机制,以确保设备节点的稳定性。即使设备在重新启动后未连接,Udev仍会分配相同的设备节点名称,以便应用程序可以依赖特定的设备节点。

5.提供额外信息:Udev为每个设备节点提供了大量的额外信息,例如设备类型、设备路径、驱动程序信息等。这些信息可用于用户空间的应用程序,以更好地理解和利用系统中的设备。

所有设备在Linux是以设备文件的形式存在,在早期的Linux版本中,/dev目录包含了所有可能出现的设备的设备文件。很难想想Linux用户如何在这些大量的设备文件中找到匹配条件的设备文件。现在udev只为那些连接到Linux操作系统的设备产生设备文件。并且udev能通过定义一个udev规则rule来产生匹配设备属性的设备文件,这些设备属性可以是内核设备名称、总线路径、厂商名称、型号、序列号或者磁盘大小等。

1.动态管理:当设备添加/删除时,udev守护进行帧听来自内核的 uevent,以此添加或者删除 /dev下的设备文件,所以udev只为已经连接的设备产生设备文件,而不会在 /dev 下产生大量虚无的设备文件。
2.自定义命名规则:通过 Linux 默认的规则文件,udev在/dev/ 里为所有的设备定义了内核设备名称,比如 /dev/sda、/dev/hda、/dev/fd 等等。由于udev是在用户空间运行,Linux 用户可以通过自定义的规则文件,灵活地产生标识性强的设备文件名,比如 /dev/boot_disk、/dev/root_disk、/dev/color_printer 等等。
3.设定设备的权限和所有者/组:udev可以按一定的条件来设置设备文件的权限和设备文件所有者/组。在不同的udev版本中,实现的方法不同,在 “如何配置和使用udev” 中会详解。

有匹配规则
没有规则匹配
内核检测到新设备
udevd接收设备信息
删除/dev目录中的设备文件
生成uevent
查找规则文件
创建设备文件
使用内核设备名创建文件

3.配置udev

配置使用udev通常涉及创建和编辑udev规则,这些规则定义了设备在系统中行为。在使用udev之前,了解一些基本概念,例如subsystem、KERNEL、ACTION等。

含义
ACTION事件 (uevent) 的行为,例如:add( 添加设备 )、remove( 删除设备 )。
KERNEL在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备
DEVPATH内核设备路径,比如/devices/*
SUBSYSTEM子系统名字,例如:sda 的子系统为 block。
BUS总线的名字,比如IDE,USB,iscsi
DRIVER设备驱动的名字,比如ide-cdrom
ID独立于内核名字的设备名字
SYSFS{value}sysfs属性值,可以表示任意
ENV{key}环境变量,可以表示任意
PROGRAM可执行的外部程序,如果程序返回0值,该键则认为为真(true)
RESULT上一个PROGRAM调用返回的标准输出。
NAME根据这个规则创建的设备文件的文件名。注意:仅仅第一行的NAME描述是有效的,后面的均忽略。如果你想使用使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键。
SYMLINK为/dev/下的设备文件产生符号链接。由于udev只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的 udev 规则所产生的文件,推荐使用符号链接。
OWNER设备文件的属组
GROUP设备文件所在的组。
MODE设备文件的权限,采用8进制
RUN为设备而执行的程序列表
LABEL在配置文件里为内部控制而采用的名字标签(下面的GOTO服务)
GOTO跳到匹配的规则(通过LABEL来标识),有点类似程序语言中的GOTO
IMPORT{type}导入一个文件或者一个程序执行后而生成的规则集到当前文件
WAIT_FOR_SYSFS等待一个特定的设备文件的创建。主要是用作时序和依赖问题。
OPTIONS特定的选项:last_rule 对这类设备终端规则执行;ignore_device 忽略当前规则;ignore_remove 忽略接下来的并移走请求。all_partitions 为所有的磁盘分区创建设备文件。

在/etc/udev/rules.d/目录下,有一些默认的udev规则文件,例如70-persistent-net.rules。可通过创建新的规则文件或编辑已有的规则文件来定义udev规则。规则文件的命名约定是以数字和描述性名称开头,例如10-local.rules。数字决定了规则的优先级,数字越小,规则越早被处理。

KERNEL==*, OWNER=”root” GROUP=”root”, MODE=0600″
KERNEL==”tty”, NAME=%k”, GROUP=”tty”, MODE=0666, OPTIONS=”last_rule”
KERNEL==”scd[0-9]*, SYMLINK+=”cdrom cdrom-%k”
KERNEL==”hd[a-z], BUS==”ide”, SYSFS{removable}==1, SYSFS{device/media}==”cdrom”, SYMLINK+=”cdrom cdrom-%k”
ACTION==”add”, SUBSYSTEM==”scsi_device”, RUN+=/sbin/modprobe sg”

上面的例子给出了5个规则,每一个都是KERNEL或者ACTION键开头:
第一个则是缺省的,他匹配任意被内核识别到的设备,然后设定这些设备的属组是root,组是root,访问权限模式是0600(-rw——-)。这也是一个安全的缺省设置保证所有的设备在默认情况下只有root可以读写。
第二个规则也是比较典型的规则了。它匹配终端设备(tty),然后设置新的权限为0600,所在的组是tty。它也设置了一个特别的设备文件名:%K。在这里例子里,%k代表设备的内核名字。那也就意味着内核识别出这些设备是什么名字,就创建什么样的设备文件名。
第三行开始的KERNEL==”scd[0-9]*”,表示 SCSI CD-ROM 驱动. 它创建一对设备符号连接:cdrom和cdrom-%k。
第四行,开始的 KERNEL==”hd[a-z]“, 表示ATA CDROM驱动器。这个规则创建和上面的规则相同的符号连接。ATA CDROM驱动器需要sysfs值以来区别别的ATA设备,因为SCSI CDROM可以被内核唯一识别。.
第五行以 ACTION==”add”开始,它告诉udev增加 /sbin/modprobe sg 到命令列表,当任意SCSI设备增加到系统后,这些命令将执行。其效果就是计算机应该会增加sg内核模块来侦测新的SCSI设备。
编写规则: 规则的编写使用基于键值对的语法。以下是一个简单的规则示例:

当插入一个块设备并且设备的内核名是sda时,执行脚本

SUBSYSTEM=="block", KERNEL=="sda", ACTION=="add", RUN+="/bin/my_custom_script"

在这个例子中,SUBSYSTEM=="block"表示规则适用于块设备,KERNEL=="sda"表示设备的内核名是sda,ACTION==“add"表示设备被添加,RUN+=”/bin/my_custom_script"表示在添加时执行/bin/my_custom_script脚本。

重新加载规则: 在编辑或创建规则文件后,需要重新加载udev规则。

sudo udevadm control --reload-rules

测试规则: 插入或移除设备,观察规则是否按照预期执行。可以使用udevadm monitor命令来监视udev事件。

sudo udevadm monitor

在另一个终端中插入或移除设备,观察监视器中的输出。

查看udev事件信息: 使用udevadm info命令来查看设备的udev信息。

sudo udevadm info --attribute-walk --path=/sys/path/to/device

替换/sys/path/to/device为实际设备的路径。对udev的配置更改可能会影响设备的命名和系统的行为,因此在进行更改之前,请确保了解其影响。

例如,以下规则表示当USB设备插入时,在/tmp/usb_log.txt文件中写入一条日志:

ACTION=="add", SUBSYSTEM=="usb", RUN+="/bin/sh -c 'echo USB device inserted >> /tmp/usb_log.txt'"

可以根据自己的需求添加其他规则。

总体而言,Udev 通过规则匹配和执行动作的方式,实现了对设备事件的监听和处理,从而支持 Linux 系统的热插拔机制。这使得在系统运行时插入或拔出设备时,系统能够动态地适应这些变化。
在这里插入图片描述

udev是一个设备管理工具,udev以守护进程的形式运行,通过侦听内核发出来的uevent来管理/dev目录下的设备文件。通过侦听内核发出来的硬件数据(事件),在用户空间为这个硬件去创建对应代表该硬件的文件,应用程序例如adb就可以通过该文件操作到硬件设备。
udev在用户空间运行,而不在内核空间运行。它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。

4.更多文章

==============================
新的文章内容和分享已更新在:

|工|·-·|重|·-·|号|:协议森林

==============================

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

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

相关文章

面向对象初级--封装

封装 封装从字面上来理解就是包装的意思 比如鼠标,外部有一个元件,将内部的原件封装起来,至于鼠标内部的细节是什么,我们不需要关心,只需要知道鼠标对外提供了左键、右键、滚动滑轮这三个简单的操作。对于用户来说只…

计算机网络复习

2024年whut 概述 1.计算机网络的目标:信息传输和资源共享 2.网络协议的要素(必考): 语法:数据信息和控制信息的结构或格式 语义:要发出何种控制信息,完成何种动作,做出何种响应 同…

安装VM虚拟机并创建一个Linux CentOS 7无桌面系统

一、安装vm虚拟机软件 1 下载vm压缩包 百度网盘链接 链接:https://pan.baidu.com/s/1ipiWatBr0wHKMt5c5nQirw?pwdwoy2 提取码:woy2 2.下载完毕后,先将杀毒软件关闭 全部关闭 3. 解压后按照步骤安装即可 按照按照步骤,观看…

计算机网络 —— 应用层(应用层概述及服务方式)

计算机网络 —— 应用层(应用层概述及服务方式) 应用层服务方式C/S(客户端-服务器(C/S)模型)基本概念特点B/S(Browser/Server)基本概念特点应用场景 p2p (对等网络&#…

Java17 --- SpringSecurity之OAuth2

一、OAuth2 1.1、使用github以授权码方式 1.1.1、注册应用程序 1.1.2、测试代码 pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency> spring…

一些个人电脑用的小工具软件

1 个人电脑信息管理 如下&#xff1b; 整理自己的电脑信息&#xff1b;录入&#xff0c;保存&#xff0c;查询&#xff1b;添加和更新界面如下&#xff0c; 每次添加、更新之后重新点一下菜单的浏览&#xff1b; 下载&#xff0c; https://download.csdn.net/download/bcb…

自主可控数据库沙龙(北京站 |线下| 报名中)

**数据库沙龙**是一个致力于推动数据库技术创新和发展的高端交流平台&#xff0c;旨在增强国内数据库产业的自主可控性和高质量发展。这个平台汇集了学术界和产业界的顶尖专家、学者以及技术爱好者&#xff0c;通过专题演讲、案例分享和技术研讨等丰富多样的活动形式&#xff0…

LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

文章汇总 总体来看像是一种带权重的残差&#xff0c;但解决的如何高效问题的事情。 相比模型的全微调&#xff0c;作者提出固定预训练模型参数不变&#xff0c;在原本权重矩阵旁路添加低秩矩阵的乘积作为可训练参数&#xff0c;用以模拟参数的变化量。 模型架构 h W 0 x △…

vue3 中实现 验证码发送 刷新不变倒计时

今天实现一个倒计时的功能 在平常开发前端的功能的时候 不管是 移动端还是web端 我们都会有注册 登录 中的发送验证码功能 实现绑定以及注册功能。今天我主要分享一下当前的验证码实现原理。 有两种做法(我目前认为以及看到的) ① 做一个简单的倒计时 ② 实时监测倒计时 刷…

Web的UI自动化基础知识

目录 1 Web自动化入门基础1.1 自动化知识以及工具1.2 主流web自动化测试工具1.3 入门案例 2 使用工具的API2.1 元素定位2.1.1 id选择器2.1.2 name2.1.3 class_name选择器2.1.4 tag_name选择器2.1.5 link_text选择器2.1.6 partial_link_text选择器2.1.7 xpath选择器2.1.8 CSS选择…

使用python绘制三维直方图

使用python绘制三维直方图 三维直方图定义特点 效果代码 三维直方图 维直方图&#xff08;3D直方图&#xff09;是一种用于展示三维数据分布情况的图表。它扩展了二维直方图的概念&#xff0c;通过在三维空间中绘制柱体来表示数据在三个维度&#xff08;X、Y、Z&#xff09;上…

Excel中多条件判断公式怎么写?

在Excel里&#xff0c;这种情况下的公式怎么写呢&#xff1f; 本题有两个判断条件&#xff0c;按照题设&#xff0c;用IF函数就可以了&#xff0c;这样查看公式时逻辑比较直观&#xff1a; IF(A2>80%, 4, IF(A2>30%, 8*(A2-30%),0)) 用IF函数写公式&#xff0c;特别是当…

Spring配置那些事

一、引言 配置是一个项目中不那么起眼&#xff0c;但却有非常重要的东西。在工程项目中&#xff0c;我们一般会将可修改、易变、不确定的值作为配置项&#xff0c;在配置文件/配置中心中设置。 比方说&#xff0c;不同环境有不同的数据库地址、不同的线程池大小等&#xff0c…

XSKY 在金融行业:新一代分布式核心信创存储解决方案

近日&#xff0c;国家金融监督管理总局印发了《关于银行业保险业做好金融“五篇大文章”的指导意见》&#xff0c;在数字金融领域提出明确目标&#xff0c;要求银行业保险业数字化转型成效明显&#xff0c;数字化经营管理体系基本建成&#xff0c;数字化服务广泛普及&#xff0…

opencv-python(八)

import cv2 import numpy as npheight 160 width 280 image np.zeros((height, width),np.uint8) cv2.imshow(image,image) cv2.waitKeyEx(0) cv2.destroyAllWindows() 二维数组代表一幅灰度图像。 import cv2 import numpy as npheight 160 width 280 image np.zeros((he…

为何云原生是未来?企业IT架构的颠覆与重构(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是云原生 2、云原生的背景和起源 背景 起源 关…

ROS机器人小车建模仿真与SLAM

文章目录 一、URDF二、创建小车模型1.创建功能包2.导入依赖3.创建urdf,launch文件&#xff1a;4.可视化 三、添加雷达1.xacro文件2.集成和修改launch3.添加摄像头和雷达 三.GAZEBO仿真四、orbslam2kitti1.下载2.安装编译ORB_SLAM23.运行Kitee数据集 一、URDF ​ URDF&#xff…

Java 集合框架:LinkedList 的介绍、使用、原理与源码解析

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 014 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

Guitar Pro 8软件安装包下载

简介&#xff1a; Guitar Pro吉他软件为帮助所有吉他爱好者学习、绘谱、创作而设计——包含吉他的现有指法及音色&#xff0c; Guitar Pro能了解各类线谱&#xff0c;看谱练吉他&#xff0c;对谱听示范&#xff0c;记录初创声音。 在做弹拨乐器的滑音、倚音、推弦、揉弦、泛…

python图像处理库-PIL(Pillow)

PIL库全称为Python Imaging Library&#xff0c;即Python图像处理库&#xff0c;是一个在Python中用于处理图像的非常流行的库。 一、PIL介绍 这个库提供了广泛的文件格式支持、高效的内部表示以及相当强大的图像处理功能。 核心图像库旨在快速访问存储在几种基本像素格式中的数…