《Linux设备驱动开发详解》的学习笔记

1、主机驱动与外设驱动分离

Linux中的SPI、I2C、USB等子系统都利用了典型的把主机驱动和外设驱动分离的想法,让主机端只负责产生总线上的传输波形,而外设端只是通过标准的API来让主机端以适当的波形访问自身。因此这里面就涉及了4个软件模块:

1)主机端的驱动。

根据具体的I2C、SPI、USB等控制器的硬件手册,操作具体的I2C、SPI、USB等控制器,产生总线的各种波形。

2)连接主机和外设的纽带。

外设不直接调用主机端的驱动来产生波形,而是调一个标准的API。由这个标准的API把这个波形的传输请求间接“转发”给了具体的主机端驱动。当然,在这里,最好把关于波形的描述也以某种数据结构标准化。

3)外设端的驱动。

**外设接在I2C、SPI、USB这样的总线上,但是它们本身可以是触摸屏、网卡、声卡或者任意一种类型的设备。**我们在相关的i2c_driver、spi_driver、usb_driver这种xxx_driver的probe()函数中去注册它具体的类型。当这些外设要求I2C、SPI、USB等去访问它的时候,它调用“连接主机和外设的纽带”模块的标准API。

4)板级逻辑。

板级逻辑用来描述主机和外设是如何互联的,它相当于一个“路由表”。假设板子上有多个SPI控制器和多个SPI外设,那究竟谁接在谁上面管理互联关系,既不是主机端的责任,也不是外设端的责任,这属于板级逻辑的责任。这部分通常出现在arch/arm/mach-xxx下面或者arch/arm/boot/dts下面。(设备树看一下—在技能知识专栏里)

什么叫良好的软件设计一言以蔽之,让正确的代码出现在正确的位置。不要在错误的时间、错误的地点,编写一段错误的代码。在LKML中,关于代码出现在错误的位置,常见的台词是代码“out of place”。

Linux通过上述的设计方法,把一堆杂乱不友好的代码变成了4个轻量级的小模块,每个模块都各得其所。每个模块都觉得很“爽”,站在主机端想一想,它其实也是很“爽”的,因为它的职责本来就是产生波形,而现在我们就让它只产生波形不干别的;站在外设端想一想,它也变得一身轻松,因为它根本就不需要知道自己接在主机的哪个控制器上,根本不关心对方是张三、李四、王五还是六麻子;站在板级逻辑的角度上,你做了一个板子,自己自然要知道谁接在谁上面了。

小结

真实生活中的驱动并不像第6~11章里那样的驱动,它往往包含了platform、分层、分离等诸多概念,Linux内核目前有百多个驱动子系统,一个个去学肯定是不现实的,在方法上也是错误的。我们要掌握其规律,以不变应万变,以无招胜有招。

关于具体的驱动类型的编写,详细的内容可以留言我们一起学,也可以去书里面找找。

Linux驱动的软件架构(三):主机驱动与外设驱动分离的设计思想相关推荐

  1. Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析

    SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转 ...

  2. Linux设备驱动开发---USB主机(控制器)与设备驱动(一)

    USB主机控制器与设备驱动---主机侧 一.Linux USB驱动层次 1.USB驱动(主机侧) 2.USB的逻辑组合(4个层次) 二.USB主机(控制器)驱动 1.主机控制器规格 2.主机控制器的相 ...

  3. Linux主机驱动与外设驱动分离思想

    - by 宋宝华(Barry Song) 1主机.外设驱动分离的意义 在Linux设备驱动框架的设计中,除了有分层设计实现以外,还有分隔的思想.举一个简单的例子,假设我们要通过SPI总线访问某外设,在 ...

  4. [转]Linux主机驱动与外设驱动分离思想

    - by 宋宝华(Barry Song) 1主机.外设驱动分离的意义 在 Linux设备驱动框架的设计中,除了有分层设计实现以外,还有分隔的思想.举一个简单的例子,假设我们要通过SPI总线访问某外设, ...

  5. Linux主机驱动与外设驱动分离思想[转宋老师]

    1主机.外设驱动分离的意义 在Linux设备驱动框架的设计中,除了有分层设计实现以外,还有分隔的思想.举一个简单的例子,假设我们要 通过SPI总线访问某外设,在这个访问过程中,要通过操作CPU XXX ...

  6. sbus storm32bgc_STorM32 BGC三轴增稳云台驱动下载

    STorM32 BGC是一种硬件开源.软件闭源的三轴稳定云台控制项目.云台在我们生活中是越来越常见,我们手机拍照用的手持云台,无人机上挂载摄像机的机载隔振云台.我们在电影<流浪地球>里面那 ...

  7. 【正点原子Linux连载】第三十七章 Linux内核移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  8. Linux设备驱动编程第三版-笔记

    第1章 设备驱动简介 1.1 驱动程序的角色 机制:提供什么能力. 策略:如何使用这些能力. 1.2. 划分内核 内核的角色可以划分:     一:进程管理 二:内存管理 三:文件系统 四:设备控制 ...

  9. 【正点原子Linux连载】第三十三章 U-Boot移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

最新文章

  1. iOS 微信SDK1.8.6后需要UniversalLink解决方案及采坑记录
  2. 【Codeforces】1136C Nastya Is Transposing Matrices (矩阵转置)
  3. ZZNU 1993: cots' friends
  4. Linux的文件系统及其硬盘分区挂载原理
  5. C语言 学生管理系统
  6. android dumpsys 分析,Android开发调试性能分析工具:dumpsys
  7. windows虚拟机_iOS 版虚拟机:在 iPhone 上运行 Windows 系统
  8. TCP三次握手抓包观察实战篇
  9. NGUI_2.6.3_系列教程二
  10. 找出游戏的必胜的策略(博弈论的学习)
  11. 计算机基础知识试卷并附答案,计算机基础知识_试卷及答案.doc
  12. SQLCE数据库的几点研究
  13. maven安装和eclipse集成
  14. 思维模型 SWOT分析
  15. win7计算机盘共享,win7电脑如何共享文件夹 win7电脑共享文件夹操作方法
  16. 快速了解区块链六大特点
  17. win32 中GetLastError 关于code与信息
  18. 2018计算机系统结构全国卷,2018年10月高等教育自学考试全国统一命题考试02325计算机系统结构试卷及答案.doc...
  19. android otg连接单反
  20. 知识库的分类梳理原则与实践经验

热门文章

  1. woe分析_特征工程中的IV和WOE详解
  2. 五子棋 (用C语言编写五子棋游戏)
  3. Windows系统Stunnel使用简介
  4. C语言unprinctable错误,“未捕获错误:[$injector:unpr]”,部署后角度
  5. c汇编语言实验,C语言与汇编语言编程实验
  6. css缩2个字,css首行缩进2字符怎么设置?缩进的CSS代码是什么
  7. 国产音质最好的蓝牙耳机有哪些?推荐音质好的国产蓝牙耳机
  8. 读书笔记:《无为而治——设计自动运行的企业制度》
  9. 咖喱函数(Curry Func)
  10. Android仿抖音上下滑动切换视频