ds1307(I2C)驱动分配内存老出错!
at91rm9200的开发板上带有一块DS1307的RTC芯片,现在在开发它的驱动时老是出现问题,请大侠帮我分析一下原因,谢谢!
程序代码如下:
static struct resource twi_resources[] = {
[0] = {
.start = AT91RM9200_BASE_TWI,
.end = AT91RM9200_BASE_TWI + SZ_16K - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = AT91RM9200_ID_TWI,
.end = AT91RM9200_ID_TWI,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device at91rm9200_twi_device = {
.name = "at91_i2c",
.id = -1,
.resource = twi_resources,
.num_resources = ARRAY_SIZE(twi_resources),
};
..........................
int AT91F_TWI_Init(void)
{
struct resource *res;
//printk("Into AT91F_TWI_Init\r\n");
res = platform_get_resource(&at91rm9200_twi_device, IORESOURCE_MEM, 0);
if (!res)
return -ENXIO;
if(!request_mem_region(res->start, res->end - res->start + 1, "at91_twi"))
return -EBUSY;
twi_base = ioremap(res->start, res->end - res->start + 1);
if(!twi_base)
{
release_mem_region(res->start, res->end - res->start + 1);
return -ENOMEM;
}
................................
老是在(!request_mem_region(res->start, res->end - res->start + 1, "at91_twi"))出错,我在/dev下查看了有/dev/rtc,是linux内核自带的RTC,我也看了内核中request_mem_region()的定义,返回为空是因为资源冲突,会不会是我编译的驱动与内核自带的RTC资源有冲突,请大侠帮我分析一下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
很有可能是RTC应经被占用了,所以发生资源冲突
我也怀疑是这样的,因为内核里也有一个ds1307的RTC驱动,不知道怎么改啊!
既然内核已经有,你就不必再开发了。怎么还要改呢? 确定它能正常工作就行。
楼主是要开发i2c的驱动,还是RTC的驱动。从你的做法看,你是在重新开发i2c适配器的驱动(这个操作系统基本有了),所以你再申请IO内存资源,当然会有问题。