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

Linux设备驱动模型(一)

一、sysfs文件系统

sysfs是一个虚拟文件系统,将内核总的设备对象的链接关系,以文件目录的方式表示出来,并提对设备提供读写接口。

二、kobject

kobject是内核中对象表示的基类,可以认为所有的内核对象都是一个kobject
kobject单独存在的意义不大,通常是更高级的对象通过kobject加入到设备模型中
sysfs中的一个目录或文件,都对应于一个kobject,名字就是name字段

2个元素构成kobject在内核的层次结构,parent和kset
parent指向父对象(父节点)
一个kset是嵌入相同类型结构的kobject的集合(ldd3)
在这里插入图片描述
1、创建kobject
在这里插入图片描述
2、清零,memset
3、初始化
在这里插入图片描述
在这里插入图片描述

4、设置名字
在这里插入图片描述
5、引用计数操作
在这里插入图片描述

三、kset

kset是kobject的一个子类
kset是一类kobject的容器,
单独的kobject不一定在sysfs中显示,但是一个kset必然在sysfs中显示

在这里插入图片描述
1、kset API
在这里插入图片描述
引用计数操作
在这里插入图片描述
在这里插入图片描述

四、kset和kobject的关系

2个元素构成kobject在内核的层次结构,parent和kset
个人理解:
kobject是内核对象的基本单位,parent可以表示父对象的关系,子对象可以找到父对象,而父对象找不到子对象;
kset的引入解决了这个 问题,kset首先是一个kobject,list字段是一个双向循环链表,下面串了n个属于他的子类对象(kobject);
子对象的parent和kset分别指向父对象的kobject和kset

下图是一个最简单的kset和kobject的关系(来自ldd3)
在这里插入图片描述

五、ktype

release,和内核对象的销毁有关,
对象应用计数为0后会调用这个函数,但具体的release应该是与具体的子类对象有关(kobject的扩展类型,比如字符设备结构体,,自己猜测,先这么理解吧)
sys_ops,sysfs的操作函数集
default_attrs,kobject下面包含的文件属性集,这是一个二级指针,指向的是一个指针数组。
在这里插入图片描述

1、怎么添加的属性文件,以及读写操作
创建attribute数组,数组个数代表文件个数
实现sysfs_ops的show(读取)和store(写)回调函数实现读写操作
如果每个attribute读写有差别,可以根据第二个参数区分分别操作

在这里插入图片描述
在这里插入图片描述
2、调用接口,添加文件属性
??不知道会不会把默认的属性覆盖
在这里插入图片描述

在这里插入图片描述

其他sysfs的接口去linux/sysfs.h查询使用
二进制属性
符号链接
等等…

六、热插拔

当驱动程序将kobject注册到设备驱动模型时, 会产生这些事件。也就是当内核调用kobject_add()和kobject_del()丽数时,会产生热插拔事件。
产生热插拔事件后,内核会找到该kobject的kset(父对象的kset实例,如果父对象没有kset,那么会一直网上找,知道找到),执行其kset_uevent_ops

filter回调,过滤热插拔事件,实现回调如果返回0,则不产生热插拔事件

在这里插入图片描述


转载:Linux设备驱动之Kobject、Kset
添加链接描述

http://www.lryc.cn/news/65162.html

相关文章:

  • 【Python入门篇】——Python基础语法(标识符与运算符)
  • 扩展 VirtualBox 已分配磁盘的方法
  • 【LeetCode】646. 最长数对链
  • Makefile教程(Makefile的结构)
  • SpringMVC(后)SSM整合
  • 【博弈论】【第一章】博弈论导论
  • keil移植linux(makefile)
  • C++——类和对象(3)
  • itop-3568开发板驱动学习笔记(24)设备树(三)时钟实例分析
  • linux中使用docker部署微服务
  • 操作系统考试复习—第三章 优先级倒置 死锁问题
  • OpenHarmony送显流程分析
  • Java面试题字节流字符流
  • Self-Attention结构细节及计算过程
  • 在Ubuntu18.04中安装uWebSockets库
  • 【Fluent】接着上一次计算的结果继续计算,利用计算过程中得到的物理场(温度、速度、压力等)插值Interpolate文件初始化模型的方法
  • 第二十九章 使用消息订阅发布实现组件通信
  • Transformer的位置编码
  • Python学习简记
  • windows搭建一个FTP服务器超详细
  • u01使用率100%报错归档满的问题
  • Packet Tracer - 配置扩展 ACL - 场景 2
  • 最近面了12个人,发现这个测试基础题都答不上来...
  • JAVA基于Springboot框架的停车场管理系统开发实践和实现【附源码】
  • [230501] 4月29日考试真题第一篇|Temporary Pools
  • Qt中QString, int等数据转换以及Qt与Halcon联编程序打包
  • Android FlexboxLayout布局
  • GNU编码标准(七)发布过程 相关内容摘录
  • DX算法还原
  • 多媒体API