03_class创建device创建_kobject_uevent发送

news2024/11/14 17:25:52

总结

根据之前的kobject知道 /sys/目录下的每个文件夹都是一个 kobject的对象
使用class_create() 创建 /sys/class/xxx目录 同时返回class对象
使用device_create() 创建/sys/class/xxx/yyy目录 和创建/dev/yyy的文件节点 同时返回device对象
class和device 都间接继承于kobject 所以kobject是总线、驱动、设备的三种对象的一个基类
在这里插入图片描述

细节分析

uevent机制

用户空间和内核沟通的桥梁
在linux内核空间使用kobject_uevent()函数 konject对象发送信息到 用户空间的udev或mdev守护进程
udev或mdev守护进程解析发过来的包 根据规则进行相应操作
如上图中 device_create的时候创建了device对象(间接继承于kobject结构体)
所以device对象有目录在 /sys/文件夹下 同时使用kobject_uevent() 让用户空间创建/dev/yyy文件节点

class 设备大管家

在系统启动的初期就会有文件夹 /sys/class
下面看看是怎么创建出来的
init/main.c里:

kernel_init
    ->kernel_init_freeable
        ->do_basic_setup
            ->driver_init

这是driver_init函数:创建各种kobject对象 在/sys/下映射各种目录

void __init driver_init(void)
{
    /* These are the core pieces */
    devtmpfs_init();
    devices_init();/*device、dev目录*/
    buses_init();/*bus目录*/
    classes_init();/*class目录*/
    firmware_init();/*firmware目录*/
    hypervisor_init();/*hypervisor目录*/
    /* These are also core pieces, but must come after the
     * core core pieces.
     */
    platform_bus_init();
    cpu_dev_init();
    memory_dev_init();
    container_dev_init();
    of_core_init();
}

下面来看看平时常用的 probe成功后调用的两个函数 class_create device_create 都干了什么
class_create()

/sys/class目录 对硬件设备进行管理
和udev守护进程进行协作,自动创建设备节点    以前创建设备节点需要在用户空间手动mknode
class_create()创建目录 /sys/class/xxx   同时返回class对象
device_create()创建目录 创建/sys/class/xxx/yyy目录 同时返回device对象
虽然class_create()device_create() 都能创建目录项
但device_create()不止创建了 /sys/class/xxx/yyy  还在yyy目录下创建了属性文件(/sys/class/xxx/yyy/dev)
属性文件记录硬件设备的设备号  
创建完属性文件后 继续使用kobject_uevent()发送驱动添加的消息 给用户空间的udev守护进程
这是udev会找到创建的yyy 读取dev这个设备属性文件夹 获得硬件设备的设备号
udev 调用mknod()函数  来创建/dev/yyy的设备节点


class_create()函数分析
调用这个函数的本质是创建一个新的kobject对象 kobject对象映射目录文件为/sys/class/xxx/
同时返回的class结构体  class结构体是有间接继承kobject的对象
class_create(owner, name)   
	__class_create(owner, name, &__key);
	owner:一般设置为THIS_MODULE
	name:kobject对象的名字


device_create()函数
返回的device结构体 也间接继承了kobject对象
device *device_create(struct class *class, struct device *parent,
		dev_t devt, void *drvdata, const char *fmt, ...)

- class:新构建的class
- parent:新kobject对象的上一层节点,一般为NULL
- dev_t:属性文件记录该设备号
- drvdata:私有数据,一般为NULL
- fmt:变参参数,一般用来设置kobject对象的名字

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

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

相关文章

【老卫搞机】135期:华为开发者联盟社区2022年牛人之星奖品开箱!

首先祝大家兔年大吉,身体安康,钱兔似锦!今天咱们来开箱一件特殊的奖品,来自华为开发者联盟社区的新年祝福——2022年牛人之星。 华为有钱!惯例用的是顺丰快递,各位看一下这里面是有很多件的 有这两件。第一…

三、TCP/IP---ARP和ICMP协议

ARP协议 简介:号称TCP/IP中最不安全的协议,安全工具,黑客工具大多数基于ARP协议。它是地址解析协议,用于实现从IP到MAC地址的映射,即询问目标Ip对应的MAC地址是多少,局域网通信不仅需要源目地址封装&#…

学习率衰减、局部最优、Batch归一化、Softmax回归

目录1.学习率衰减(Learning rate decay)在训练初期,梯度下降的步伐大一点,开始收敛的时候,小一些的学习率能让步伐小一些。1 epoch 遍历一遍训练集学习率衰减公式:例:假设衰减率decayrate 1,0.2epochNumα…

蓝桥杯-刷题-补基础

十道入门题 题目来源,题目,简单解析,代码,输入输出 目录 前言 一,汉诺塔 二,判断闰年 三,大写变小写 四,破译密码 五,反向数相加 六,Excel表中的列号 七,饮料兑换 八,角谷猜想 九,数字统计…

小喵2022年的年度总结,啊滴妈呀,开了眼了。

宝子,你不点个赞吗?不评个论吗?不收个藏吗? 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重…

Qt扫盲- QUdpSocket 类理论总结

QUdpSocket 类理论总结一、概述二、使用流程三、QNetworkDatagram 简述一、概述 UDP (User Datagram Protocol)是一种轻量级的、不可靠的、面向数据报的、无连接的协议。当可靠性不重要时,可以使用它。QUdpSocket是QAbstractSocket的子类,允许发送和接收…

SpringBoot+Vue--token,vue导航守卫,axios拦截器-笔记3

自己学习记录,写的不详细,没有误导,不想误导 大概的登录逻辑,前后端完整实现: 1.用户名,密码验证成功后,后端签发token返回给前端 2.前端把token保存到本地存储 3.每次请求前,通过axios请求拦截器,统一发送token 4.通过Vue导航守卫,和axios响应拦截器,统一保护页面 新建个…

【华为上机真题 2023】事件推送

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

机制设计原理与应用(四)预算可行的拍卖机制

文章目录4 预算可行的拍卖机制4.1 特征4.2 使用案例4.3 拍卖设计问题4.4 单调次模函数(Monotone Submodular Function)4.4.1 分配算法4.4.2 关键支付计划4.4.3 特性4.5 在线预算可行的拍卖机制4.5.1 Secretary Problem(A Optimal Stopping Problem)4.5.2…

如何与他人交流-第5期

上期我们讲了打破预期,顺应主体这期我们来讲讲如何建立亲和关系(关系侧)我的别人交流,只有在不把别人当成对象(工具人),而是把对方当成主体的情况下(让别人感受到尊重),这是相互尊重的终极本质,也是唯一方法.把别人当人看.认同对方,对方也会认同你.自信从何而来自信本意为相信自…

信息论复习—连续信源、信道及容量

目录 连续信源的熵: 连续信源离散化后的概率空间: 连续信源离散化后的熵: 连续信源的绝对熵: 连续信源的相对熵: 连续信源的条件熵: 连续信源的相对条件熵: 连续信源相对熵的最大化&#…

李宏毅ML-卷积神经网络CNN

李宏毅ML-卷积神经网络CNN 文章目录李宏毅ML-卷积神经网络CNNImage ClassificationConvolutional Layer1. Neural Version StoryReceptive FieldParameter Sharing2. Filter Version StoryFilterParameter Sharing3. Summary of Two VersionsPooling LayerThe Whole CNNDrawbac…

Hyperbolic geometry (双曲几何简介)

ContentsManifolds: A Gentle IntroductionManifoldsTangent SpacesMetric TensorRiemannian Manifolds (黎曼流形)Hyperbolic Geometry and Poincar EmbeddingsCurvature (曲率)Euclidean and Non-Euclidean GeometriesHyperbolic SpaceMinkowski SpaceHyperboloid (双曲面)Th…

树和森林(快来瞧)

森林的定义 森林是由多颗互不相交的树所构成的树的集合,即森林包含多棵树,每一棵树都有自己的根结点。一棵树也可以看成森林。 树的表示及基本操作 1.树(一般树)的表示方法 1.1树的双亲表示法 树的双亲表示法是将树的各个节点…

现场工程师出手-PCAPHub与云SSH隧道稳妥实现异地LAN工业联测

在去年,因为众所周知的因素影响,项目的甲方主动提出延缓设备的交付。作为乙方,尽管项目延缓是甲方提出的,但依旧希望按期交付,这样才能回款,熬过一年。其实,2022年初,几类传感器、压…

S7-1200PLC与ABB机器人进行PROFINET通信的具体方法和步骤详解

S7-1200PLC与ABB机器人进行PROFINET通信的具体方法和步骤详解 1. TIA博途一侧的配置: 当我们安装好RobotStudio软件后,可以在以下的目录中C:\ProgramData\ABB Industrial IT\Robotics IT\DistributionPackages\ABB.RobotWare-6.08.0134\RobotPackages\RobotWare_RPK_6.08.013…

【JavaWeb】JavaScript基础语法(上)

✨哈喽,进来的小伙伴们,你们好耶!✨ 🛰️🛰️系列专栏:【JavaWeb】 ✈️✈️本篇内容:JavaScript基础语法(上)! 🚀🚀代码托管平台github:JavaWeb代码存放仓库&#xff01…

ESP32设备驱动-TSL2561亮度传感器驱动

TSL2561亮度传感器驱动 1、TSL2561介绍 TSL2560 和 TSL2561 是第二代环境光传感器器件。每个都包含两个集成模数转换器 (ADC),用于集成来自两个光电二极管的电流。两个通道的整合同时发生。转换周期完成后,转换结果分别传送到通道 0 和通道 1 数据寄存器。传输是双缓冲的,…

【头歌】单链表的基本操作

单链表的基本操作第1关:单链表的插入操作任务描述本关任务:编写单链表的初始化、插入、遍历三个操作函数。相关知识链表是线性表的链式存储结构的别称,特点是以“指针”指示后继元素,因此线性表的元素可以存储在存储器中任意一组存…

Linux常用命令——speedtest-cli命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) speedtest-cli 命令行下测试服务器外网速度 补充说明 speedtest-cli是一个使用python编写的命令行脚本,通过调用speedtest.net测试上下行的接口来完成速度测试,最后我会测试运维生存时间…