自动创建设备结点:udev机制的实现过程


什么是udev?

        在Linux系统中,/dev目录是用来存放设备文件的,每个文件指向一个系统设备文件,用户的程序可以通过使用这些文件来对真实硬件进行设备操作,但是在2.4内核时代,/dev下保存了所有kernel可以支持的硬件设备的设备文件,总计有近一万多个,而这些设备的大多数都是没有链接的设备,这样就极大的浪费了系统资源,而且/dev目录也显得十分混乱,而udev就是解决这些问题的,udev可以对/dev目录进行管理,动态的建立和删除设备文件,当设备链接系统时,udev自动建立相应的设备文件,而在断开时,会自动删除相应的设备文件,这样能够使/dev目录更加简洁,而且udev还可以运行用户编写命名规则,为不同设备编写文件名,这样可以更加方便的对设备进行管理

mdev和udev的区别

        mdev是busybox自带的一个简化版的udev,常用于一些嵌入式的操作系统中
        udev是自动创建设备结点的机制,创建设备结点的逻辑在用户空间

udev的工作原理

        在系统内核中有设备进行添加或者删除设备时,系统内核在检测到之后会生成一个hotplug event,并查找hotplug中的设备程序,若udev已经启动,内核会通知udev进程进行查询设备结点的相关信息并创建结点

udev的相关api及其用途

引用库:#include<linux/device.h>
1.向上提交目录信息
struct class * class_create(struct module *owner,const char *name );
功能:申请一个设备类并初始化,向上提交目录信息
参数:owner:指向当前内核模块自身的一个模块指针,填写THIS_MODULEname:向上提交的目录名返回值:成功返回申请的struct class对象空间首地址,失败返回错误码指针2.销毁目录
void class_destroy(struct class *cls)
功能:销毁目录信息
参数:cls:指向class对象的指针
返回值:无3.向上提交节点信息
struct device *device_create(struct class *class, struct device *parent,dev_t devt, void *drvdata, const char *fmt, ...)
功能:创建一个设备对象,向上提交设备节点信息
参数:
cls:向上提交目录时的到的类对象指针
parent:当前申请的对象前一个节点的地址,不知道就填 NULL
devt:设备号    主设备号<<20|次设备号/*MKDEV(主设备号,次设备号):根据主设备号和次设备号得到设备号MAJOR(dev):根据设备号获取主设备号MINOR(dev):根据设备号获取次设备号*/
dridata:申请的device对象的私有数据,填写NULL
fmt:向上提交的设备节点名
...:不定长参数   
返回值:成功返回申请到的device对象首地址,失败返回错误码指针,指向4K预留空间4.销毁设备节点信息
void device_destroy(struct class *class, dev_t devt)
功能:销毁设备节点信息
参数:
class:向上提交目录时得到的类对象指针
devt:向上提交设备节点信息时提交的设备号
返回值:无

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

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

相关文章

Prometheus+Grafana可视化监控【MySQL状态】

文章目录 一、Prometheus监控MySQL二、Grafana添加MySQL监控模板 PrometheusGrafana部署请参考上篇文章: PrometheusGrafana部署: 一、Prometheus监控MySQL 1、创建MySQL监控用户 mysql> create user "prometheus""%" identified by NTQ34tg*19VF; m…

Sharding-JDBC分库分表-分布式事务-5

分布式事务 Sharding JDBC事务介绍 分库分表必然会涉及到分布式事务的问题&#xff0c;关于这方面&#xff0c;sharding JDBC为用户提供了两种分布式事务解决方案&#xff1a;XA事务和BASE事务&#xff0c;这两个的区别是&#xff1a;XA事务&#xff0c;追求强一致性&#xf…

Linux——环境变量

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——环境变量 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;环境变量(environment variables)一般是指在操作系统中用来指定操作…

Redis优化 RDB AOF持久化

---------------------- Redis 高可用 ---------------------------------------- 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis语境…

每日一博 - 闲聊Https工作原理

文章目录 HTTPS工作原理数据的加密和解密与HTTP相比&#xff0c;HTTPS增加了多少性能开销&#xff1f;Flow小结 HTTPS工作原理 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是 Hypertext Transfer Protocol&#xff08;HTTP&#xff09;的扩展。HTTPS使用…

【工具】【Charles】rewrite:重写

GET请求 protocol/host/port 可填可不填&#xff0c;可填&#xff08;*&#xff09; path需完整匹配&#xff0c;必填 Query&#xff1a;有填写需完整匹配&#xff0c;可填可不填&#xff0c;可填&#xff08;*&#xff09; 匹配规则&#xff1a; Type&#xff1a;修改请求参…

使用C语言EasyX 创建动态爱心背景

简介 在计算机图形学的世界中&#xff0c;有很多方法可以使程序的界面更加吸引人。在本篇博客中&#xff0c;我将向大家介绍如何使用 EasyX 图形库在 C 中创建一个动态的爱心背景。这不仅是一个简单的动画效果&#xff0c;它还包括背景的星星、旋转的心形以及一个美观的背景渐…

抖音中文点选验证码识别方案

最近研究了一下抖音中文点选验证码的识别&#xff0c;居然正确率高达98%。 首先我们来看一下效果 一、识别方法 1、数据集准备 我们需要借助爬虫去下载大量的验证码图片。这些有两种图片&#xff0c;一种是小图&#xff0c;包含需要点选的中文和顺序&#xff0c;还有一种是大…

Python基于Flask的高校舆情分析,舆情监控可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 运行效果图 基于Python的微博大数据舆情分析&#xff0c;舆论情感分析可视化系统 系统介绍 微博舆情分析系…

如何使用element-ui相关组件如:el-select,el-table,el-switch,el-pagination,el-dialog

element-ui 官方链接&#xff1a; 组件 | Elementhttps://element.eleme.cn/#/zh-CN/component/installation el-select <!-- 用户类型选择框<template> 看情况使用value选择框绑定的值 命名必须是value不能改v-for"item in Options" options数据源来自于…

【Unity基础】2.网格材质贴图与资源打包

【Unity基础】2.网格材质贴图与资源打包 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;网格材质纹理 第一次接触3D物体的话&#xff0c;会觉得好神奇啊&#xff0c;这个物体究竟是由什么组…

探索工业4.0:数字孪生如何重塑工业生产流程?

在过去的几十年里&#xff0c;工业生产经历了从机械化、自动化到数字化的巨大转变。随着工业4.0的到来&#xff0c;我们正处于第四次工业革命的边缘&#xff0c;这次革命将由数字孪生技术引领。本文将深入探讨数字孪生在工业生产中的应用和潜力。 数字孪生&#xff08;Digital …