【Linux】驱动学习,先啃框架

news2025/1/29 13:55:30

目录

前言:

一、驱动设计

(1)面向对象:

(2)分层:

(3)分离:

二、驱动框架

(1)传统框架 

(2)总线设备驱动框架:

(3)设备树


前言:

经典环节:我一直深信,带着问题思考和实践,能够更容易理解并学习到

(1)驱动设计的核心思想

  • 面向对象
  • 分层
  • 分离

(2)驱动框架有哪些?

  • 传统框架
  • 总线设备驱动框架
  • 设备树

写作不易,如果有所帮助,多多支持,大家一同进步呀!前人的思想真的巧妙!!!

一、驱动设计

9.驱动设计的思想_面向对象_分层_分离_哔哩哔哩_bilibili

现如今大部分的驱动开发工作,是基于前人的工作上进行修改和完善,所以他所运用的驱动设计思想(前人的想法是真的巧妙),我们需要去学习和理解,之后就可以知道在什么地方完成相应的改进和完善。 

驱动的学习,是要认知到驱动的作用,在Linux系统上的驱动程序相较于裸机单片机上的驱动程序有什么区别,为什么要需要驱动框架之类的东西?可以参照阅读以下的博文:

【Linux】设备驱动简述,快速认知_希希雾里的博客-CSDN博客

经过前面的应用开发的学习,我们可以非常清晰的认知到,Linux系统需要处理非常多的设备,那么如何管理控制以及处理数据,就是一个比较大的问题。并且尤其是进一步的开发过程中,设备改动以及程序版本更迭,如何快速的开发以及兼容,就又是一个大的问题。

每一个设备都有相关的特点和属性,它就是一个个对象,之后就是将这个对象进行分层(类比,皮肤肌肉),最后就是对其更深层次的分解分离(同一类的共性和特性)。

驱动设计的思想,就如上述的,面向对象、分层以及分离

(1)面向对象:

字符设备驱动程序就是要抽象出一个file_operations结构体,面向对象(设备),提供具体实现的函数(open/read/write)。

(2)分层:

上下分层,举个例子,字符设备驱动程序

  • 上层实现硬件无关的操作,比如注册字符设备驱动
  • 下层实现硬件相关的操作,

(3)分离:

以LED驱动程序为例,如果更换一个引脚来控制LED。这里涉及到引脚初始化和设置,某一款芯片每一个GPIO操作都是类似的,这里就可以写出比较通用的硬件操作代码(chipY_gpio.c)。

对上图进行总结,board_A.c和board_B.c定义资源,chipY_gpio.c为硬件通用的代码,实现分离。

二、驱动框架

10.驱动进化之路_总线设备驱动模型_哔哩哔哩_bilibili

(1)传统框架 

这里使用到哪个引脚,怎么操作引脚,都写在代码中。

这里的框架,就不考虑拓展性,可以快速实现功能,但是涉及到引脚的修改时,就需要重新编译。

(2)总线设备驱动框架:

如果有一个设备(led)就要建立一个结构体(led_resource)来管理的话,会非常的麻烦

应用分离思想,进行进一步的拓展,引入platform_device/platform_driver,将资源(devise)与“驱动”(driver)分离开来。

按照上述分离之后,我们会发现还是会出现以下多个设备类型的定义,是否可以统一管理呢?这里就引入了总线(bus)的概念,对分离思想更好的实现。

对上述模型进行简化之后就如下图:设备驱动模型视频讲解-Linux笔记

Linux的设备驱动管理将运用对象思想对各式各样的设备、总线以及驱动进行管理。 

总线(bus):负责管理挂载对应总线的设备以及驱动;

设备(device):挂载在某个总线的物理设备。

驱动(driver):与特定设备相关的软件,负责初始化该设备以及提供一些操作该设备的操作方式。

类(class):对于具有相同功能的设备,归结到一种类别,进行分类管理。

(3)设备树

实际开发中,会有不同单板的.c资源文件,如果都放入Linux内核中,会导致内核臃肿不堪。

这里引入了dts配置文件来管理。dts文件会编译出dtb文件,之后传给内核,内核会解析dtb,产生一系列的platform_device/platform_driver文件。

 这里我们可以看到dtb文件和dts文件都是在内核外的,这样可以使得内核精简优雅。

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

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

相关文章

四.从零开始JVM实战高手-JVM监控及线上问题定位

前言 Java程序员面试JVM几乎比问,对于JVM监控,线上OOM,CPU负载100%等问题也是经常被问到,尽管在企业中不一定轮得到我们去处理线上问题,但是不管是为了面试还是为了应对开发那么对于JVM线上问题处理都是必须要去了解的…

二、软件工程——Modeling

1.Undestanding Requirements System Engineering(系统工程) !!!Requirements Engieering(需求建模) 1.Inception(开始):(确认利益相关者) 2.…

164道网络安全工程师面试题(附答案)

为了更好地帮助大家高薪就业,今天就给大家分享两份网络安全工程师面试题,一共有164道面试真题,希望它们能够帮助大家在面试中,少走一些弯路、更快拿到offer! 93道网络安全面试题 1、什么是SQL注入攻击 2、什么是XSS…

Linux中的特殊进程:idle进程(0号进程)、init进程(1号进程,被systemd 取代 )、kthreadd进程(2号进程)

文章目录 1. Linux中的三个特殊进程:2. idle进程、init进程、kthreadd进程的创建3 kthreadd进程3.1 kthreadd进程的启动3.2 kthreadd进程创建子进程3.3 kthreadd的工作流程总结 4. init进程4.1 init进程的启动 4. 总结参考 1. Linux中的三个特殊进程: i…

【作者踩坑总结0错版】vscode配置codeql-MacBook(M1/M2芯片-arm)

文章目录 前言一、codeql是什么二、安装必备工具2.1、安装codeql-cli2.2、安装codeql仓库2.3、桌面新建文件夹2.4、安装vscode 三、配置codeql环境变量四、vscode配置codeql插件4.1、下载测试靶场4.2、生成数据库文件(最难最多bug)4.3、vscode配置ql数据…

[入门必看]数据结构5.3:二叉树的遍历和线索二叉树

[入门必看]数据结构5.3:二叉树的遍历和线索二叉树 第五章 树与二叉树5.3 二叉树的遍历和线索二叉树知识总览5.3.1_1 二叉树的先中后序遍历5.3.1_2 二叉树的层次遍历5.3.1_3 由遍历序列构造二叉树5.3.2_1 线索二叉树的概念5.3.2_2 二叉树的线索化5.3.2_3 在线索二叉树…

服务(第十九篇)mysql的备份和恢复

备份的类型: ①物理备份:备份数据库的物理文件,数据文件和日志文件; 冷备份:关闭数据库进行的; 热备份:数据库处于运行中状态,依赖于日志文件; 温备份:数…

Cisco NX-OS Software Release 10.3(3)F - 网络操作系统软件

Cisco NX-OS Software Release 10.3(3)F - 网络操作系统软件 请访问原文链接:https://sysin.org/blog/cisco-nx-os-10/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Cisco NX-OS Cisco NX-OS 操作系统助力网络紧…

Golang中map基础

目录 map类型 声明和初始化 元素操作 大小和容量 并发问题 实现原理 注意 map类型 Go语言中的map类型是一种key-value(键值对)结构,用于存储一组无序的数据,其中键是唯一的,值可以相同或者不同。在Go语言的程序…

button 设置外观

导入图片 设置拉伸 设置按钮的FlatStyle属性为Flat 设置透明背景

先到先得先学,2023最新国内大厂最新Java面试八股文总结

“铜三铁四”接近尾声,身边被迫“毕业”或者主动在这个时间点跳槽的大佬基本该找到工作的都找到工作了,找不到的也大多数都已经躺平了(手动狗头),只剩一群“45度人”(卷不动,躺不平的人&#xf…

用于跨中心多边形分割的任务相关特征补充

文章目录 Task-Relevant Feature Replenishment for Cross-Centre Polyp Segmentation摘要本文方法Domain-Invariant Feature Decomposition (DIFD)Task-Relevant Feature ReplenishmentPolyp-Aware Adversarial Learning (PAAL)总损失函数 结果 Task-Relevant Feature Repleni…

AI翻译工具分享

LanguageX简介 冠军翻译引擎交互式翻译,为专业译者而生的新一代译者工具 自2017年神经网络机器翻译流行以来,“机器翻译替代人工翻译”的观点屡见不鲜。作为一个技术和语言背景结合的团队,LanguageX认为语言服务是高度复杂、需要创意的智力活动,并肩负着人类沟通的重要使命。La…

机器学习之k-means聚类二、啤酒聚类实现

文章目录 一、环境开发说明二、基于前篇理论实现1. 数据说明2. 具体实现流程a. 对数据进行标准化处理b. 使用手肘法进行K值得选择c. 算法实现,d.将聚类结果进行可视化e. 计算轮廓系数f. 轮廓系数可视化 三、 文中的完整代码四、不调包实现五、参考文献 一、环境开发…

MySQL-图形化界面工具 (下

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️树高千尺,落叶归根人生不易&…

ip route 和 route 命令

ip route 属于 iproute2 工具包;route 属于 net-tools 工具包;目前 ip route 使用较为广泛; 两个工具包的介绍请见 “iproute2 和 net-tools 介绍” 文章。 ip route命令介绍 ip route命令用于管理静态路由表。 linux 系统中,可…

【GigaGAN论文精读】Scaling up GANs for Text-to-Image Synthesis

【GigaGAN论文精读】Scaling up GANs for Text-to-Image Synthesis 0、前言Abstract1. Introduction(图放在文末)2. Related Works2.1Text-to-image synthesis.2.2GAN-based image synthesis.2.3Super-resolution for large-scale text-to-image models.…

【Java|基础篇】面向对象三大特性之封装

文章目录 1.前言2.什么是封装3.如何更好的封装4.封装的好处5.总结 1.前言 面向对象有三个特性:封装,继承和多态,本文主要讲解封装. 封装是面向对象编程的基本原则之一,它可以提高程序的安全性、稳定性、可维护性和可扩展性,减少了代码的冗余&#xff0c…

【框架源码】Spring源码核心注解Conditional和应用

1.什么是Conditional注解 Conditional来源于spring-context包下的一个注解。通过Conditional配置一些条件判断,当所有条件都满足时,被该Conditional注解标注的目标才会被Spring处理。 例如根据当前环境、系统属性、配置文件等条件来决定是否注册某个Bea…

股票量价关系基础知识3

成交量变化的表现形式 成交量变化的表现形式主要有以下几种 一、缩量 一般界定当日成交量低于前一交易日成交量10%以上为缩量。 缩量往往发生在上升途中的回调末期、上涨末期以及股价下跌的中后期。一般下跌趋势中的缩量阶段,往往意味着股价仍未见底,不能…