添加平台设备的方式-基于himawari-8卫星的沙尘监测

时间:2024-06-29 20:21:03
【文件属性】:

文件名称:添加平台设备的方式-基于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 所示代码是 中的范例,可以参考。 程序清单 2.39 使用 platform_driver_probe 的范例 int __init init_module(void) {


网友评论