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

Linux-笔记 udev机制介绍

目录

前言

概念

规则文件

规则文件的命名

规则文件的语法 

匹配条件

赋值指令

例子


前言

        由于之前利用udev机制实现了一个自动配置某功能的项目,所以这里做一下笔记总结,什么是udev?怎么用?

概念

        udev其实是linux系统中一个设备管理机制,负责在设备连接与断开的时候动态去创建与删除设备节点,并管理设备的命名和权限。当有设备插入或移除的时候,内核会产生“uevent”消息,这些消息会通过 “netlink”套接字发送给用户空间的udev,具体会有一个udevd来监听,它是udev的守护进程。

规则文件

        udev使用一组规则文件来匹配设备信息,并决定如何处理这些设备,规则文件一般位于/etc/udev/rules.d与/lib/udev/rules.d/内,具体为:                     

  • /etc/udev/rules.d:用户自定义规则文件。
  • /lib/udev/rules.d:系统默认的规则文件。
规则文件的命名

规则文件通常以数字开头,数字越小优先级越高。命名格式一般为:

数字-xxx.rules
如:
20-usb0.rules //优先级高
100-usb1.rules //优先级低
规则文件的语法 

规则文件有专门的语法,通常由匹配条件和赋值指令组成,基本格式如下:

匹配条件... , 赋值指令...
·匹配条件:用于筛选符合条件的设备属性。
·赋值指令:用于指定对匹配设备进行的操作
匹配条件

        常用的匹配条件,特别说明的是,编写规则文件只需要提供足够具体的匹配条件来唯一标识目标设备。udev会根据这些条件在文件系统中查找相应设备,并应用匹配的规则。

// ACTION:匹配事件类型(add、remove、change)
ACTION=="add"// DEVNAME:匹配设备节点名称
DEVNAME=="/dev/sda"// KERNEL:匹配内核设备名称
KERNEL=="sda*"// SUBSYSTEM:匹配设备子系统名称
SUBSYSTEM=="usb"// ATTR{key}:匹配设备属性
ATTR{idVendor}=="1234"   //vid厂商id
ATTR{idProduct}=="5678"  //pid产品id// ENV{key}:匹配环境变量
ENV{ID_USB_DRIVER}=="usb-storage"
赋值指令

        常见的赋值指令,run指令是一个很好用的指令,我们可以利用run指令,当我们插上一些设备后让系统自动跑一些脚本去配置功能。

//NAME:设置设备节点名称
NAME="mydevice"//SYMLINK:创建符号链接
SYMLINK+="mydevice"//MODE:设置设备节点权限
MODE="0666"//OWNER:设置设备节点所有者
OWNER="username"//GROUP:设置设备节点所属组
GROUP="groupname"//RUN: 指定设备事件触发的程序或脚本
RUN+="/path/to/script.sh"
例子
ACTION=="add", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0901", RUN+="/usr/bin/inserted.sh 2c7c 0904 %k"
  • ACTION=="add":表示当有设备添加时触发该规则。
  • ATTRS{idVendor}=="2c7c":匹配设备的厂商 ID(Vendor ID),即 2c7c
  • ATTRS{idProduct}=="0904":匹配设备的产品 ID(Product ID),即 0904
  • RUN+="/usr/bin/usb-EC200G-inserted.sh 2c7c 0904 %k":当上述条件匹配时,运行指定的脚本 /usr/bin/inserted.sh,并传递厂商 ID、产品 ID 及设备名称(使用 %k 变量)。
http://www.lryc.cn/news/390954.html

相关文章:

  • 深度学习基准模型Mamba
  • 面试专区|【40道移动端测试高频题整理(附答案背诵版)】
  • vb6多线程异步,VB.NET 全用API实现:CreateThread创建多线程,等待线程完成任务
  • Python中计算一个序列中特点值出现的数量,比如 [0,0,0,1,1,0,0,]中1的数量
  • gitignore
  • Adobe Premiere 视频编辑软件下载安装,pr全系列分享 轻松编辑视频
  • 大屏开发系列——Echarts的基础使用
  • 指挥中心操作台的形状及空间布局
  • Linux源码阅读笔记07-进程管理4大常用API函数
  • 后端之路第三站(Mybatis)——JDBC跟Mybatis、lombok
  • 零基础入门怎么学习老挝语字母表?《老挝语翻译通》App真人发音教学,学习老挝语字母发音和词汇句子!
  • linux深度deepin基于rsync和apt-mirror同步软件源及构建本地内网源
  • 场景管理分析平台介绍
  • SQL Server和Oracle数据库的实时同步
  • Python中使用Oracle向量数据库实现文本检索系统
  • java考试题20道
  • 云仓的优势体现在哪里?
  • github 设置中文,亲测有效
  • Spring容器生命周期中如前置运行程序和后置运行程序
  • C++ 现代教程二
  • JavaScript函数闭包解析
  • STM32MP135裸机编程:使用软件触发硬件复位
  • 【饼图交通方式】用ECharts的graphic配置打造个性化
  • 大模型学习笔记3【大模型】LLaMA学习笔记
  • 工程师 - 什么是SMP
  • Webpack: 并行构建
  • Vue的介绍与使用
  • MYSQL双主双从,使用Keepalived双机热备+LVS高可用群集
  • 9.计算机视觉—目标检测
  • 构造函数深入理解