platform_driver_register,platform_driver_register函数

http://www.itjxue.com  2023-01-16 03:52  来源:未知  点击次数: 

linux提示驱动已注册

驱动注册:

1、内核源码中 vim include/linux/platform_device.h 可看到驱动注册的相关函数,查找一下“platform_driver_register” 可看到:

注册驱动的函数:

extern int platform_driver_register(struct platform_driver *)

卸载驱动的函数:

extern void platform_driver_unregister(struct platform_driver *)

其中 platform_driver 类型的结构体 是非常重要的,该结构体在include/linux/platform_device.h 头文件中,里面的几个操作函数和一个对象会在编写的驱动C文件中调用,相关函数可参照例程中仿写。

linux 下platform设备和驱动注册的先后顺序

Linux关于总线、设备、驱动的注册顺序

设备挂接到总线上时,与总线上的所有驱动进行匹配(用bus_type.match进行匹配),

如果匹配成功,则调用bus_type.probe或者driver.probe初始化该设备,挂接到总线上

如果匹配失败,则只是将该设备挂接到总线上。

驱动挂接到总线上时,与总线上的所有设备进行匹配(用bus_type.match进行匹配),

如果匹配成功,则调用bus_type.probe或者driver.probe初始化该设备;挂接到总线上

如果匹配失败,则只是将该驱动挂接到总线上。

需要重点关注的是总线的匹配函数match(),驱动的初始化函数probe()

1. platform_bus_type--总线先被kenrel注册。

2. 系统初始化过程中调用platform_add_devices或者platform_device_register,将平台设备(platform devices)注册到平台总线中(platform_bus_type)

3. 平台驱动(platform driver)与平台设备(platform device)的关联是在platform_driver_register或者driver_register中实现,一般这个函数在驱动的初始化过程调用。

通过这三步,就将平台总线,设备,驱动关联起来。

1. platform bus先被kenrel注册。

------------------------------------------------------

do_basic_setup() ---driver_init() ---platform_bus_init()--bus_register()

2. 系统初始化过程中调用platform_add_devices或者platform_device_register,将平台设备(platform devices)注册到平台总线中(platform_bus_type)

------------------------------------------------------

系统启动阶段,总线的驱动链表还是空的,所以启动阶段的platform_add_devices()只负责将设备添加到总线的设备链表上。

platoform怎么玩

platform的灵魂是:device(设备)driver(驱动)platform_bus(platform总线),其特点是设备,驱动分层动态的管理和加载

其中platform_bus是一个虚拟的总线,当我们将设备和驱动注册到虚拟总线上(内核)时,如果该设备是该驱动的设备,该驱动是该设备的驱动,在他们注册时,会互相寻找

一次对方(只在注册的时候寻找一次,找完了就玩了)。这个找的过程是platform_bus来完成的,我们暂不管他如何让寻找。如果device和driver中的name这个字符串是想相同的话

platform_bus就会调用driver中的.probe函数.这个匹配到调用probe的过程是自动的,有总线自己完成。这个过程从注册开始,从probe结束

设备和驱动的关系是多对一的关系,即多个相同设备可使用一个driver,靠device(设备)中的id号来区别

platform的使用其实就四步:

1)初始化 resource 结构变量

2)初始化 platform_device 结构变量

3)向系统注册设备:platform_device_register。

4)想系统注册驱动:[platform_driver_register()]

登录后复制

drvier和device匹配的方法有3种:

* 当一个设备注册的时候,他会在总线上寻找匹配的driver,platform device一般在系统启动很早的时候就注册了

* 当一个驱动注册[platform_driver_register()]的时候,他会遍历所有总线上的设备来寻找匹配,在启动的过程驱动的注册一般比较晚,或者在模块载入的时候

* 当一个驱动注册[platform_driver_probe()]的时候, 功能上和使用platform_driver_register()是一样的,唯一的区别是它不能被以后其他的device probe了,也就是说这个driver只能和 一个device绑定

eg:定义一个driver

(责任编辑:IT教学网)

更多

相关PHP教程文章