platform_device resource在哪定义

      平台:S3C6410,OS:Linux 2.6.38 

       现在知道了,需要定义和注册platform_device和platform_driver。但是我看一个IIC的驱动代码中,只找到了struct platform_driver的定义,却没有对struct platform_device和其中的成员struct resource进行定义和注册,难道这个不需要驱动来做,而需要内核自动完成的吗?其实不是,这个也需要自己去写的,只是不是写在自己的驱动程序中,而是把它添加到内核中的某个文件中。

     比如,如果你要写IIC驱动,首先要在/arch/arm/mach-s3c64xx/mach-smdk6410.c中添加代码。此文件中有如下代码:

static struct platform_device *smdk6410_devices[] __initdata = {
#ifdef CONFIG_SMDK6410_SD_CH0
	&s3c_device_hsmmc0,
#endif
#ifdef CONFIG_SMDK6410_SD_CH1
	&s3c_device_hsmmc1,
#endif
       &...................
       &.....................

}

我们需要在platform_device中,添加一项& xxx,其中xxx是你自己定义的platform_device的名字,(这个在Dev-i2c0.c中定义的),如:

struct platform_device xxx = {
	.name		  = "s3c6410-i2c",
	.id		  = -1,
	.num_resources	  = ARRAY_SIZE(s3c_i2c_resource),
	.resource	  = s3c_i2c_resource,
};

可以看到,除了名字name和序号id之外,还有一个重要的成员resource,在这之前还需定义resource,如:

static struct resource s3c_i2c_resource[] = {
	[0] = {
		.start = S3C_PA_IIC,
		.end   = S3C_PA_IIC + SZ_4K - 1,
		.flags = IORESOURCE_MEM,
	},
	[1] = {
		.start = IRQ_IIC,
		.end   = IRQ_IIC,
		.flags = IORESOURCE_IRQ,
	},
};
这个结构定义了设备的资源信息,第一个是内存资源,start和end表示该platform_device所占内存的起始地址和结束地址,第二个是中断资源,start和end表示终端号的开始值和结束值,上例中start和end一样,说明只使用一个中断号。注:同类资源可以有多个。

resource的原型为:

struct resource {

    resource_size_t start;  //资源起始地址

    resource_size_t end;    //资源结束地址

    const char *name;     

    unsigned long flags;    //资源类型

    struct resource *parent, *sibling, *child;

};
只需关注start、end和flags即可。flags可以为IORESOURCE_IO、IORESOURCE_MEM、IORESOURCE_IRQ、IORESOURCE_DMA等。

关于platform_device的注册——platform_add_devices,也是在/arch/arm/mach-s3c64xx/mach-smdk6410.c文件的init函数中,这个是不需要自己写的。

思路就是:把自己platform_device添加到内核的platform_device列表中,让内核统一管理。

platform_device和resource定义及注册完毕,接下来就是定义和注册platform_driver,关于这个内容,在自己的驱动代码中写就是了,也有很多参考资料,在此不再赘述。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值