文件名称:添加平台设备的方式-基于himawari-8卫星的沙尘监测
文件大小:7.57MB
文件格式:PDF
更新时间:2024-06-29 20:21:03
嵌入式linux 周立功
图 2.7 添加平台设备的方式
2.10.3 平台驱动
platform_driver 1.
platform_driver 是 device_driver 的封装,提供了驱动的 probe 和 remove 方法,也提供了
与电源管理相关的 shutdown 和 suspend 等方法,如程序清单 2.38 所示。
程序清单 2.38 platform_driver 数据结构
struct platform_driver {
int (*probe)(struct platform_device *); /* probe 方法 */
int (*remove)(struct platform_device *); /* remove 方法 */
void (*shutdown)(struct platform_device *); /* shutdown 方法 */
int (*suspend)(struct platform_device *, pm_message_t state); /* suspend 方法 */
int (*resume)(struct platform_device *); /* resume 方法 */
struct device_driver driver; /* 设备驱动 */
const struct platform_device_id *id_table; /* 设备的 ID 表 */
};
Platform_driver 有 5 个方法:
probe成员指向驱动的探测代码,在 probe方法中获取设备的资源信息并进行处理,
如进行物理地址到虚拟地址的 remap,或者申请中断等操作,与模块的初始化代码
不同;
remove 成员指向驱动的移除代码,进行一些资源释放和清理工作,如取消物理地
址与虚拟地址的映射关系,或者释放中断号等,与模块的退出代码不同;
shutdown 成员指向设备被关闭时的实现代码;
suspend 成员执行设备挂起时候的处理代码;
resume 成员执行设备从挂起中恢复的处理代码。
注册和注销 platform_driver 2.
注册和注销 platform_driver 的函数分别是 platform_driver_register()和 platform_driver
_unregister(),函数原型分别如下:
int platform_driver_register(struct platform_driver *drv);
void platform_driver_unregister(struct platform_driver *drv);
另外,platform_driver_probe()函数也能完成设备注册,原型如下:
int platform_driver_probe(struct platform_driver *driver, int (*probe)(struct platform_device *));
如果已经明确知道一个设备不支持热插拔,可以在__init 断代码中调用 platform_driver
_probe()函数,以减少运行时对内存的消耗。如程序清单 2.39 所示代码是