Linux设备驱动有三个重要概念:总线,设备和驱动。
向系统注册设备时,会寻找与之匹配的驱动;同样,向系统注册驱动时,会寻找与其匹配的设备。总线用来完成匹配的动作。
platform总线是Linux提供的一种虚拟总线,设备用struct platform_device表示,驱动用struct platform_driver表示。
- platfrom_device结构体
struct platform_device {
const char *name;
u32 id;
struct device dev;
u32 num_resources;
struct resource *resource;
};
platform_device的重要成员:resources,其数据结构为:
struct resource {
const char *name;
unsigned long start, end;
unsigned long flags;
struct resource *parent, *sibling, *child;
};
start,end标明资源的开始值和结束值,flags为IORESOURCE_MEM,start,end表示platform_device内存的开始地址和结束地址;flags为IORESOURCE_IRQ,则表示platform_device使用中断号的开始值和结束值。
驱动程序中获取resource使用函数:
struct resource *platform_get_resource(struct platform_device *dev, unsigned i