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

这篇具有很好参考价值的文章主要介绍了【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),代表一个对象。(如何抽象出合适的结构体,这个比较考验内功,哈哈)

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

(2)分层:

当应对多个板子,都要调用同一个驱动程序时,如何使得驱动程序支持多个板子呢?这里就应用到了分层的思想,举个例子,字符设备驱动程序。

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

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

(3)分离:

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

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

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

这里抽象出一个结构体led_resource来表示具体资源有哪些。

二、驱动框架

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

(1)传统框架 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Bus如何管理device和driver呢?

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

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

(3)设备树

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

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

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

 这里我们可以看到dtb文件和dts文件都是在内核外的,这样可以使得内核精简优雅。文章来源地址https://www.toymoban.com/news/detail-453588.html

到了这里,关于【Linux】驱动学习,先啃框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux tcp/ip 网路协议栈学习-00 前言

    Linux tcp/ip 网路协议栈学习-00 前言 目录 Linux  tcp/ip 网路协议栈学习-00 前言 (1)预备知识  (2)前置知识 (3)学习目标 (4)总结     (1)预备知识  好工具事半功倍,做任何事情都需要有方法和工具,同样,阅读 Linux 内核源码也是如此。由于当前内核源码非常庞大,学习上,不能一

    2024年04月26日
    浏览(29)
  • 《Git入门实践教程》前言+目录

    版本控制系统(VCS)在项目开发中异常重要,但和在校大学生的交流中知道,这个重要方向并未受到重视。具备这一技能,既是项目开发能力的体现,也可为各种面试加码。在学习体验后知道,Git多样化平台、多种操作方式、丰富的资源为业内人士提供了方便的同时,也造成

    2024年02月10日
    浏览(50)
  • linux内核网络驱动框架(linux驱动开发篇)

    网络驱动的核心: 1、就是初始化 net_device 结构体中的各个成员变量, 2、然后将初始化完成以后的 net_device 注册到 Linux 内核中 1、网络设备(用net_device结构体) 2、网络设备的操作集( net_device_ops结构体 ) 3、sk_buff结构体 网络是分层的,对于应用层而言不用关系具体的底层是

    2023年04月08日
    浏览(69)
  • 【Linux驱动】Linux--V4L2视频驱动框架

    v4l2驱动框架主要的对象有video_device、v4l2_device、v4l2_subdev、videobuf video_device 一个字符设备,为用户空间提供设备节点(/dev/videox),提供系统调用的相关操作(open、ioctl…) v4l2_device 嵌入到video_device中,表示一个v4l2设备的实例 v4l2_subdev 依附在v4l2_device之下,并表示一个v4l2设备的子

    2024年02月14日
    浏览(22)
  • Linux驱动框架

    #include linux/module.h #include linux/kernel.h #include linux/fs.h #include linux/init.h #include linux/delay.h #include asm/uaccess.h #include asm/irq.h #include asm/io.h #include asm/arch/regs-gpio.h #include asm/hardware.h static struct class *firstdrv_class; static struct class_device    *firstdrv_class_dev; static int first_drv_open(struct inode *in

    2023年04月20日
    浏览(24)
  • Linux 网络驱动-MAC、PHY层驱动框架(三)

       I.MX6ULL 有两个 10/100M 的网络 MAC 外设,因此 I.MX6ULL 网络驱动主要就是这两个网络 MAC 外设的驱动。这两个外设的驱动都是一样的,我们分析其 中一个就行了,首先肯定是设备树, NXP 的 I.MX 系 列 SOC 网 络 绑 定 文 档 为 Documentation/devicetree/bindings/net/fsl-fec.txt,此绑定文档描

    2024年02月09日
    浏览(31)
  • Linux内核驱动 --- CCF框架 provider驱动的编写

    复制上节内容中对Provider驱动编写流程的总结: 1)分析硬件的clock tree,按照上面所描述的分类,将这些clock分类。 2)将clock tree在DTS中描述出来,需要注意以下几2点: 3)对于不能由clock framework core处理的clock,需要在driver中使用struct of_device_id进行匹配,并在初始化时,调用

    2024年02月07日
    浏览(36)
  • Linux下的FrameBuffer驱动框架

    一、RGB LCD经典显示器件介绍 : 1、LCD屏幕的重要属性参数 : ① 分辨率 :也就是屏幕上的像素点的个数; ② 像素格式 :即单个像素点RGB三种颜色的表达方式,包括RGB888、ARGB8888和RGB565等。 ③ LCD屏幕硬件接口 : 这里指的是RGB LCD排线接口 , 如下图所示 : R[7:0]、G[7:0]和B[

    2024年01月16日
    浏览(25)
  • Linux -- 字符设备驱动--LED的驱动开发(初级框架)

    看原理图确定引脚,确定引脚输出什么电平才能点亮 / 熄灭 LED 看主芯片手册,确定寄存器操作方法:哪些寄存器?哪些位?地址是? 编写驱动:先写框架,再写硬件操作的代码 注意 :在芯片手册中确定的寄存器地址被称为 物理地址 ,在 Linux 内核中无法直接使用。 需要使

    2024年04月28日
    浏览(22)
  • linux Regulator电源设备驱动框架

            调节器Regulator是为其他设备供电的设备。由regulator供电的设备称为消费者。提供调节器的芯片称为电源集成电路PMIC。调节器可以启用/禁用其输出,也可以控制其输出电压和电流。         生产者是产生调节电压电流的设备,这个设备的名称是PMIC,可用于控制加电时

    2024年01月19日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包