首页 理论教育 平台概念及实例-Linux驱动程序开发

平台概念及实例-Linux驱动程序开发

时间:2023-10-19 理论教育 版权反馈
【摘要】:平台驱动的注册接口如下:int platform_driver_register;void platform_driver_unregister;platform_driver_register和platform_driver_unregister本质上就是调用driver_register和driver_unregister。老的Linux内核需要在模块入口中调用这两个函数,新的Linux内核中只需要用module_platform_driver即可实现这两个函数的功能,具体用法见本节后面的例2.2。resource结构是对平台资源的描述,定义如下:在platform_device结构中可以设置多种资源信息。struct resource*platform_get_resource;//根据序号获取资源中的中断号。struct int platform_get_irq;//根据名称和类别获取指定的资源。int platform_get_irq_byname;例2.2 平台设备注册实例本例代码在\samples\2model\2-2module_plateform。

平台概念及实例-Linux驱动程序开发

平台概念的引入能够更好地描述设备的资源信息,例如总线地址、中断、DMA信息等。平台设备模型是对device与driver模型的扩展,它的总线为platform_bus_type:

平台设备使用platform_device结构描述,该结构定义如下:

平台设备的注册与注销接口如下:

int platform_device_register(struct platform_device*);//注册一个平台设备

void platform_device_unregister(struct platform_device*);//注销一个平台设备

平台驱动使用platform_driver结构描述:

平台设备驱动必须提供probe和remove方法,并且在probe中确保设备资源的可用性。平台驱动还支持电源管理和设备停止等事件。平台驱动的注册接口如下:

int platform_driver_register(struct platform_driver*drv);

void platform_driver_unregister(struct platform_driver*drv);

platform_driver_register和platform_driver_unregister本质上就是调用driver_register和driver_unregister。老的Linux内核需要在模块入口中调用这两个函数,新的Linux内核中只需要用module_platform_driver即可实现这两个函数的功能,具体用法见本节后面的例2.2。

resource结构是对平台资源的描述,定义如下:

在platform_device结构中可以设置多种资源信息。资源的flags标志包括:

#define IORESOURCE_IO 0x00000100//IO资源

#define IORESOURCE_MEM 0x00000200//内存资源

#define IORESOURCE_IRQ 0x00000400//中断资源

#define IORESOURCE_DMA 0x00000800//DMA资源

内核提供了一组函数,用来获取设备的资源信息:

//根据资源类型和序号来获取指定的资源。

struct resource*platform_get_resource(struct platform_device*dev,unsigned int type,unsigned int num);(www.xing528.com)

//根据序号获取资源中的中断号。

struct int platform_get_irq(struct platform_device*dev,unsigned int num);

//根据名称和类别获取指定的资源。

struct resource*platform_get_resource_byname(struct platform_device*dev,unsigned int type,char*name);

//根据名称获取资源中的中断号。

int platform_get_irq_byname(struct platform_device*dev,char*name);

例2.2 平台设备注册实例

本例代码在\samples\2model\2-2module_plateform。核心代码如下:

运行结果如下:

[root@urbetter drivers]#insmod plateformtest.ko

plate_test_probe enter...

[root@urbetter drivers]#rmmod plateformtest

plate_test_probe remove...

[root@urbetter drivers]#

例2.3 DM9000网卡平台设备资源获取实例

本例为DM9000网卡设备的资源获取实例。核心代码如下:

注册MMC平台设备驱动的代码如下:

上面的代码中使用了module_platform_driver取代旧的模块入口编写方式。设备检测函数dm9000_probe展示了获取平台设备资源的方法:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈