使用module_platform_driver宏注册平台设备驱动模块: 使用module_platform_driver宏来注册平台设备驱动模块,将上述定义的结构体作为参数传递给宏。例如: module_platform_driver(my_platform_driver); 通过使用 module_platform_driver 宏,内核会在模块加载时自动注册平台设备驱动,并根据驱动的名称与设备树中的设备节点进行匹...
module_init这个宏在include/linux/module.h中定义,在kernel初始化过程中调用do_initcall()或插入驱动ko文件时得到执行。每个驱动模块仅需实现一个module_init与module_exit即可。驱动代码在使用module_platform_driver注册驱动时,经过编译后的文件内容如下: module_init宏最终是调用了__initcall(x),定义了程序链接时的...
platform_device.h在创建初期并没有现在这么多丰富的功能,通过platform_xxx_register来注册驱动和设备,并没有提供module_platform_driver这个辅助宏。 /* * platform_device.h - generic, centralized driver model * * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org> * * This file is released unde...
module_init(globalfifo_platform_dev_init); module_exit(globalfifo_platform_dev_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION(DRIVER_DESC); 对于driver部分,需要定义Probe,remove接口,probe中通过misc_register来注册设备,miscdevice核心层会自动找一个空闲的次设备号。 #include <linux/init.h> #include <...
2、设备的驱动 --- platform_driver 结构体 这个结构体中包含probe()、remove()、shutdown()、suspend()、 resume()函数,通常也需要由驱动实现 structplatform_driver {int(*probe)(structplatform_device *);int(*remove)(structplatform_device *);void(*shutdown)(structplatform_device *);int(*suspend)(...
加载platform driver 在驱动模块insmod到系统时,驱动代码可以通过上面函数来获取对应platform_device的resource资源.比如在module_init中,会调用plarform_driver_register,这个会引用到platform_driver中的probe函数. probe函数可以通过get_resource来获取寄存器物理基地址,然后ioremap到kernel的虚拟空间来,这样驱动就可以正式操纵...
定义platform_device --> 注册platform_device --> 定义platform_driver --> 注册platform_driver 。 1、platform_device注册过程: 首先要确认的就是设备的资源信息,例如设备的地址,中断号等。在 2.6 内核中platform 设备用结构体 platform_device 来描述,该结构体定义在 kernel\include\linux\platform_device.h 中...
device */void*platform_data;/* Platform specific data, device core doesn't touch it */structdev_pm_info power;structdev_power_domain*pwr_domain; ...} struct device_driver {//设备驱动基类结构体 const char *name; struct bus_type *bus; structmodule*...
1. platform总线两个最重要的结构体 platform维护的所有的驱动都必须要用该结构体定义: platform_driver struct platform_driver { int (*probe)(struct platform_device *); // int (*remove)(struct platform_device *); void (*shutdown)(struct platform_device *); ...
/drivers/base/platform.c 在linux设备驱动中,有许多没有特定总线的外设驱动,在实际开发中,又需要使用到总线、驱动和设备模型这三个概念,故而linux提供了platform这个虚拟总线,挂接在platform总线上的驱动称为platform驱动,由struct platform_driver描述,挂接在platorm总线上的设备称为platform设备,由struct platform_devic...