Инструменты пользователя

Инструменты сайта


archlinuxarm

Это старая версия документа.


Arch Linux ARM

Обозначение типа архитектуры

ОбозначениеОписание
armv6lARMv6 little endian
armv6hARMv6 hard float

Источник: https://archlinuxarm.org/forum/viewtopic.php?f=31&t=5374

Часы реального времени на основе DS3231

Описывается настройка ОС для работы с модулем RTC на основе DS3231, подключенным по шине I2C.

  • Добавить следующую строку в конец файла /boot/config.txt:
dtoverlay=i2c-rtc,ds3231
  • Перезагрузить систему.
  • Проверить определение устройства:
$ dmesg | grep rtc
[   15.751681] rtc-ds1307 1-0068: rtc core: registered ds3231 as rtc0
  • Установить системное время через date -s.
  • Записать системное время в RTC:
# hwclock -w

Далее необходимо включить считывание времени из RTC при старте системы. Проверить, собрано ли ядро с опцией CONFIG_RTC_SYSTOHC:

cat < /sys/class/rtc/rtc0/hctosys

Если ответ 0, то опция выключена. Тогда остается единственный способ считывания часов при старте - через systemd.

Система может взять время либо из сети, либо из аппаратных часов RTC, если они обнаружены. За синхронизацию по сети отвечает служба systemd-timesyncd. Управлять службой можно через утилиту timedatectl. Проверить текущие настройки и время можно так:

# timedatectl status
      Local time: Sat 2017-01-28 10:42:32 UTC
  Universal time: Sat 2017-01-28 10:42:32 UTC
        RTC time: Sat 2017-01-28 10:42:32
       Time zone: UTC (UTC, +0000)
 Network time on: no
NTP synchronized: yes
 RTC in local TZ: no

В зависимости от ситуации, настроить синхронизацию по сети:

# timedatectl set-ntp 0 (отключить)
# timedatectl set-ntp 1 (включить)

Включение синхронизации по сети эквивалентно разрешению и запуску службы, т.е.

# systemctl enable systemd-timesyncd
# systemctl start systemd-timesyncd

Для аппаратных часов можно выбрать трактовку их значения как UTC или как местное время:

# timedatectl set-local-rtc 0 (UTC)
# timedatectl set-local-rtc 1 (местное время)

Судя по всему, за синхронизацию системного времени с аппаратными часами отвечает только ядро, если оно собрано с опцией CONFIG_RTC_SYSTOHC. Никакие штатные сервисы systemd не делают это. Поэтому остается только вариант вручную создать unit для данной службы. Создаем скрипт /usr/local/sbin/rtc, который собственно и синхронизирует системное время:

#!/bin/bash
hwclock -s

Делаем файл исполняемым.

Создаем файл описания службы /etc/systemd/system/rtc.service с содержанием:

[Unit]
Description=Sync time with hardware clock
Before=netctl-auto@wlan0.service

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/rtc

[Install]
WantedBy=multi-user.target

Запускаем службу:

systemctl start rtc

Проверяем время через timedatectl status. Если системное время установлено успешно, смотрим статус службы и разрешаем её запуск при старте системы:

systemctl status rtc
systemctl enable rtc

Источники:
https://trick77.com/adding-ds3231-real-time-clock-raspberry-pi-3/
https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=161133
https://wiki.archlinux.org/index.php/Time
https://www.freedesktop.org/software/systemd/man/timedatectl.html

archlinuxarm.1485604125.txt.gz · Последние изменения: 2017/01/30 12:06 (внешнее изменение)