欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

总线设备驱动模型

发布时间:2025/7/14 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 总线设备驱动模型 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

总线设备驱动模型

一个总线设备驱动包含三个元素:总线,驱动,设备。

总线是处理器和设备之间的同道,在设备模型中,所有的设备都通过总线相连,甚至是内部的虚拟“platform”总线。

 

总线:

描述总线的数据结构如下:

 

总线注册和删除使用:

 

下面介绍几个比较重要的总线方法:

 

 

总线属性Buf_attribute的结构定义如下:

 

 

而总线设备和总线属性的结合和解除如下:

 

 

设备:

Linux系统中的每一个总线设备由一个struct device描述:

 

 

设备的注册与注销:

 

 

设备属性由struct device_attribute描述:

 

 

设备属性的创建与删除:

 

 

驱动:

驱动程序由struct device_driver描述:

 

 

驱动注册与注销:

 

 

驱动的属性使用struct driver_attribute来描述,其中attr代表一个文件,showstore代表读写:

 

 

驱动属性的创建与删除:

 

 

 

注意:昨天一边玩一边学,恶果深重,今天从新把代码写一遍。

 

1._init是告诉操作系统,带着这个标示符的函数,调用一次就可以从内存中删除了。

 

2.宏定义中的##号代表连接。

 

 

3.总线也是一种设备,所以注册总线的时候也要注册总线设备。

 

4.热插拔:带电插拔,比如没有关机的情况下插拔硬件。

 

5.当拔掉一个设备后会调用驱动的remove函数,当驱动连接一个设备的时候会调用prob函数。

 

6初始化总线,设备,驱动的区别:

总线:                

 

设备:

 

驱动:

 

 

Platform平台驱动:

Platform总线是linux2.6内核加入的一种虚拟总线,platform机制本身使用并不复杂,由两部分组成:Platform_device和platform_driver。

Platform驱动与传统的设备驱动模型相比,优势在于platform机制将设备本身的资源注册进内核,有内核统一管理,在驱动程序使用这些资源时使用统一的接口,这样提高了程序的可移植性。

通过platform机制开发底层设备驱动的流程如图:

 

 

平台设备:

  挂到platform总线上的设备使用struct Platform_device来描述:

 

struct Platform_device使用如下函数:

 

 

平台设备的注册如下:

 

 设备的资源描述结构体如下:

 

  下面是设备资源的例子:

 

可以通过如下的方式获取设备的资源:

 

    一个平台设备内核模块的典型编写方式如下:

 

 

平台驱动:

平台驱动描述的数据结构struct platform_driver

 

 

平台驱动注册函数:

 

下面是编写平台驱动内核模块的一个例子:

 

 

中断处理:

 

 

中断的注册:

注册函数如下:

 

 

其中flags的可能值如下:

 

快速中断和慢中断:

 

 

共享中断:

 

 

注意:

1. 共享中断的dev_id是唯一的。

2. 共享中断不能使用disable_irq(),否则会导致其他使用这个中断的硬件设备也无法中断。

 

 

 

 

使用完毕后应该释放中断:

 



来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/dchipnau/p/5010059.html

总结

以上是生活随笔为你收集整理的总线设备驱动模型的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。