主机驱动与外设驱动的分离思想

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下面

上文摘抄自《Linux设备驱动开发详解:基于最新的Linux 4.0内核》

说一下自己的理解:

连接主机和外设的纽带
就是 核心层,负责提供标准的API接口,让控制器端的驱动实现这些接口。再提供给外设端的驱动,由外设端的驱动调用,来实现控制器对设备的相互通信

主机驱动与外设驱动的分离思想相关推荐

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

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

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

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

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

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

  4. Linux驱动的软件架构(三):主机驱动与外设驱动分离的设计思想

    <Linux设备驱动开发详解>的学习笔记 1.主机驱动与外设驱动分离 Linux中的SPI.I2C.USB等子系统都利用了典型的把主机驱动和外设驱动分离的想法,让主机端只负责产生总线上的传 ...

  5. i2c--ioctl--主机控制器驱动(i2c_adapter)--外设驱动(i2c_driver)

    updating... i2c驱动目录 [root@localhost i2c]# pwd /opt/FriendlyArm/mini2440/linux-2.6.32.2/drivers/i2c [ ...

  6. Linux 设备驱动开发思想 —— 驱动分层与驱动分离

    前面我们学习I2C.USB.SD驱动时,有没有发现一个共性,就是在驱动开发时,每个驱动都分层三部分,由上到下分别是: 1.XXX 设备驱动 2.XXX 核心层 3.XXX 主机控制器驱动 而需要我们编 ...

  7. Linux驱动——驱动分离思想和总线设备驱动模型

    驱动分离思想: 在传统的字符设备驱动思想中一个驱动程序对应一个硬件资源,在驱动入口函数中对资源进行配置,在file_operation中对各个硬件资源进行操作.这种思想使得内核中驱动代码变得庞大,为了 ...

  8. spi 外设驱动(spi_driver)

    spi驱动模型和i2c的类似,都按照主机外设分离来设计的.但我觉得比i2c的要简明好多. 上文配置的spi驱动最外层是platform总线然后是spi总线然后是字符设备. spi驱动模型分为 spi主 ...

  9. 华大HC32外设驱动开发汇总

    HCL13X系列MCU是48Mhz\M0内核的32bit芯片,最大封装64脚: 1.关于其spi外设驱动配置参考: [主机收发] //使能GPIO时钟 //以PB3,4,5脚为例,进行GPIO的相应配 ...

  10. 2018-2019-1 20165318 20165322 20165326 实验四 外设驱动程序设计

    实验四 外设驱动程序设计 实验内容 任务一 任务二 问题及解决方法 参考链接 实验内容 任务一 学习资源中全课中的"hqyj.嵌入式Linux应用程序开发标准教程.pdf"中的第十 ...

最新文章

  1. c++ 编译器支持情况表
  2. excel文件修复工具_Windows商店上架文件恢复工具!仅8.29MB,纯净无捆绑,80%修复率...
  3. Knative 实战:如何在 Knative 中配置自定义域名及路由规则
  4. 谈谈自己对于Auth2.0的见解
  5. 安卓实训项目:贪吃蛇V1.0
  6. vs该文件没有与之关联的应用来执行该操作_Hadoop大数据实战系列文章之Zookeeper...
  7. Linux(CentOS)系统下设置nginx开机自启动
  8. 百万级别长连接,并发测试指南
  9. android两种基本联网方式与一种第三方开源项目的使用
  10. ubuntu 下codeblocks的相关配置
  11. 木马文件slader以及各种捆绑木马、流氓软件
  12. STM32精英版(正点原子STM32F103ZET6开发板)学习篇1——新建库函数模版
  13. CSS标签选择器→教你如何使用
  14. 数据结构算法常见面试考题
  15. 本特利电涡流传感器 330876-02-90-01-CN
  16. 模型预测控制的缺点_模型预测控制简要内容
  17. 流媒体服务器之 ZLMediaKit介绍
  18. SECS/GEM EAP介绍
  19. html页面js跨域获取json数据,JS跨域获得Json的应用
  20. 视频网关是什么,视频接入网关技术作用

热门文章

  1. ERROR Error validating install location: Distro ‘rhe17‘ does not exist in our dictionary
  2. java获取大写字母_获取中文大写首字母java实现
  3. 常用邮箱的服务器(SMTP/POP3)地址和端口整理
  4. url 转码 java_java中URL转码
  5. 关于传说中的AMD5600G 发热少,功耗低
  6. 开发常用词汇表(带音标)
  7. Flash:任意变形工具的使用
  8. c语言中立方和乘法怎么表示什么区别,C语言程式设计中的平方立方怎么表示
  9. Redis cluster Hget hash field value异常分析案例--一个空格带来的惨案
  10. 卫星定位领域相关基础知识汇总