Я использую TI-Android-JB-4.2.2-DevKit-4.1.1 для создания Android для Beaglebone Black, который отлично работает. Я пытаюсь использовать RTC-Cape (http://elinux.org/CircuitCo:RTC_Cape). С «бортовым» Angström на BBB я смог установить и прочитать RTC вручную, поэтому я предполагаю, что аппаратное обеспечение в порядке.
Чтобы заставить RTC работать с Android, я добавил в файл kernel/arch/arm/mach-omap2/board-am335xevm.c
в структуру
static struct i2c_board_info __initdata am335x_i2c0_boardinfo[]
в конце
{
I2C_BOARD_INFO("ds1338", 0x68),
},
В kernel/arch/arm/configs/am335x_evm_android_defconfig
я активировал CONFIG_RTC_DRV_DS1307
(CONFIG_RTC_DRV_DS1307=y
) и деактивировал CONFIG_RTC_DRV_OMAP
.
При загрузке пишет
<4>[ 1.880767] rtc-ds1307: probe of 1-0068 failed with error -5
<6>[ 1.886779] i2c /dev entries driver
а также
<3>[ 2.306884] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
Я попытался адаптировать изменения из этого списка рассылки Beaglebone/Linux: https://groups.google.com/forum/#!msg/beagleboard/DegreEdtI-Q/ZEdFLNnuTvMJ.
Я новичок в конфигурации ядра Android/Linux. Как правильно включить и настроить RTC в ядре, чтобы его можно было использовать при загрузке?
С уважением
Матиас
Обновить
Оказывается, DS1338 на Beaglebone Balck Cape на самом деле подключен к 17 и 18 на P9, что является I2C1 или i2c-2 на Android. Эта шина деактивирована по умолчанию в Android. В качестве короткого обходного пути я обрезал печатные цепи и подключил их к 19 и 20 на P9 (I2C2 или i2c-3).
Затем я переместил блок I2C_BOARD_INFO
в
static struct i2c_board_info am335x_i2c2_boardinfo[]
Скомпилированное ядро теперь считывает время с RTC при загрузке.
Большое спасибо за подсказку, user3926077.
Правильным решением будет активировать i2c-2 в ядре Android и поместить блок I2C-BOARD_INFO
в static struct i2c_board_info am335x_i2c1_boardinfo[]
. К сожалению, на данный момент я не знаю, как этого добиться, и нам нужен RTC только для отладки, поэтому решение для пайки нам подходит.