32.驱动--platform机制驱动层分离

14.linux-platform机制实现驱动层分离(详解) - 诺谦 - 博客园

Platform机制_小跃_进击-CSDN博客_platform机制

有些设备,特别是嵌入式系统里的设备,是没有总线的,但是按照设备驱动的模型,有个bus好管理很多,所以就虚拟了一个platform的总线,就像设备没爹妈,就给他安排一个爹妈,这个爹妈提供match等函数管理设备。

把硬件资源相关的代码(固定的,如板子的网卡、中断地址)和驱动逻辑(会根据程序作变动,如点哪一个灯)拆分成两部分,用platform总线把两者匹配连接。修改移植的时候只需要动对应的部分,另一部分不需要动。

1) device设备

挂接在platform总线下的设备, platform_device结构体类型,name是匹配的关键

通过platform_device_register()函数把用户定义的platform_device结构体注册到总线中的device链表中

2) driver驱动

挂接在platform总线下,是个与某种设备相对于的驱动, platform_driver结构体类型

 

通过platform_driver_register()函数把用户定义的platform_driver结构体放到总线的driver链表中.

name是匹配的关键,如果匹配成功,则会调用prob函数

3) platform总线

是个全局变量,为platform_bus_type,属于虚拟设备总线,通过这个总线将设备和驱动联系起来,属于Linux中bus的一种。该platform_bus_type的结构体定义如下所示(位于drivers/base):

match通过两者的name来判断是否匹配

 适用platform机制的流程,用户要把device和drive两部分都要做出来

device 部分:

第一步:分配一个platform_device结构体

第二步:设置分配的platform_device结构体,name是必须的、resource是硬件资源需要填入、release为释放函数,需要用户提供

 

 

第三步:适用platform_device_register()把platform_device结构体注册进总线

退出时不要忘记删掉注册的资源

 

第四步:使用module_init()修饰init函数,作为入口

drive部分:

第一步:分配一个platform_drive结构体

第二步:设置结构体,填充probe和remove函数。probe为匹配上就会自动调用的函数,remove为退出自动调用的函数。probe函数内用户想做什么都可以,例子是一个字符设备驱动的建立。最主要是通过platform_get_resource()函数把device部分的资源获取。

退出时用remove函数 把所有注册的资源删掉

 

 第三步:用platform_driver_register()函数把分配的platform_driver()结构体注册进总线 

退出时不要忘记删掉注册的资源

 

第四步:使用module_init()修饰init函数,作为入口

使用的时候,用insmod命令分别安装device和drive两个模块即完成,两者不分先后。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值