Вопрос или проблема
Я вижу /proc/driver/rtc на моей встраиваемой плате Linux. Драйвер для этого rtc – rtc-snvs.ko. Если я запускаю команду ниже, я могу прочитать некоторые параметры, такие как rtc_time и rtc_data. “# cat /proc/driver/rtc” rtc_time : 20:17:16 rtc_data : 2025-01-20 24hr : да
Но я не знаю, как изменить/обновить этот параметр.
Также я нашел /sys/class/rtc, где rtc1 указывает на модуль rtc-snvs.ko. Но если я читаю дату из /sys/class, она равна “1970-01-01”, а время – “00:01:54”.
Мои вопросы здесь:
1. Как я могу получить доступ к /proc/driver/rtc, чтобы изменить значение параметров?
2. Почему значения из /proc/driver/rtc и /sys/class/rtc/rtc1 показывают разные значения, хотя они фактически используют один и тот же драйвер?
Ответ или решение
Теория
Доступ и модификация значений в /proc/driver/rtc
требует понимания особенностей устройства и файловой системы в Linux. Для начала, /proc
и /sys
— это псевдофайловые системы, которые предоставляют информацию о работе ядра и позволяют взаимодействовать с ядром и аппаратным обеспечением. Директория /proc
традиционно используется для предоставления информации о процессе и состоянии ядра, тогда как /sys
предоставляет интерфейс для взаимодействия с драйверами и устройствами.
В случае псевдофайлов /proc/driver/rtc
, они содержат информацию о параметрах системных часов реального времени (RTC). Эта информация обычно предназначена для чтения. Псевдофайлы не поддерживают стандартные операции записи, что означает невозможность изменения значений в них простым редактированием, как в обычных файлах.
Драйвер RTC (в Вашем случае rtc-snvs.ko
) управляет устройством RTC и предоставляет интерфейс для чтения и, возможно, изменения времени. Данные в /proc/driver/rtc
— эта копия данных в rtc-snvs.ko
, но могут отличаться из-за специфики самой сборки ядра и конфигурации драйвера.
Одна из ключевых особенностей заключается в том, что /proc
по своей сути не позволяет изменять данные непосредственно через стандартный интерфейс командной строки, поскольку это представление уже установленных значений на устройстве или в ядре.
Пример
Представим, что перед вами стоит задача изменить дату и время на RTC, используя подходы, которые отлично работают с другими системными параметрами. Вы видите, что при попытке вывести текущее время из /sys/class
, вы получаете ранние временные метки "1970-01-01", что указывают на то, что данная часть системы на самом деле отражает изначальное состояние времени, установившееся на момент загрузки системы.
Причина различий может варьироваться от проблем начальной установки времени BIOS до сосуществующих драйверов, которые считают разное время системным. Также это может быть результатом кеширования значений при инициализации системы. Каждое устройство может иметь UI ограничения, обеспечивающие минимальные функциональные требования.
Применение
-
Как изменить дату и время в RTC:
Изменение системных часов требует суперпользовательских прав. В современных системах Linux изменения параметров RTC обычно производится через утилиты, которые взаимодействуют с подсистемой RTC напрямую или через
/dev/rtc
.Чтобы изменить параметры времени, выполните следующие шаги:
-
Используйте команду
hwclock
, которая взаимодействует с устройством RTC:sudo hwclock --set --date="2025-01-20 20:17:16" sudo hwclock --hctosys
-
Указанные команды обновляют аппаратное время и синхронизируют системное время с аппаратным.
-
-
Различия в значениях времени:
Разница в значениях времени в
/proc/driver/rtc
и/sys/class/rtc/rtc1
может быть вызвана временным несоответствием из-за инициализации времени в системе. Возможно,/proc/driver/rtc
предоставляет актуальные данные непосредственно из RTC, тогда как/sys/class/rtc/rtc1
берет начальные значения при запуске системы до окончания инициализации.Разработчики системы иногда не синхронизируют аппаратные часы и системные в зависимости от специфики загрузочной последовательности и состояния бутлоадера.
Для поддержки операций чтения и записи будет полезно проконсультироваться с документами о драйвере rtc-snvs
и его возможных конфигурациях. Иногда смена времени через эти интерфейсы потребует модификаций в загрузочных скриптах или дополнительных фрагментов конфигурации для корректного завершения операций во время выполнения.
Профессиональный подход в решении таких проблем предполагает инициации полной системы тестов для проверки данных значений времени в каждом процессе и эксплуатационной окружении устройства.