分类: LINUX
2009-11-20 12:27:23
我的项目用的是优龙AT9261核心板+自主开发的主板。系统用的是linux2.6.24。一开始用的是9261自带的RTC时钟,外接一后备电池。但发现9261自带时钟十分耗电,在使用CR1220电池供电时,大约只能维持一个星期左右电量即耗尽,因此决定改为DS1337C。用此芯片的原因主要是省电,内置晶振,使用方便,走时准确,且linux内核自带驱动。此芯片接口是i2c接口因此,重新配置内核,加开I2C选项,并打开其下的GPIO-based bitbanging I2C选项,以使用软件模拟的i2c接口。注意不能使用Atmel AT91 I2C Two-Wire interface (TWI)选项打开AT9261硬件i2C接口,因为硬件接口在linux下极不稳定。关闭realtime clock下的on cpu rtc driver。打开 Dallas/Maxim DS1307/37/38/39/40, ST M41T00选项,使用内核自带的DS1337驱动。重新编译内核,顺利通过,下载到板子上,重新系统,系统报告找到/dev/rtc。经过一翻努力,查找了很多资料,终于发现还要在板子初始化时,加入i2c的相关初化代码。在linux-2.6.24/arch/arm/mach-at91/board-sam9261ek.c中加入以下代码。
static struct i2c_board_info __initdata RTC_i2c_devices[] = {
{
I2C_BOARD_INFO("rtc-ds1307", 0x68),
.type = "ds1307",
},
};
并将
static void __init ek_board_init(void)中的at91_add_device_i2c(NULL, 0);改为at91_add_device_i2c(RTC_i2c_devices, ARRAY_SIZE(RTC_i2c_devices));
重新编译,问题解决。