linux一个spi总线挂多个设备,Linux SPI总线设备驱动模型详解

随着技术不断进步,系统的拓扑结构越来越复杂,对热插拔、跨平台移植性的要求越来越高,早期的内核难以满足这些要求,从linux2.6内核开始,引入了总线设备驱动模型。其实在linux2.4总线的概念就已经提出来了,直到2.6版本的内核才运用。

Linux系统中有很多条总线,如I2C、USB、platform、PCI等。

以spi为例,假如有M种不同类型CPU,N中不同SPI外设,在写裸机驱动的时候,M种CPU驱动同一个外设需要M份代码,而N种外设使用同一个cpu又需要N份代码,所以需要M*N份代码,这是典型的高内聚低耦合架构。

6039c226a023c58a1ee16ea243ceb406.png

这种网状的拓扑结构是不符合人的逻辑思维的,将M*N种耦合变成M+1+N中耦合,将大大减少linux移植工作。

021dd9e5b952909ba4ce57adc5cff827.png

在系统中抽象出一条SPI总线,然后总线中(总线注册的那个文件 spi.c 和spi.h,I2C总线注册是i2c-core.c和i2c-core.h)包含SPI控制器抽象结构体spi_master等,spi控制器和外设之间交互采用spi总线提供的标准api来进行,控制器设备和外设驱动填充相关结构体。

试想一下usb,当我们把鼠标或者键盘插入电脑时,是不是会有个驱动加载的过程?这就是在寻找总线上的驱动。总线有一种义务,就是感知设备在总线上的挂载和卸载,同时有义务去寻找与设备匹配的驱动。我们的spi也一样,当有外设挂载到spi总线上的时候,就会寻找总线上所有的驱动与之匹配,匹配成功,则由该驱动服务这个设备。反过来,总线有义务感知驱动在总线上的挂载和卸载,当驱动挂载到总线时,会寻找与之匹配的设备,该驱动就服务于匹配的设备。

总线在内核中的抽象

在linux内核中,总线由bus_type结构描述,定义在linux/device.h中。

[cpp] view plaincopy

structbus_type {

constchar*name;/*总线名称*/

int(*match) (structdevice *dev,struct

device_driver *drv); /*驱动与设备的匹配函数*/

………

}

主要关注match函数,当有一个设备挂载到一条总线上的时候,总线要把这个设备和挂载到这条总线上的驱动一一进行匹配,匹配的函数就是这个match指针。

总线的注册与注销

注册:bus_register(struct bus_type *bus)若成功,新的总线将被添加进系统,并可在/sys/bus 下看到相应的目录。

注销:void bus_unregister(struct bus_type *bus)。

进入到板子的/sys/bus目录,ls一下,可以看到系统所有的总线。

9864767e89b74ee6e401213601364fe5.png

随便进入一个目录,如SPI目录

c647a2cd8a716cd6f0b88c982b748aa3.png

Devices目录表示这条总线上所有挂载的设备。Drivers目录表示这条总线上所有的设备。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 设备驱动开发详解 4.0》是由马上飞鱼科技有限公司的紫金福老师所著的一本经典的书籍,该书是目前国内关于 Linux 设备驱动开发方面的最好的教材之一。该书主要介绍了 Linux 设备驱动的基本知识和开发方法,对于想学习 Linux 设备驱动开发或者对于嵌入式系统开发有兴趣的工程师是非常有价值的一本入门书籍。 该书从 Linux 内核的基本架构入手,介绍了 Linux 设备驱动的编写和调试方法。该书结合了实战案例,分步骤地开展了驱动开发的实践,详细分析了 Linux 的 I/O 模型、中断和 DMA、并发性问题等。同时,还详细介绍了外部总线驱动,如 SPI、I2C、PCI、USB 等,并给出了完整的 demo 程序和相应的测试方法。 另外,该书还介绍了常见的设备驱动,如字符设备驱动、块设备驱动和网络设备驱动的编写方法,并且还介绍了常见设备驱动的硬件架构和硬件接口,使得读者能够更加深入地理解设备驱动的本质。 除此之外,《Linux 设备驱动开发详解 4.0》还介绍了如何通过编写 Linux 独立模块来实现设备驱动,如何使用内核 API 接口和系统调用等技术,并且还引导读者了解一些不常见的驱动开发技术,如用户空间驱动程序和内核模块参数。 总之,《Linux 设备驱动开发详解 4.0》是一本非常实用的 Linux 设备驱动开发指南,它涵盖了 Linux 设备驱动开发的方方面面,包括理论知识和实际操作,对于想深入了解 Linux 设备驱动开发的工程师来说是不可多得的一本书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值