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

【梦想终会实现】Linux驱动学习5

加油加油坚持住!

1、

Linux驱动模型:驱动模型即将各模型中共有的部分抽象成C结构体。Linux2.4版本前无驱动模型的概念,每个驱动写的代码因人而异,随后为规范书写方式,发明了驱动模型,即提取公共信息组成一个个类,为添加设备和驱动提供统一的接口,使得开发变得简单化、规范化,但驱动本身仍然存在开发难度,设备(触摸屏、蓝牙等)的最底层代码不需要驱动工程师搞,Linux设备模型也不需要驱动工程师搞,驱动工程师需要做的是把二者结合。早期的驱动是需要手动inmod的,有驱动模型后直接注册即可。

驱动模型分为四类:类、总线、设备、驱动、Kobject、sysfs、udev。

深入理解Linux设备模型与驱动开发-CSDN博客 (五星推荐)

比如led,rtc,beep,key这类结构简单的设备,它们的控制不需要时序,它们没有相应的物理总线。所以linux内核不会为它们创建驱动总线。为了是这部分设备的驱动开发也能够遵循设备驱动模型,linux内核引入了一种虚拟的总线——平台总线(platform bus)。

2、Linux的底层模型(主要是写内核的人写的,搞驱动的一般不用)

基本结构体Kobject:各类对象的最小单元,对象引用计数(kref)、维护对象链表(entry、parent)、对象上锁(kset)、对用户空间的描述(ktype)。

kobj_type:提供在sysfs下的操作。attribute:sysfs下的属性;sysfs_ops:对象在sysfs下的操作方法。

kset:描述sysfs下的目录关系。

驱动开发注意包含和引用的关系,包含是结构体成员,绑定是指针。如

struct kobject {const char		*name;struct list_head	entry;   // 上下节点    包含关系struct kobject		*parent; // 上下层之间   绑定关系struct kset		*kset;       // 上锁        绑定关系struct kobj_type	*ktype;struct sysfs_dirent	*sd;struct kref		kref;        // 对象引用计数unsigned int state_initialized:1;unsigned int state_in_sysfs:1;unsigned int state_add_uevent_sent:1;unsigned int state_remove_uevent_sent:1;unsigned int uevent_suppress:1;
};

3、Linux的上层模型

device_driver是驱动程序在内核驱动框架中的抽象。

name:驱动程序的名字,用于驱动与对应设备的匹配。

probe:用于检测此设备是否可以用本驱动,毕竟不同厂家的设备对应的驱动是不同的。

内核中驱动会被类和总线双重管理。

模型思想即面向对象的思想,结构体包一层结构体即类继承类,有一个基类(device_driver),然后创建子类(usb_device)。驱动开发要有思想复杂度!一层套一层。

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

相关文章:

  • Spring 核心技术解析【纯干货版】-Spring 数据访问模块 Spring-Jdbc
  • Docker 安装详细教程(适用于CentOS 7 系统)
  • Mac本地部署DeekSeek-R1下载太慢怎么办?
  • 《Angular之image loading 404》
  • JavaScript前后端交互-AJAX/fetch
  • ZooKeeper单节点详细部署流程
  • 流浪地球发动机启动问题解析与实现
  • Java 注解使用教程
  • 网络安全学习
  • 4 前端前置技术(上):AJAX技术、Axios技术(前端发送请求)
  • 2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题3)-网络部分解析-附详细代码
  • ASP.NET Core中间件的概念及基本使用
  • 每日Attention学习22——Inverted Residual RWKV
  • 使用jmeter进行压力测试
  • LQB(0)-python-基础知识
  • 每日Attention学习18——Grouped Attention Gate
  • QT 窗口A覆盖窗口B时,窗口B接受不到鼠标事件
  • Unity安装教学与相关问题
  • [Python人工智能] 四十九.PyTorch入门 (4)利用基础模块构建神经网络并实现分类预测
  • 实现一个 LRU 风格的缓存类
  • 【蓝桥杯嵌入式】4_key:单击+长按+双击
  • 深入理解 C# 与.NET 框架
  • 10. 神经网络(二.多层神经网络模型)
  • spark 性能调优 (一):执行计划
  • “卫星-无人机-地面”遥感数据快速使用及地物含量计算的实现方法
  • 杨氏数组中查找某一数值是否存在
  • c语言对应汇编写法(以中微单片机举例)
  • 详解CSS `clear` 属性及其各个选项
  • 算法设计与分析三级项目--管道铺设系统
  • Page Assist - 本地Deepseek模型 Web UI 的安装和使用