linux驱动开发 - 11_Linux 下的驱动分离与分层

这篇具有很好参考价值的文章主要介绍了linux驱动开发 - 11_Linux 下的驱动分离与分层。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


链接: C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂

11. Linux 下的驱动分离与分层

1 驱动的分隔与分离

linux是一个成熟、复杂、庞大的操作系统,代码的重用性很重要,不然会在linux内核存在大量的无意义重复的代码。尤其的驱动程序,占了linux内核代码的大头,所以需要对驱动程序加以管理。

传统的I2C设备驱动

假如有三个平台A、B和C,这三个平台都有MPU6050 这个 I2C接口的六轴传感器。按照I2C驱动的思路,每个平台都有一个 MPU6050的驱动,所以编写出来的最简单的驱动框架如图

linux驱动开发 - 11_Linux 下的驱动分离与分层

可以看出,每种平台下都有一个主机驱动和设备驱动,左边的主机驱动是必要的,不同平台的控制器不同。但是右边的设备驱动没必要每个平台都写一个,因为不管对于哪一个SOC来说,MPU6050都是一样的,都是通过I2C接口来读写数据,只需要编写一个MPU6050驱动程序就可以。

最好每个平台的I2C控制器都提供一个统一的接口(也叫做主机驱动),每个设备的也只提供一个驱动程序(设备驱动),每个设备通过统一的 I2C接口驱动来访问,这样就可以大大简化驱动文件

linux驱动开发 - 11_Linux 下的驱动分离与分层

实际的 I2C 驱动设备肯定有很多种,不止 MPU6050 这一个,那么实际的驱动架构如图

linux驱动开发 - 11_Linux 下的驱动分离与分层

  • 这个就是驱动的分隔,将主机驱动和设备驱动分隔开来,比如 I2C、 SPI 等等都会采用驱动分隔的方式来简化驱动的开发。

  • 在实际的驱动开发中,一般 I2C 主机控制器驱动已经由半导体厂家编写好而设备驱动一般也由设备器件的厂家编写好了只需要提供设备信息即可,比如 I2C 设备的话提供设备连接到了哪个 I2C 接口上, I2C 的速度是多少等等。 (将设备信息从设备驱动中剥离开来,驱动使用标准方法去获取到设备信息(比如从设备树中获取到设备信息),然后根据获取到的设备信息来初始化设备。)

所以相当于驱动只负责驱动,设备只负责设备,想办法将两者进行匹配即可。Linux 中的总线(bus)、驱动(driver)和设备(device)模型,也就是常说的驱动分离。总线就是驱动和设备信息的桥梁,负责给两者牵线搭桥。

linux驱动开发 - 11_Linux 下的驱动分离与分层

  • 当向系统注册一个驱动的时候,总线就会在右侧的设备中查找,看看有没有与之匹配的设备,如果有的话就将两者联系起来。

  • 当向系统中注册一个设备的时候,总线就会在左侧的驱动中查找看有没有与之匹配的设备,有的话也联系起来。

2 驱动的分层

Linux 下的驱动往往也是分层的,分层的目的也是为了在不同的层处理不同的内容。以input子系统 为例,input 子系统负责管理所有跟输入有关的驱动,包括键盘、鼠标、触摸等,最底层的就是设备原始驱动,负责获取输入设备的原始值,获取到的输入事件上报给 input 核心层。input 核心层会处理各种 IO 模型,并且提
供file_operations 操作集合。在编写输入设备驱动的时候只需要处理好输入事件的上报即可,至于如何处理这些上报的输入事件那是上层去考虑的文章来源地址https://www.toymoban.com/news/detail-465797.html

到了这里,关于linux驱动开发 - 11_Linux 下的驱动分离与分层的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【IMX6ULL驱动开发学习】11.Linux之SPI驱动

    参考:驱动程序开发:SPI设备驱动_spi驱动_邓家文007的博客-CSDN博客 目录 一、SPI驱动简介 1.1 SPI架构概述 1.2 SPI适配器(控制器)数据结构 1.2 SPI设备数据结构 1.3 SIP设备驱动 1.4 接口函数  二、SPI驱动模板 SPI驱动框架和I2C驱动框架是十分相似的,不同的是因为SPI是通过片选引

    2024年02月11日
    浏览(54)
  • Ubuntu (Linux) 下创建软链接(即符号链接,相当于windows下的快捷方式)方法

    使用创建软链接的命令 Reference(注) :

    2024年01月24日
    浏览(69)
  • Linux下的FrameBuffer驱动框架

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

    2024年01月16日
    浏览(34)
  • Linux安装Oracle11g(无图形界面下的静默安装)

    创建组和用户 创建oracle安装目录 关闭防火墙 优化系统内核参数 编辑 /etc/sysctl.conf 文件,在文件尾添加如下内容: 执行 sysctl -p 使修改生效 对oracle用户设置限制 编辑 /etc/security/limits.conf 文件,在文件尾添加如下内容: 设置用户变量 编辑 /home/oracle/.bash_profile 文件,在文件尾

    2024年04月14日
    浏览(40)
  • Day11-Linux系统iNode及链接知识及企业按哪里精讲

    中文意思是索引节点(index node) 是磁盘上的一块【存储空间】。 一个inode大小256字节。 看到形态是一个串数字(身份证)。 存储文件的属性信息(大小、用户、组、修改时间 ls -l的信息都在里面放着)。 还存放一个重要的东西,指向文件真正实体的位置信息(指针)。 1)买回

    2024年02月20日
    浏览(35)
  • 【linux 多线程并发】线程属性设置与查看,绑定CPU,线程分离与可连接,避够多线程下的内存泄漏

    ​ 专栏内容 : 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构,以及如何实现多机的数据库节点的多读多写,与传统主备,MPP的区别,技术难点的分析,数据元数据同步,多主节点的情况下对故障容灾的支持。 手写数据库toadb 本专栏主要介绍如何从零开发,开发的

    2024年02月03日
    浏览(50)
  • 【Linux 裸机篇(五)】I.MX6ULL BSP工程管理下的 Makefile编写、链接脚本

    文件夹 描述 bsp 存放驱动文件 imx6ul 存放跟芯片有关的文件,比如 NXP 官方的 SDK库文件 obj 存放编译生成的.o 文件 project 存放 start.S 和 main.c 文件,也就是应用文件 行 描述 1~7 定义了一些变量,除了第 2 行以外其它的都是跟编译器有关的,如果使用其它编译器的话只需要修改第

    2023年04月20日
    浏览(49)
  • <Linux开发>驱动开发 -Linux MISC 驱动

    <Linux开发>驱动开发 -Linux MISC 驱动 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移植过程详细记录(第一部分) <Linux开发> -之-系统移植 uboot移植过程详细记录(第二部分) <Linux开发> -之

    2024年02月13日
    浏览(30)
  • I2C知识大全系列四 —— I2C驱动之Linux下的I2C

    Linux 系统定义了 I2C 驱动体系结构。在 Linux 系统中, I2C 驱动由三部分组成,即 I2C 核心 、 I2C 总线驱动 和 I2C 设备驱动 。这三部分相互协作,形成了非常通用、可适应性很强的 I2C 框架。 I2C核心 I2C 核心提供了 I2C 总线驱动 和 设备驱动 的 注册 、 注销方法 , I2C 通信方法

    2024年02月07日
    浏览(58)
  • <Linux开发>驱动开发 -之- Linux RTC 驱动

    <Linux开发>驱动开发 -之- Linux RTC 驱动 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移植过程详细记录(第一部分) <Linux开发> -之-系统移植 uboot移植过程详细记录(第二部分) <Linux开发>

    2024年02月11日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包