platform_device和platform_driver的注册过程,及probe函数何时调用的分析
2017-12-29 20:43
931 查看
转载于http://blog.chinaunix.net/uid-7828352-id-3833188.html
参考资料:http://blog.csdn.net/xiafeng1113/article/details/8030248
参考资料:http://www.linuxidc.com/Linux/2017-08/146261.htm
参考资料:https://www.cnblogs.com/deng-tao/p/6026373.html
以leds-s3c24xx.c为例分析。
简单总结:
(1)platform_device是在系统初始化时就已经注册到系统之中的。
(2)platform_driver是在驱动初始化的时候注册的,通过platform_driver_register来注册,该注册函数最终会调用到platform_driver中的probe函数。
可将cdev有关的一系列操作(前提是字符设备的驱动开发)放到platform_driver的probe函数中去实现,这样就把cdev挂到platform bus上去了。
此函数循环调用platform_device_register函数,来注册每个platform_device。
而platform_device_register中会调用platform_device_add函数。
(2)platform_device全部注册到系统之后,便可以通过platform的操作接口,来获取platform_device中的resource资源。
比如地址、中断号等,以进行request_memregion、ioremap(将resource分配的物理地址映射到kernel的虚拟空间来)和request_irq操作。
platform的操作接口包括platform_get_irq、platform_get_irq_byname、platform_get_resource、platform_get_resource_byname等。
(3)在驱动模块insmod到系统时,驱动代码可以通过上面函数来获取对应platform_device的resource资源。
比如在module_init中,会调用plarform_driver_register,这个会引用到platform_driver中的probe函数。
probe函数可以通过get_resource来获取寄存器物理基地址,然后ioremap到kernel的虚拟空间来,这样驱动就可以正式操纵和修改设备的寄存器。
进行cdev的初始化及cdev_add的操作。
驱动注册的时候,platform_driver_register()—》driver_register()—》bus_add_driver()—》driver_attach()—》bus_for_each_dev()函数对每个挂在虚拟的platform bus的设备作__driver_attach()—》driver_probe_device()—》drv->bus—》match()==platform_match()-&
gt;比较strncmp(pdev->name, drv->name, BUS_ID_SIZE),如果相符就调用platform_drv_probe()->driver->probe(),如果probe成功则绑定该设备到该驱动。
参考资料:http://blog.csdn.net/xiafeng1113/article/details/8030248
参考资料:http://www.linuxidc.com/Linux/2017-08/146261.htm
参考资料:https://www.cnblogs.com/deng-tao/p/6026373.html
以leds-s3c24xx.c为例分析。
简单总结:
(1)platform_device是在系统初始化时就已经注册到系统之中的。
(2)platform_driver是在驱动初始化的时候注册的,通过platform_driver_register来注册,该注册函数最终会调用到platform_driver中的probe函数。
可将cdev有关的一系列操作(前提是字符设备的驱动开发)放到platform_driver的probe函数中去实现,这样就把cdev挂到platform bus上去了。
1、platform_device的注册过程
(1)系统初始化时,调用platform_add_devices函数,把所有放置在板级platform_device数组中的platform_device注册到系统中去。此函数循环调用platform_device_register函数,来注册每个platform_device。
而platform_device_register中会调用platform_device_add函数。
(2)platform_device全部注册到系统之后,便可以通过platform的操作接口,来获取platform_device中的resource资源。
比如地址、中断号等,以进行request_memregion、ioremap(将resource分配的物理地址映射到kernel的虚拟空间来)和request_irq操作。
platform的操作接口包括platform_get_irq、platform_get_irq_byname、platform_get_resource、platform_get_resource_byname等。
(3)在驱动模块insmod到系统时,驱动代码可以通过上面函数来获取对应platform_device的resource资源。
比如在module_init中,会调用plarform_driver_register,这个会引用到platform_driver中的probe函数。
probe函数可以通过get_resource来获取寄存器物理基地址,然后ioremap到kernel的虚拟空间来,这样驱动就可以正式操纵和修改设备的寄存器。
进行cdev的初始化及cdev_add的操作。
2、platform_driver的注册过程,probe函数何时调用
(1)kernel中的调用关系驱动注册的时候,platform_driver_register()—》driver_register()—》bus_add_driver()—》driver_attach()—》bus_for_each_dev()函数对每个挂在虚拟的platform bus的设备作__driver_attach()—》driver_probe_device()—》drv->bus—》match()==platform_match()-&
gt;比较strncmp(pdev->name, drv->name, BUS_ID_SIZE),如果相符就调用platform_drv_probe()->driver->probe(),如果probe成功则绑定该设备到该驱动。
相关文章推荐
- platform_device和platform_driver的注册过程,及probe函数何时调用的分析
- platform_device和platform_driver的注册过程,及probe函数何时调用的分析
- platform_device和platform_driver的注册过程,及probe函数何时调用的分析
- platform_device和platform_driver的注册过程,及probe函数何时调用的分析
- platform_device和platform_driver的注册过程,及probe函数何时调用的分析
- 以RTC为例分析linux platform_bus platform_device和platform_driver注册过程
- Linux内核---18.platfrome_device与platform_driver的注册过程分析
- platform _device和platform_driver注册过程
- Platform Device和Platform_driver注册过程
- platform _device和platform_driver注册过程
- Linux Platform Device and Driver的注册过程解析
- 关于platform_driver 是如何匹配 platform_device的和如何调用到platform_driver中的probe函数的研究
- platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备
- 关于platform_driver 是如何匹配 platform_device的和如何调用到platform_driver中的probe函数的研究
- 关于platform_driver 是如何匹配 platform_device的和如何调用到platform_driver中的probe函数的研究
- Linux Platform Device and Driver的注册过程解析
- Linux Platform Device and Driver的注册过程解析
- [platform]linux platform device/driver(二)--Platform Device和Platform_driver注册过程之详细代码
- platform _device和platform_driver注册过程
- [platform]linux platform device/driver(三)--Platform Device和Platform_driver注册过程之代码对比