linux platform总线平台

1,注册platform_device 设备时,如果 struct resource 里面的寄存器地址一样,在卸载时(卸载两个时,卸载一个是没有错误的)会出现段错误(比如 两个 led时,实际上是不会一样的,只是在做实验时,我为了方便就用了一样的,结果在卸载时就出现段错误了,很好奇,为啥会出错,struct resource 里面的数据不是在匹配上驱动时才会被操作吗,难道在注册设备时也会被内核操作?)

2、

3、无论是在哪种总线上注册驱动,最终都会调用 int driver_register(struct device_driver *drv)这个函数

在看源代码时,发现 自己写的probe函数被替换成内核提供的probe函数了,我们提供的probe函数实际上是在内核(platform总线)提供的那个probe函数里面执行的,我觉得这样做原因是 driver_register函数的参数类型是struct device_driver,而我们用platform_driver_register函数注册的参数类型是struct platform_driver,也就是类型不一样。内核提供的probe函数的参数类型是struct device_driver,但是它会利用这个函数找到struct platform_driver,也就是我们那个参数

 总的来说,还是为了方便上层人员的开发,因为如果是用driver_register函数注册驱动还需要指定bus类型等东西,但是用platform_driver_register函数就不需要做这一步了。

 4、

 在驱动中要获取resource这个结构体要用到

struct resource *platform_get_resource(struct platform_device *dev,unsigned int type, unsigned int num) 函数,num是指索引,这个索引并不一定等于前面那个数字(比如 [0] ),而是等于从上到下相同类型的序号,类型在参数type中指定。

设备的信息除了可以用resource(有限制,因为这是个结构体)存放,也可以放在 platform_data (限制少,这只是个 void 类型的指针)中

 获取 platform_data  是很简单的,直接定义跟platform_data 数据类型的变量比如 

int data = pdev->platform_data。(pdev是传进来的platform_device 结构体)

 

 5、有设备树下

        

当设备树和驱动匹配后,在platform_device 结构体上就有设备节点 node 的指针了 ,就不需要再用of_find_node_by_name啥的函数去设备树中捞了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值