【转】Linux驱动修炼之道-platform

Linux驱动修炼之道-platform

首先看一下我的系统中都有什么设备挂在了platform虚拟总线上:

 

 

 

platform的初始化:首先系统启动的时候会调用platform_bus_init来初始化这个虚拟总线,让后向虚拟总线注册即将挂载这条总线上的设备。platform_bus_type部分是内核为我们实现好的,我们只关系platform_device与platform_driver就行了。

 

 

 

记住总线也是一种设备,所以首先注册总线设备,然后注册总线。

 

 

 

 

把设备挂到platform总线上:

 

 

 

首先来看一个重要的数据结构:

 

 

 

设备 的分配:

 

 

 

设备的注册:

 

 

 

获取资源:

 

 

 

 

/*dev:资源所属的设备,type:获取的资源类型,num:获取的资源数*/
这里详述platform_device与platform_driver是怎样匹配上的,这里跟踪函数的执行过程,首先是platform_driver_register:

 

 

 

这里来看__driver_attach这个函数,其中分别调用了driver_match_device,driver_probe_device函数。如果匹配成果调用probe函数,否则返回。

 

 

 

匹配的时候调用的bus的match函数。

 

 

 

 

找到platform_match:

 

 

 

最后一行可以看到通过pdev->name与drv->name进行匹配,也就是说是通过设备与驱动的名字进行匹配。匹配成功后调用驱动的probe函数。

 

 

 

由relly_probe函数可以看出,如果bus定义了probe函数,则调用bus的probe函数;如果bus,没有定义而driver定义了probe函数,则调用driver的probe函数。由上边的platform_bus_type可以看出bus并没有定义probe函数,所以调用driver的probe函数。

测试程序:

device.c

 

 

 

 

driver.c

 

 

 

测试效果:

 

 

转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/05/21/6436172.aspx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值