Udev设备管理器

news2024/9/20 22:41:45

udev 引入

在2.4内核中 引入了 devfs,他支持设备节点的动态创建。devfs提供了在内存中的文件系统中创建设备节点的能力。设备驱动程序能够自主的管理自己的设备文件。而命名节点的任务还是落到了设备驱动程序头上。但是,设备命名策略是可管理的,不应该与内核混在一起,设备命名策略可以位于头文件,模块参数,或者用户空间中。而udev则将设备管理的任务推向了用户空间。

一 udev 是什么

简单讲,udev负责在用户空间,根据用户设置的规则,在监测到设备被插入后,在/dev/下自动创建并命名设备文件节点(实际上只能做一个已存在节点的链接文件),也可以自动设置设备属性。

udev 的工作取决于以下几项:
1 内核中的 sysfs文件系统 支持
2 一套用户空间守护程序 udevd 和 实用工具 udevinfo
3 用户自定的规则,位于 /etc/udev/rules.d/目录中。可以根据对应设备的特点设置规则。

devfs和udev的区别主要有以下几点

1、devfs运行在内核空间(使用devfs_register等API在内核空间注册设备节点)。而udev完全运行在用户空间。

2、当用户访问/dev下的某个节点时,devfs会自动加载对应的驱动;而udev则并不负责自动加载驱动的工作(2.6版本内核,驱动是在设备被插入/移除时被加载/卸载的,而不是设备被访问时就加载驱动)。

3、devfs 是在内核空间命名设备,而 udev是在用户空间命名设备

4、udev 也会处理 热拔插、冷拔插, 事实上 udev承担了管理热拔插的全部责任。

二 udev的功能是什么

对热拔插 与 冷拔插的处理:

udev 完全在用户态工作,利用设备加入或移除时内核所发送的热拔插事件来工作,在运行过程中往系统中插入设备称为“热拔插”,而在系统系统前就已经连接的设备则称为冷拔插。侦测到热拔插事件之后,他们会通过netlink套接字向用户空间派生 uevent。 netlink套接字是一种在内核空间和用户空间透过套接字API进行通信的有效机制,用户空间的 udevd(管理设备节点创建和移除的守护进程)会接收uevent并管理热拔插。

udev也处理冷拔插,由于udev是用户空间的一部分,仅仅在内核启动后才开始运行,所以需要一种特殊的机制针对冷拔插设备模拟热拔插事件。启动时,内核为所有设备在sysfs下创建了一个名为 uevnet的文件,并将冷拔插事件记录于这些文件中。当udev开始运行后,他读取sysfs下所有的uevent文件,并为每个冷拔插设备产生热拔插uevent。

三 udev 怎么用

使用:

假设目前有一个 USB DVD驱动器 或 一个 USB CD-RW。根据热拔插设备顺序的不同,一个被命名为 /dev/sr0,另一个被命名为 /dev/sr1。在没有udev的情况下,必须区分这些名字对应的设备是哪个。但是有了udev之后,不管以什么顺序拔插它们,都能分辨出二者,如 DVD命名为 /dev/usbdvd, CD-RW命名为 /dev/usbdrw。

首先,从sysfs响应的文件中提取产品信息。假定 DVD驱动器被分配的设备节点是 /dev/sr0,CR-RW被分配的设备节点是 /dev/sr1。 使用 udevinfo可以收集设备信息

在这里插入图片描述
然后使用搜集到的产品信息标识设备并且添加udev命名规则,创建 /etc/udev/rules.d/40-cdvd.rules 文件 并添加如下信息:

BUS="usb", SYSFS{idProduct}="0701", SYSFS{idVendor}="05e3",
KERNEL="sr[0-9]*", NAME="%k", SYMLINK="usbdvd"

BUS="usb", SYSFS{idProduct}="0302", SYSFS{idVendor}="0dbf",
KERNEL="sr[0-9]*", NAME="%k", SYMLINK="usbdcdrw"

首先 第1条规则告诉 udev,一旦发现一个USB设备的产品ID为0x0701,厂商ID为0x05e3,就增加一个以sr开始的名称,udev将在 /dev 目录下创建一个同名的节点并为之创建一个名为 usbdvd的符号链接。类似的,第2条规则是为 CD-RW驱动器创建一个名为usbcdrw的符号链接。

为了测试新创建的语法错误,可以对 /sys/block/sr*运行udevtest。

为了打开 /var/log/messages中的相关提示信息,可以将 /etc/udev/udev.conf文件中的 udev_log设置为 “yes”

为了在运行过程中的对 /dev 目录应用增加规则,可以运行 udevstart重启udev,此后,你的DVD驱动器在系统中将始终为 /dev/usbdvd,而CD-RW驱动器将总是为/dev/usbcdrw。

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

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

相关文章

【设计模式】结构型模式·适配器模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易,如果您觉得写的不错,欢迎给博主来一波点赞、收藏~让博主更有动力吧! 一. 概述 将一个类的接口转换成客户希望的另外一个接口,使得原本接口不兼容而不能一…

分布式搜索引擎--Elasticsearch

1.1 相关术语 和mysql类比 索引:数据库,database,6.0以后变化,对应表 类型:table,6.0以后变化,废弃 文档:一张表里的一行 字段:一个属性就是一个字段 和分布式相关 集群…

NLP学习笔记(六) Transformer简明介绍

大家好,我是半虹,这篇文章来讲 Transformer\text{Transformer}Transformer,想要获取更多相关文章,欢迎关注 自然语言处理 专栏 在之前的两篇文章中,我们介绍过序列到序列模型以及注意力机制在序列到序列模型中的应用 …

Linux开启Docker远程访问并设置安全访问(证书密钥),附一份小白一键设置脚本哦!

前言 喜欢折腾慢慢看,不喜欢折腾直接跳到小简下文的一键脚本那里,两分钟搞好。 我的博客:https://blog.ideaopen.cn 我的公众号:小简聊开发 开启远程访问 编辑docker.service文件 vi /usr/lib/systemd/system/docker.service # …

Python FastAPI 框架 操作Mysql数据库 增删改查

2 比 1 更容易理解,可以先看2(单文件级别) 1、FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库。 在这里,让我们看一个使用着SQLAlchemy的示例。 您可以很容易地将SQLAlchemy支持任何…

每天进步一点点,今天来学结构体

什么是结构体? C 语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级语言中记录。 …

01、数据结构——数组

一、数据结构与算法 数据结构是一门研究组织数据方式的学科,有了编程语言也就有了数据结构。学好数据结构可以编写出更加漂亮、更加有效率的代码。程序数据结构算法数据结构是算法的基础 二、稀疏数组: 1、基本介绍: 当一个数组中大部分元…

【Javascript】文本转语音SpeechSynthesisUtterance

SpeechSynthesisUtterance基本介绍 SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 SpeechSynthesisUtterance基本属性 SpeechSynthesisUtterance.lang 获取并设置话语的语言 SpeechSynthesis…

InfluxDB 笔记

概念 Measurement 类似于表名。 A measurement acts as a container for tags, fields, and timestamps. Tag 补充描述数据的信息,如示例中的location和scientist描述了该数据的采集地和采集人。这两个称为Tag Key,具体的值则称为Tag Value&#xff0c…

小程序基础篇-视图与逻辑

本次学习目标&#xff1a;实现页面间的导航跳转实现下拉刷新实现上拉加载更多知道小程序常用的生命周期函数1.页面导航页面导航指的是页面之前相互的跳转浏览器之间的页面导航有两种&#xff1a;<a>;location.href小程序之间的页面导航有两种&#xff1a;声明式导航&…

告警与恢复告警原理及实现

一、 背景自“双碳”政策提出以来&#xff0c;KaiwuDB 聚焦“数字能源”领域&#xff0c;为用户打造数字能源管理平台&#xff0c;旨在提升综合能源和碳资产管理能力。数字能源管理平台是以 KaiwuDB 为核心建设的云-边-端一体化数据服务平台&#xff0c;致力于为 IoT、工业互联…

前言技术--swagger

目录一、前后端分离的特点二、在没有swagger之前三、swagger的作用四、swagger的优点五、集成swagger5.1 新建springboot项目5.2 集成swagger5.3 开发一个controller用于测试5.4 启动服务&#xff0c;验证集成效果六、swagger常用注解七、swagger使用综合案例一、前后端分离的特…

Python的PyQt框架的使用-常用控件篇

Python的PyQt框架的使用-常用控件篇一、前言二 、QLineEdit 文本框三 、QPushButton按钮控件四、QRadioButton 单选按钮一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;小伙伴们&#xff0c;让我们一起来学习Python的PyQt框架的常用控件。如果文章对你有帮助、欢迎…

第一个程序——构建一个ServerUI

简介 本次程序设计均使用python实现&#xff0c;使用sql server对聊天室用户的数据进行存储。通过python socket套接字编程&#xff0c;实现了在线聊天室的功能&#xff0c;并使用python tkinter进行UI界面的设计。 思路 由计算机网络的基础知识易知&#xff0c;两个主机之间…

基于LSTMGRU的微博突发事件分析与谣言检测(附完整的代码+报告)

问题描述及方法基础 本章主要对课题研究所涉及的机器学习、自然语言处理的原理和方法进行介绍,主要分为四部分,第一部分是将本课谣言检测任务的符号化描述;第二部分是微博数据的预处理,包括语言模型、文本分词等技术;第三部分与第四部分分别是本文搭建的微博谣言检测模型所…

py字符串的格式化笔记

print():和cjava差不多&#xff0c;只是逗号变了&#xff0c;其中 %s 就是模板中的占位符&#xff0c;表示这个位置先占着&#xff0c;待会儿要有数据填入到这里。然后再提供一个元组&#xff0c;里面依次存放需要填入到 %s 位置 的数据。这里是使用变量 (salary,tax,aftertax)…

CSS.前端基础.html

什么是 CSS? CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中&#xff0c;是为了解决内容与表现分离的问题外部样式表可以极大提高工作效率外部样式表通常存储在 CSS 文件中多个样式定义可层叠为一个示…

丝绸之路也可以是科技传播之路

唐宋元海外贸易 618年-1368年 王孝通 生卒年代不详 孙思邈541年—682年 一行 公元683年-公元727年 李淳风 602年&#xff0d;670年 沈括 1031年&#xff0d;1095年 郭守敬 1231年&#xff0d;1316年 扎马鲁丁生卒年代不详 阿拉伯帝国 632年-1258年 阿尔花拉子模 780年&#xf…

【深度强化学习】【论文阅读】【双臂模仿】Deep Imitation Learning for BimanualRobotic Manipulation

title: Deep Imitation Learning for BimanualRobotic Manipulation date: 2023-01-15T20:54:56Z lastmod: 2023-01-19T18:31:57Z Deep Imitation Learning for BimanualRobotic Manipulation 1 Introduction 文中使用的模型是一个深度的、分层的、模块化的架构。与 baselin…

微服务负载均衡器Ribbon学习笔记

目录 1.什么是Ribbon 1.1 客户端的负载均衡 1.2 服务端的负载均衡 1.3 常见负载均衡算法 2. Nacos使用Ribbon 3. Ribbon负载均衡策略 4.修改默认负载均衡策略 方式1&#xff1a;通过自定义配置类来实现 方式2&#xff1a;通过修改配置文件实现&#xff08;推荐&#xf…