При компиляции ядра установил в
конфиге следующие:
Set system time from RTC on startup and resume
(RTC_HCTOSYS)
Интерфейс часов
RTC interfaces
/sys/class/rtc/rtcN (sysfs) (RTC_INTF_SYSFS)
/proc/driver/rtc (procfs for rtc0) (RTC_INTF_PROC)
/dev/rtcN (character devices) (RTC_INTF_DEV)
RTC UIE emulation on dev interface
(RTC_INTF_DEV_UIE_EMUL)
и драйвер устройства I2C
Ramtron FM3130 (RTC_DRV_FM3130)
Но устройств /sys/class/rtc/rtcN, /dev/rtcN в файловой
системе не обнаружил.
Как мне думается в исходниках ядра, а именно в файле
/linux-2.6.36/arch/arm/mach-at91/board-sam9263ek.c
в месте, где инициализируются структуры устройств I2C
/*
* I2C devices
*/
static struct at24_platform_data at24c512 = {
.byte_len = SZ_512K / 8,
.page_size = 128,
.flags = AT24_FLAG_ADDR16,
};
static struct i2c_board_info __initdata ek_i2c_devices[] =
{
{
I2C_BOARD_INFO("24c512", 0x50),
.platform_data = &at24c512,
},
/* more devices can be added using expansion connectors */
};
вместо at24c512 (у нас этой микросхемы нет) надо прописать
структуру для rtc FM3130 и для памяти FM3130, но что там
надо писать не знаю и где почитать по этому поводу, так же
не нашел.
Скорей всего достаточно дописать в структуру
static struct i2c_board_info __initdata ek_i2c_devices[] =
еще одно устройство
{
I2C_BOARD_INFO("fm3130", 0x68),
},
или записать вместо этой, если у вас нет такой памяти (и убрать структуру static struct at24_platform_data at24c512 )
{
I2C_BOARD_INFO("24c512", 0x50),
.platform_data = &at24c512,
},
При загрузке и в файловой системе часы обозначились
rtc-fm3130 0-0068: Low battery!
rtc-fm3130 0-0068: rtc core: registered fm3130 as rtc0
но я не понял почему адрес слейва 0х68
в даташите пишут: To access this device, bits 7-4
of the slave address should be set to 1101b
Даташит до конца не читал, это верно. Я же не драйвер пишу. Он уже есть. На картинке я вижу 0xd0. Почему при инициализации это число надо сдвинуть на 1 вправо тогда и будет 0x68. В даташите ни про какие сдвиги не вижу.