当前位置: 首页 > news >正文

【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.更多文章

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

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

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

相关文章:

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

1.udev概述 udev是 Linux2.6内核里的一个功能,它替代了原来的 devfs,成为当前 Linux 默认的设备管理工具,能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。 udev以守护进程的形式运行&am…...

超实用!给独立开发者福音的一站式应用开发工具!

各位开发者们,是否曾经为了搭建服务、开发接口API而头痛不已?是否曾因为需要集成各种第三方认证服务而感到心力交瘁?别担心,今天我要向大家介绍的是一款专为“懒人”开发者准备的神器——MemFire Cloud。这款一站式应用开发工具不…...

华为 HarmonyOS 中国市场份额一季度超越苹果 iOS

华为 HarmonyOS 中国市场份额一季度超越苹果 iOS 根据最新发布的数据,研究机构Counterpoint Research指出,在2024年第一季度,华为的操作系统HarmonyOS在中国市场超越了苹果的iOS,成为中国市场上的第二大操作系统。 ![在这里插入…...

【乐吾乐2D可视化组态编辑器】导航

支持点击图元,切换画面或跳转链接。 乐吾乐2D可视化组态编辑器地址:https://2d.le5le.com/ 切换画面 1. 添加事件 2. 设置事件行为 事件行为"发送消息",消息名选择"导航"。 3. 配置消息参数 消息参数,…...

vue 之 vuex

目录 vuex 是什么 Vuex管理哪些状态呢? Vuex 页面刷新数据丢失怎么解决 1. 使用浏览器的本地存储 2. 使用 Vuex 持久化插件 3. 使用后端存储 注意事项 Vuex 为什么要分模块并且加命名空间 vuex 是什么 vuex 是专门为 vue 提供的全局状态管理系统&#xff0c…...

【代码随想录】【算法训练营】【第36天】[452]用最少数量的箭引爆气球 [435]无重叠区间 [763]划分字母区间

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 36,周三,最难坚持的一天~ 题目详情 [452] 用最少数量的箭引爆气球 题目描述 452 用最少数量的箭引爆气球 解题思路 前提:区间可能重叠 思路:…...

【ElasticSearch】windows server 2019安装ES8.9.1 + kibana8.9.1 + IK分词器

目录 准备工作 ES Kibana IK 安装 es es访问测试 将es安装为系统服务 Kibana 配置es 运行kibana 访问测试 IK 补充 准备工作 ES8.9.1 kibana8.9.1 IK的版本最好要对应上!!! ES es8.9.1: https://artifa…...

前端面试题(一)答案版

面试形式:线下面试:时长60分钟 面试过程:填写个人信息->笔记题->HR根据前面2份资料提问->技术面试(见如下面试题) 面试官:项目负责人 公司背景:教育培训公司,项目给本公…...

qt c++ 子界面调用主窗口函数

方法&#xff1a;使用单例模式 将主窗口设计为单例模式。在子界面中通过单例访问主窗口实例&#xff0c;并调用公共函数。 // mainwindow.h #include <QMainWindow>class MainWindow : public QMainWindow {Q_OBJECTpublic:static MainWindow& instance() {static …...

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

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

从申请到放款,外汇贷款软件的全流程测试解析

一、业务概述 外汇贷款是商业银行经营的一项重要资产业务。它是指银行运用外汇资金&#xff0c;向借款人提供短期或长期的外汇资金融通。这种贷款业务不仅能帮助银行获取经济效益&#xff0c;还是银行联系客户的主要途径。外汇贷款对于利用外资、引进先进技术设备&#xff0c;以…...

数据分析之数据预处理、分析建模、可视化

1、数据分析概述 数据分析&#xff1a;对大量有序或无序的数据进行信息的集中整合、运算提取、展示等操作&#xff0c;通过这些操作找出研究对象的内在规律。 目的&#xff1a;揭示事物运动、变化、发展的规律。 意义&#xff1a;提高系统运行效率、优化系统作业流程、预测未…...

计算机网络:1概述

概述 因特网 网络、互连网&#xff08;互联网&#xff09;与因特网的区别与关系 若干节点和链路互连形成网络&#xff0c;若干网络通过路由器互连形成互连网&#xff0c;世界上最大的互连网是互联网&#xff08;因特网Internet&#xff09;。 因特网发展的三个阶段 因特网…...

Mybatis工作流程和插件开发

在了解插件开发之前&#xff0c;我们先总体的来梳理一下Mybatis的大致执行流程&#xff1a; 1.new SqlSessionFactoryBuilder().build(inputStream):先根据配置文件&#xff08;包含了全局配置文件和映射配置文件&#xff09;初始化一个对象Configuration&#xff08;这里对象里…...

部署大模型LLM

在autodl上部署大模型 windows运行太麻烦&#xff0c;环境是最大问题。 选择云上服务器【西北B区 / 514机】 cpp (c c plus plus) 纯 C/C 实现&#xff0c;无需外部依赖。针对使用 ARM NEON、Accelerate 和 Metal 框架的 Apple 芯片进行了优化。支持适用于 x86 架构的 AVX、…...

【CT】LeetCode手撕—88. 合并两个有序数组

目录 题目1- 思路2- 实现⭐88. 合并两个有序数组——题解思路 2- ACM实现 题目 原题连接&#xff1a;88. 合并两个有序数组 1- 思路 模式识别 模式1&#xff1a;两个有序数组合并 ——> 双指针模式2&#xff1a;返回结果填充到 nums1[mn] ——> 需要开辟新的数组空间 …...

深入分析 Android BroadcastReceiver (二)

文章目录 深入分析 Android BroadcastReceiver (二)1. 深入理解 BroadcastReceiver 的高级使用和优化2. 有序广播&#xff08;Ordered Broadcasts&#xff09;2.1 实现有序广播 3. 粘性广播&#xff08;Sticky Broadcasts&#xff09;3.1 使用粘性广播 4. 本地广播&#xff08;…...

Linux常⽤服务器构建-ssh和scp

目录 1.ssh <1>ssh介绍 <2>安装ssh A.安装ssh服务器 B.远程登陆 <3>使⽤ssh连接服务器 2.scp 本地⽂件复制到远程&#xff1a; 本地⽬录复制到远程&#xff1a; 远程⽂件复制到本地&#xff1a; 远程⽬录复制到本地&#xff1a; 1.ssh <1>…...

《QT实用小工具·七十》openssl+qt开发的P2P文件加密传输工具

1、概述 源码放在文章末尾 该项目实现了P2P的文件加密传输功能&#xff0c;具体包含如下功能&#xff1a; 1、 多文件多线程传输 2、rsaaes文件传输加密 3、秘钥随机生成 4、断点续传 5、跨域传输引导服务器 项目界面如下所示&#xff1a; 接收界面 发送界面 RSA秘钥生成…...

短链接生成器排名前三!长链接转化成短链接工具有哪些?

在现今的网络营销环境中&#xff0c;短链接的应用越来越广泛。它不仅能简化长链接&#xff0c;提高分享效果&#xff0c;还能提升企业品牌形象和用户体验。于是&#xff0c;市场上涌现出众多短链接生成工具。本文将为您揭秘短链接生成器排名前三的产品&#xff0c;帮您找到最适…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...