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

目录

前言:

一、驱动设计

(1)面向对象:

(2)分层:

(3)分离:

二、驱动框架

(1)传统框架 

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

(3)设备树


前言:

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

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

  • 面向对象
  • 分层
  • 分离

(2)驱动框架有哪些?

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

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

参考学习: 

1.韦老师课程 

2.Linux笔记 https://xuesong.blog.csdn.net/article/details/109522945?spm=1001.2014.3001.5502

一、驱动设计

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

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

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

https://blog.csdn.net/weixin_42373086/article/details/129764065?spm=1001.2014.3001.5501

经过前面的应用开发的学习,我们可以非常清晰的认知到,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)的概念,对分离思想更好的实现。

对上述模型进行简化之后就如下图:https://live.csdn.net/v/269203?spm=1001.2014.3001.5501

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

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

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

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

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

Bus如何管理device和driver呢?

subsys_private,它是总线的驱动核心的私有数据。我们可以看到subsys_private数据结构下有两个链表,一个用于挂载device,一个用于挂载driver,从而实现对device和driver的管理。

(3)设备树

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32单片机蓝牙APP自动伸缩遮阳棚雨伞雨滴角度温度光强控制

实践制作DIY- GC0130-蓝牙APP自动伸缩遮阳棚 一、功能说明: 基于STM32单片机设计-蓝牙APP自动伸缩遮阳棚 二、功能介绍: 基于STM32F103C系列,LCD1602显示器,光敏电阻采集光强,雨滴传感器,ULN2003控制步进…

chatgpt赋能Python-pythonddos

PythonDDoS:了解一下这种利用Python语言的攻击方式 PythonDDoS(Python分布式拒绝服务攻击)是一种利用Python语言编写的DDoS攻击技术,它利用了Python的强大处理能力,可以构建高效的攻击工具,让攻击者能够轻…

Linux基本指令3

目录 一.基本常用指令 指令1:find命令: 指令2:which命令: 指令3:alias命令: 指令4:whereis which,find,whereis这三个搜索命令的区别: 指令5&#xff…

扫眼球换“世界币” ChatGPT之父“剥削穷人”?

ChatGPT火爆全球后, 山姆奥特曼(Sam Altman)创立的加密项目Worldcoin(世界币)重回大众视野。这个项目诞生于2年前。那时,埋头迭代GPT模型的OpenAI还未如此知名,该公司的CEO 山姆奥特曼也位列科技…

【中医推荐】33部中医书籍,中医医书精品(在线免费阅读),值得珍藏的国粹,涵盖中药、针灸、推拿、按摩、拔罐、气功,食疗等诸多领域

中医诞生于原始社会,春秋战国时期中医理论已基本形成,之后历代均有总结发展。除此之外对汉字文化圈国家影响深远,如日本医学、韩国韩医学、朝鲜高丽医学、越南东医学等都是以中医为基础发展起来的。 中医承载着中国古代人民同疾病作斗争的经…

因为一个Bug,差点损失了100w

大家好,我是洋子 最近在做单接口的性能测试比较多,在压测过程发现了一个比较有意思的问题,拿出来和大家分享一下 背景是这样的,最近在搞线上的抽奖活动,压测的对象是一个抽奖接口,主要的逻辑见程序的流程…

Vmware Linux磁盘空间扩容

Linux磁盘空间扩容 VMware虚拟机中配置(1)进入虚拟机设置界面,选择扩展磁盘容量。(2) 本次是在原来30G的基础上扩展为50G。 Linux中设置(1) 可以看出sda3是根分区,下面按照博客提示&…

KVM(二)命令行新建虚拟机

目录 一、准备工作 二、新建虚拟机 2.1 文件准备 2.2 正式安装 2.3 时区设置 2.4 安装设置 2.5 设置root用户密码 2.6 vm2安装完成 三、进入虚拟机vm2 四、网络设置 五、参考链接 若还未部署KVM,请参考第一节: KVM(一)…

python数据可视化显示(附代码)

Python是一种非常流行的编程语言,具有广泛的应用领域,包括数据可视化。在数据可视化中,Python提供了多种工具来帮助用户创建各种类型的图表、图形和可视化效果。本文将介绍Python数据可视化的基本概念、工具和技术,并提供代码示例…

(转载)MATLAB智能算法30个案例分析(1)——遗传算法工具箱

以下内容大部分来源于《MATLAB智能算法30个案例分析》,仅为学习交流所用。 1理论基础 1.1遗传算法概述 遗传算法(genetic algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法是把问题参数编码为染色体,再利用迭代…

论文阅读_语音合成_Spear-TTS

论文信息 number headings: auto, first-level 2, max 4, _.1.1 name_en: Speak, Read and Prompt: High-Fidelity Text-to-Speech with Minimal Supervision name_ch: 说话、阅读和提示:少量监督实现高保真文本转语音 paper_addr: http://arxiv.org/abs/2302.0354…

windows11下系统睡眠状态被UpdateOrchestrator唤醒的解决方案

windows11下系统睡眠状态被UpdateOrchestrator唤醒的解决方案 一、问题排查二、问题解决 一、问题排查 最近win11更新后发现会偶尔在睡眠状态下唤醒,CMD中输入powercfg -lastwake命令可以查看唤醒源程序 这里显示唤醒是按下了电源按钮,符合我此次唤醒操…

验证知识点总结

1、常用总线对比 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) 高…

系统分析师(一)软考简介

目录 1.证书简介2.考试简介3.考试报名4.各地考试机构5.考试要求6.考试教程用书 考试时间: 每年5月的最后一个周六 1.证书简介 ​ 软考全称是计算机技术与软件专业技术资格(水平)考试,是由国家人力资源和社会保障部、工业和信息化部…

华丽家族股东大会21项议案全被否

5月17日晚间,A股上市公司华丽家族发布关于收到上海证券交易所监管工作函的公告,交易所对相关事项提出监管要求。 在此之前,华丽家族当天召开股东大会,21项股东大会议案全部未通过。历史上,股东大会议案全部被否的情形…

【数据结构】红黑树

文章目录 1. 红黑树的概念与性质1.1 概念1.2 性质 2. 红黑树的实现2.1 节点和结构的定义2.2 红黑树的节点插入(重点!!!!) 3. 红黑树的验证与性能分析3.1红黑树的验证3.2红黑树的性能分析——与AVL树的对比3.3红黑树的应用 1. 红黑…

ECharts

ECharts 一、引言ECharts介绍快速上手 一、引言 ECharts介绍 ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。ECharts最初由百度团队开源,并于2018年初捐赠给A…

一文读懂!RK3668和RK3568有什么区别?

​ 从上图可以看出,RK3568和RK3566 CPU均为四核Cortex-A55架构,GPU为Mali-G522EE,内置NPU,可提供1T算力,支持DDR及CPU Cache全链路ECC等,RK366与RK3568最大区别的是RK3568具有PCIe接口、双千兆以太网和更…

如何轻松掌握接口测试——POST请求和COOKIE使用技巧?

目录 引言 请求方法: POST请求方法:添加资源(对服务端已存在的资源也可以做修改和删除操作) 实战练习 实战练习2 COOKIE: Status Code:协议状态码 接口文档 结语 引言 对于初学者或者没有接口测试…

box的符号距离函数

序 能用解析的方法算的,叫符号距离函数。只能数值解的,叫符号距离场。 它就是横平竖直的几个平面,点到平面的距离是很好算的。 初步认识 有个网页,可以玩一玩: About | Physics Simulation in Visual Computing (…