Есть у "малиновой" платы один недостаток - нет у нее часов реального времени. Недостаток не фатальный и исправляется он покупкой и установкой маленькой платы с батарейкой, или большой платы, в которой уже есть этот чип и батарейка. У меня был второй вариант. Аппаратно всё просто, а программно не очень.
Главная проблема в том, что производитель этого чипа предоставляет свою сборку ядра и бинарный модуль только для одной старой версии ядра. Но есть и хорошие новости. С версии 3.12.20 модуль входит в состав ядра.
Итак, для начала обновим ядро с модулями и видео-драйверами:
$ sudo rpi-update
И перезагрузим систему:
$ sudo reboot
Теперь можно начинать колдовать.
Действовать будем по инструкции со странице, посвященной плате, на которой установлен чип pcf2127a. Он немного отличается от версии без буквы "a" в названии, но в целом совместим.
Сначала надо установить пакет "i2c-tools":
$ sudo apt-get update
$ sudo apt-get install i2c-tools
Теперь надо загрузить модуль ядра "i2c_bcm2708" для доступа в шине i2c:
$ sudo modprobe i2c_bcm2708
Проверим, что таймер на шине виден:
$ sudo i2cdetect 1
Вместо единицы надо подставить номер адаптера, к которому подключен таймер. Список всех адаптеров можно посмотреть командой
$ sudo i2cdetect -l
Она выдаст примерно такой список:
i2c-0 i2c bcm2708_i2c.0 I2C adapter
i2c-1 i2c bcm2708_i2c.1 I2C adapter
Вернемся к нашим баранам. Таймер обычно виден по адресу 0x51, о чем свидетельствует вывод i2cdetect:
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Итак, таймер найден, теперь надо объяснить системе, что это часы реального времени. Для этого сначала загрузим модуль для работы с этим устройством:
$ sudo modprobe rtc_pcf2127
И дадим команду на идентификацию устройства по аресу 0x51 на шине №1 как pcf2127:
$ su -c "echo pcf2127 0x51 > /sys/class/i2c-adapter/i2c-1/new_device"
В выводе dmesg должно появится примерно следующее:
[ 44.356516] rtc-pcf2127 1-0051: chip found, driver version 0.0.1
[ 44.392866] rtc-pcf2127 1-0051: rtc core: registered rtc-pcf2127 as rtc0
[ 44.410622] i2c i2c-1: new_device: Instantiated device pcf2127 at 0x51
Теперь попробуем прочитать время из таймера:
$ sudo hwclock
Птн 30 Май 2014 20:47:50 -0.148104 секунд
Если вместо ошибки программа выдала время, то всё отлично.
Теперь закрепим результат.
Сперва будем строить, а потом уже рушить.
Для загрузки нужных модулей при старте системы пропишем их в файл "/etc/modules" в таком порядке:
i2c-dev
i2c-bcm2708
rtc_pcf2127
Система работать с RTC на шине i2c самостоятельно не умеет, поэтому для синхронизации системных часов с таймером добавим в файл "/etc/rc.local" следующие команды:
echo pcf2127 0x51 > /sys/class/i2c-adapter/i2c-1/new_device sleep 2 hwclock -s
Первая команда создаёт в системе новой устройство, вторая даёт задержку на его инициализацию, а третья синхронизирует системное время с RTC.
Теперь можно отключить или совсем удалить программу "fake-hwclock":
$ sudo update-rc.d fake-hwclock disable
$ sudo rm /etc/cron.hourly/fake-hwclock
$ sudo apt-get remove fake-hwclock
Чем больше команд, тем больше разрушений.
Теперь можно перезагрузить систему и проверить, что всё работает так, как задумано.
Инструкция составлена при помощи гугления, слез, мата и метода тыка.