Udev 基本工作原理

udev文件系统的使用和基本工作原理分析.rar 立即下载

Udev 基本工作原理 

  Udev相关的文章很多,本文的主要目的不是提供一个完整的教学文档,对其使用,只是给出网上现有的主要资源。着重分析其基本工作原理连同在使用中碰到的一些README文档没有明确说明的问题。

1         基本概念
udev文档系统是针对2.6内核,提供一个基于用户空间的动态设备节点管理和命名的解决方案,网上关于为什么要使用udev文档系统,udev文档系统和devfs文档系统的比较,等等的文章已很多了,假如您想了解这方面的内容,请直接搜索相关的关键字。

udev的官方网址:http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
src code的下载地址:http://www.us.kernel.org/pub/linux/utils/kernel/hotplug/

此外,关于udev的rules规则的撰写,网上也有很多文章,假如要获得最准确的版本,能够在src code的代码树里找到writing_udev_rules的帮助文档,这个文档其实没有逐条介绍rules的任何关键字,能够结合man udev 和 udev自带的一些rules文档来理解如何撰写您所需要的规则文档。

2         安装和启动

2.1        安装
Udev的代码树里的版本很多,我下载的最新的版本是udev-117,配合2.6.21版本的内核能够正常使用。网上很多文章介绍的可能都是稍微早期一些的版本,有些步骤包括udev的README文档似乎描述的不是很准确。
基本上这个版本的udev需要注意的是,安装时只需要udevd,udevadm两个文档,其他必需的包括udevtrigger等只是udevadm的一个符号链接。udevstart不是必需的。当然Udev.conf等配置文档还是相同。

2.2        启动
您能够在启动脚本中用udevd –d 参数启动udev文档系统的守护进程,然后使用udevtrigger将buildin的设备驱动的节点创建出来,以后模块插入移除时节点的管理会自动处理。


能够正常加载udev的前提,基本包括如下操作:
       配置路径变量
      加载sysfs文档系统
      加载一个基于ram的可写的/dev目录(其实,只要提供一个可写的目录即可,目录路径本身也是能够配置的)
    /dev目录下需要有已创建好的 console节点和null节点
脚本类似:
# Set the path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
# mount proc and devpts filesystem
/bin/mount -a
mknod /dev/console c 5 1
mknod /dev/null c 1 3
/sbin/udevd -d
/sbin/udevtrigger
Mount使用的fstab文档类似:
none                    /tmp                    ramfs   defaults        0 0
udev                    /dev                    ramfs   defaults        0 0
none                    /proc                   proc    defaults        0 0
sysfs                   /sys                    sysfs   defaults        0 0
当然,您的系统上可能还会需要预先创建一些其他的设备节点,比如串口的ttySx 才能正常启动shell,完成以上脚本的执行,那就要看具体情况了。

3         使用中的一些问题的思考

3.1        关于规则的多次匹配
帮助文档中说一个设备能够被多条规则多次匹配,但是,需要明确的一点是:
多次匹配只能添加多个Symlink,不能创建多个Name:
例如:
KERNEL=="mtdblock4", NAME+="mtdbb4"
KERNEL=="mtdblock4", NAME+="%k"
就只会创建 /dev/mtdbb4 而不会创建/dev/mtdblock4
而类似:
KERNEL=="mtdblock4", NAME+="mtdbb4"
KERNEL=="mtdblock4", SYMLINK+="mtdbb4link"
是能够正常工作的。

3.2        关于udev.conf的语法
可能大家会发现,似乎没有什么周详文档描述udev.conf的写法,实际上从udevd的代码里能够看出:
udev.conf文档里面只会解析这三个参数:
udev_root 定义udev的目录路径
udev_rules 定义udev的规则文档的目录路径
udev_log 定义log的级别
也许以后会添加一些别的配置参数?

4         基本工作原理方面的问题
这部分主要是分析了一下udev的source code,对一些自己关心的问题的理解

4.1        Udevd如何获取内核的这些模块动态变化的信息
设备节点的创建,是通过sysfs接口分析dev文档取得设备节点 号,这个很显而易见。那么udevd是通过什么机制来得知内核里模块的变化情况,如何得知设备的插入移除情况呢?当然是通过hotplug机制了,那 hotplug又是怎么实现的?或说内核是如何通知用户空间一个事件的发生的呢?
答案是通过netlink socket通讯,在内核和用户空间之间传递信息。
内 核调用kobject_uevent函数发送netlink message给用户空间,这部分工作通常无需驱动去自己处理,在统一设备模型里面,在子系统这一层面,已将这部分代码处理好了,包括在设备对应的特定的 Kobject创建和移除的时候都会发送相应add和remove消息,当然前提是您在内核中配置了hotplug的支持。
Netlink socket作为一种内核和用户空间的通信方式,不但仅用在hotplug机制中,同样还应用在其他很多真正和网络相关的内核子系统中。
Udevd通过标准的socket机制,创建socket连接来获取内核广播的uevent事件 并解析这些uevent事件。

4.2        Udevd如何监控规则文档的变更
假如内核版本足够新的话,在规则文档发生变化的时候,udev也能够自动的重新应用这些规则,这得益于内核的inotify机制, inotify是一种文档系统的变化通知机制,如文档增加、删除等事件能够立即让用户态得知。
在udevd中,对inotify和udev的netlink socket文档描述符都进行了select的等待操作。有事件发生以后再进一步处理。

4.3        Udevtrigger的工作机制?
运行udevd以后,使用udevtrigger的时候,会把内核中已存在的设备的节点创建出来,那么他是怎么做到这一点的? 分析udevtrigger的代码能够看出:
udevtrigger通过向/sysfs 文档系统下现有设备的uevent节点写"add"字符串,从而触发uevent事件,使得udevd能够接收到这些事件,并创建buildin的设备驱动的设备节点连同任何已insmod的模块的设备节点。
所以,我们也能够手工用命令行来模拟这一过程:
/ # echo "add" > /sys/block/mtdblock2/uevent
/ #
/ # UEVENT[178.415520] add      /block/mtdblock2 (block)
但是,进一步看代码,您会发现,实际上,不管您往uevent里面写什么,都会触发add事件,这个从kernel内部对uevent属性的实现函数能够看出来,默认的实现是:
static ssize_t store_uevent(struct device *dev, struct device_attribute *attr,
                         const char *buf, size_t count)
{
       kobject_uevent(&dev->kobj, KOBJ_ADD);
       return count;
}
所以不管写的内容是什么,都是触发add操作,真遗憾,我还想通过这个属性实验remove的操作。 不知道这样限制的原因是什么。
而udevstart的实现方式和udevtrigger就不同了,他基本上是重复实现了udevd里面的机制,通过遍历sysfs,自己完成设备节点的创建,不通过udevd来完成。

4.4        其他
      udevd创建每一个节点的时候,都会fork出一个新的进程来单独完成这个节点的创建工作。
      Uevent_seqnum 用来标识当前的uevent事件的序号(已产生了多少uevent事件),您能够通过如下操作来查看:
$ cat /sys/kernel/uevent_seqnum
2673

linux用户空间程序udev使用总结 udev是linux kernel的设备管理器,在内核版本中kernel_3.10开始的版本中,使用udev已经代替了以前devfs、hotplug等功能,意味着它要处理添加/删除硬件时,所有的用户空间行为。 立即下载

相关推荐

大模型训练显存瘦身全记录:从ZeRO-3参数分区到CPU Offload的硬件协奏曲

本文详细解析了如何通过ZeRO-3参数分区与CPU/NVMe卸载技术优化大模型训练的显存使用。结合bf16混合精度与梯度累积等策略,实现在消费级GPU上高效训练百亿参数模型,显著提升硬件利用率与训练效率。

weixin_29051245的博客 435

udev原理及使用方法

本文参考以下两篇文章结合自己的理解总结。 https://blog.youkuaiyun.com/huangminilong/article/details/83782142 https://blog.youkuaiyun.com/chituhuan/article/details/52383610 一、udev概念: 1、udev是linux kernel的设备管理器,在最新的内核版本中kernel_3.10中udev已经代替了以前devfs、hotplug等功能,意味着它要处理添加/删除硬件时,所有的用户空间行为。 它能..

the_wan的博客 6050

从MCU到MPU:瑞萨RZN2L上手初体验,给Cortex-M工程师的Cortex-R52入门避坑指南

本文详细介绍了从MCU到MPU的过渡经验,特别是瑞萨RZN2L开发板的实战避坑指南。针对Cortex-M工程师转向Cortex-R52内核的挑战,文章深入解析了启动流程、内存管理、中断响应等九大本质差异,并提供了硬件设计陷阱和软件迁移的实用技巧,帮助开发者快速适应MPU开发环境。

weixin_29158413的博客 258

udev机制一之udev原理

问题背景:用户插入U盘后需要自动打开U盘目录,但是发现U盘每次挂载点都不一样,测试两个U盘的挂载点分别是/media/sda1和/media/sda4,所以就需要了解一下linux的udev机制了   这应该是对udev和mdev的一个理解,我们下次可以再深入一些. dev 和mdev 是两个使用uevent 机制处理热插拔问题的用户空间程序,两者的实现机理不同。udev 是基于netlink...

huangminilong的博客 6061

基于DE2-115红外解码实验

基于DE2-115红外解码实验   一、   功能描述 在同一个遥控电路中通常要使用实现不同的遥控功能或区分不同的机器类型, 这样就要求信号按一定的编码传送,编码则会由编码芯片或电路完成。对应于编码芯片通常会有相配对的解码芯片或包含解码模块的应用芯片。在实际的产品设计或业余电子制作中,编码芯片并一定能完成我们要求的功能,这时我们就需要了解所使用的编码芯片到底是如何编码的。只有知道编码方式,我...

乘风的博客 2515

深入Scrapy ItemLoader:打造优雅高效的Python爬虫数据清洗流水线

ItemLoader是 Scrapy 提供的声明式数据加载工具。它的核心理念是:将数据提取(从response中取原始值)和数据清洗/验证(处理空值、格式转换、默认值等)分离开。你可以把它想象成一个工厂流水线:原始零件(selector提取的文本)进入,经过一道道工序(输入处理器),组装成最终产品(Item字段)。首先在items.py中定义清晰的数据结构。使用搭配类型注释(虽然Scrapy自身不强制,但对人和IDE友好)。

2201_76125261的博客 68

udev是什么?

udev规则:位于/etc/udev/rules.d/目录下,用于定义设备的处理逻辑。事件处理:udev守护进程udevd监听这些uevent,并根据/etc/udev/rules.d/目录下的规则文件来决定如何响应这些事件。udev配置文件:位于/etc/udev/udev.conf,包含udev的基本配置信息,如设备文件的根目录、日志级别等。设备节点管理:根据规则,udev可以创建、删除或更改/dev目录下的设备节点,或者创建符号链接,以便更方便地访问设备。

peterhunter0320的博客 537

手把手教你学AI GPU UMD驱动软件开发专栏--1.1 UMD(用户模式驱动)的定义与定位

摘要:UMD(用户模式驱动)是GPU驱动架构中的关键组件,负责连接AI应用与硬件。作为运行在用户空间的动态链接库,UMD通过减少系统调用开销显著提升AI计算性能。其核心功能包括API转换、资源管理和命令生成,同时具备安全性高(崩溃不影响系统)、开发灵活等优势。随着AI发展,UMD已从图形驱动演变为深度学习加速的关键组件,支持TensorCore等硬件特性优化。未来趋势包括深度框架集成、硬件感知增强和虚拟化支持。UMD通过性能优化和安全隔离机制,成为现代AI计算基础设施的理想选择。

MHD0815的博客 171

Linux守护进程之udev-笔记

udev 是 Linux 系统中的一个守护进程,它的主要任务是管理所有的设备节点。你可以把它想象成一个设备的“管家”,负责识别、监控和管理连接到计算机上的硬件设备。当一个新设备被连接到系统时,`udev` 会立刻识别它,并为其创建相应的文件和目录,这样其他程序就可以使用这个设备了。

weixin_52129797的博客 1921

[企业AI落地] RAG 知识库系统在多租户环境下的细粒度权限隔离设计

多租户 RAG 系统真正的风险不只是搜不到,而是把不该看到的内容查出来、说出来、写回去。本文结合多客户售后知识助手场景,用元数据结构、向量检索过滤、回答策略和审计回写示例拆解租户、资源、检索、生成、审计五层权限边界。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 220

SAP DRC 是什么?一文读懂 SAP Document and Reporting Compliance 的定位、架构与落地案例

把视线拉长,会发现SAP DRC的价值并不仅是用来交差的工具。它更像是企业在全球化经营中建设的一套公共底座:既能以最低的重复成本去应对各国不断演进的监管要求,也能为财务数字化与供应链协同提供可信数据回路。依托本地与云的分层职责、与的生态联动、以及按国家不断更新的任务目录,企业可以将合规变成一种标准化、工程化、可持续运营的能力。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1654

udev原理

udev   2012-04-03 19:29:58|  分类: Linux |字号 订阅 第一、什么是udev?  这篇文章UDEV Primer给我们娓娓道来,花点时间预习一下是值得的。当然,不知道udev是什么也没关系,  把它当个助记符好了,有了下面的上路指南,可以节省很多时间。我们只需要树立一个信念:udev很简单! 嵌入式的udev应用尤其简单。

jeffreyst的专栏 2148

CCP消息格式

CCP消息格式 CCP协议的实现只依赖于两则CAN消息CRO(Command Receive Object)和DTO(Data Transmission Object),CCP消息统一采用8字节数据场,所有命令参数以及数据都被打包在8字节的数据场中。 1、CRO(命令接收对象) CRO是主设备向从设备发送的消息对象,包括命令代码及命令参数,结构如下: CCP一共28条命令,所以命令代码有28个。...

wsq119的博客 1206

udev文件系统的使用和基本工作原理分析

udev文件系统的使用和基本工作原理分析 分类: 40.系统集成相关 2008-01-09 13:05

佛系程序员 802

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

udev和驱动的自动加载

udev和驱动的自动加载 一、概述 在一般的驱动编写时,我们可以通过加载模块来向系统添加设备,也可以通过移除模块来删除设备。但是很多时候我们会设想到一种更加智能的的场景,即当设备被添加到系统后,驱动可以自动加载,这对于实际的可支持热插拔的硬件来说更有必要。比如说,我们插入一个USB无线网卡,那么对应的驱动就应该自动加载,而不是由用户来手动加载。要想实现这一工能,我们就需要依赖一个工具 — udev。在大多数嵌入式系统中通常使用mdev,其功能比udev要弱很多,同样的我们也可以移植udev到嵌入式系统上。

wit_732的博客 1979

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

理解和认识udev

 因为本身从事存储行业,在工作中多次碰到用户有这样的要求:我的linux系统中原来有一块SCSI硬盘,系统分配的设备文件是/dev/sda。现在新增加了一个外置的磁盘阵列,通过SCSI卡连接。但接上这个磁盘阵列后,/dev/sda变成了磁盘阵列的硬盘了,原来内置的SCSI硬盘变成了/dev/sdb,我希望将设备文件固定下来。   过去,我总是对用户说,这个比较麻烦,因为

不完美星空 627

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

嵌入式linux hotplug,linux热插拔之udev的使用方法

Udev相关的文章很多,本文的主要目的不是提供一个完整的教学文档,对其使用,只是给出网上现有的主要资源。着重分析其基本工作原理以及在使用中遇到的一些README文档没有明确说明的问题。1基本概念udev文件系统是针对2.6内核,提供一个基于用户空间的动态设备节点管理和命名的解决方案,网上关于为什么要使用udev文件系统,udev文件系统和devfs文件系统的比较,等等的文章已经很多了,如果你想了解...

weixin_27531501的博客 396
下一篇: devfs
wolfcmd1231
博客等级 码龄17年 15粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值