【原創】ARM LINUX 外部RTC實時時鐘驅動移植(RX8025)
Author: chad
Mail: [email protected]
開發板:AT91SAM9260
內核版本:linux-2.6.30
解決辦法如下:
第一步:修改board-sam9260ek.c文件
修改/arch/arm/match-at91/board-sam9260ek.c
,添加如下代碼:
在ek_board_init
函數中添加i2c設備:
添加at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
第二步:增加RX8025文件及配置選項
參考修改linux-2.6.30/drivers/rtc/rtc-rx8581.c
增加rtc-rx8025.c
。同時修改Kconfig文件與Makefile文件,將8025添加到對應文件中。
第三步:配置menuconfig
AT91SAM9260使用的是GPIO模擬I2C接口,
在devicedriver中選中【*】I2C support->I2C Hardware Bus Support->GPIO-based bitbanging I2C
在devicedriver中選中Real time clock
--- Real Time Clock
[*] Set system time from RTC on startup and resume
(rtc0) RTC used to set the system time
[ ] RTC debug support
*** RTC interfaces ***
[*] /sys/class/rtc/rtcN (sysfs)
[*] /proc/driver/rtc (procfs for rtc0)
[*] /dev/rtcN (character devices)
[ ] RTC UIE emulation on dev interface
< > Test driver/device
*** I2C RTC drivers ***
。。。。。。。。。
<*> Epson RX-8025
最後的on-CPU RTC drivers選項要取消!!!
*** on-CPU RTC drivers ***
< > AT91SAM9x/AT91CAP9
第四步:修改驅動程序
參考rtc-rx8581.c 與rx8025的數據手冊編寫 8025的驅動文件rtc-rx8025.c。
驅動源文件下載點->>>這裏
需要注意的是:
/arch/arm/match-at91/board-sam9260ek.c
文件中的 :
static struct i2c_board_info __initdata ek_i2c_devices[] = {
/* more devices can be added using expansion connectors */
{
I2C_BOARD_INFO("rx8025", 0x32),
}
};
要與/drivers/rtc/rtc-rx8025.c
中的設備名一致!
static const struct i2c_device_id rx8025_id[] = {
{ "rx8025", 0 }
};
第五步:測試
更新系統內核進行測試:
#uboot命令如下:
tftp 0x22000000 uImage
nand erase 0xa0000 0x2a0000
bootm
內核打印信息如下:
hwclock 測試如下: