1

Я хочу программно определить, работает ли батарея CMOS или нет. В моей программе C++ на Linux я хочу подключиться к Интернету и обновить системное время, если батарея CMOS отсутствует или не работает.

3 ответа3

3

Я полагаю, что BIOS где-то устанавливается в ОЗУ CMOS, если произошла ошибка контрольной суммы. Но это характерно для каждого производителя материнских плат.

Одна вещь, которая может работать ...

  • Дамп памяти CMOS при завершении работы - вероятно, это сделает dd if=/dev/nvram of=cmos_ram.bin .
  • Получить его при включении питания.
  • Сравните с сохраненным файлом с момента последнего выключения. Если есть несоответствие, CMOS был изменен или поврежден. Так же как и обновление системного времени.

Честно говоря, из-за смещения и неточности многих часов CMOS вы должны обновлять системное время при каждой загрузке.

1

ПОЦЕЛУЙ!

всегда используйте NTP для корректировки времени (ntpdate, а затем ntpd).

Таким образом, у вас всегда будет правильное время. Это то, что делает компьютер без CMOS или внутренних часов.

Нет необходимости создавать какие-либо другие программы (они уже существуют) и проверять CMOS (это хорошо, но не обязательно)

0

Это может быть возможно, но, скорее всего, не будет кроссплатформенным (поскольку вы хотите использовать его как на ПК, так и на BeagleBone, которые имеют совершенно разное оборудование).

Запустите ntp, который всегда будет поддерживать правильное время независимо от состояния батареи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .