Struct Platform device 详解
注:各设备的struct platform_device结构体在系统启动的时候定义,出于面向对象思想,将各设备用到的资源放在struct resource 结构体内,中段和地址。
其中struct platform_device定义在/arch/arm/plat_s3c24xx/devs.c里面
struct platform_device{
const char * name; //在bus/device和device/ 下面显示的名字
int id; //一般为-1,表示只有一个设备
struct device dev; //真正的dev结构体
其中dev里面 release函数必须加上,负责卸载的时候会出错
u32 num_resources;//表示有几个成员
一般等于ARRAY_SIZE(s3c_lcd_resource),
#defineARRAY_SIZE(arr) (sizeof(arr) /sizeof(arr[0]))
struct resource *resource; //资源的结构体,分为irq和mem
同数组一样,结构体的指针指向结构体数字的指针
Int *指针指向数组的首地址
struct platform_device_id *id_entry;
struct pdev_archdata archdata;
};
其中struct resource *resource结构体 在/linux/ioput.h 声明
struct resource {
resource_size_t start; //启示地址
//typedef unsigned int resource_size_t
resource_size_t end; //结束地址
const char *name;
unsigned long flags;
struct resource *parent, *sibling,*child;
};#defineIORESOURCE_MEM 0x00000200
#defineIORESOURCE_IRQ 0x00000400//linux/ioport.h
其中flags若为IQRESOURCE_IRQ,则start和end为这个设备的开始和结束的连续中断号,若为IQRESOURCE_MEM,则start和end为该设备的开始和结束地址,如果不连续则可以分开和连续定义,如果地址或者中断只有一个,则将start和end定义为一样