Я хочу программно определить, работает ли батарея CMOS или нет. В моей программе C++ на Linux я хочу подключиться к Интернету и обновить системное время, если батарея CMOS отсутствует или не работает.
3 ответа
Я полагаю, что BIOS где-то устанавливается в ОЗУ CMOS, если произошла ошибка контрольной суммы. Но это характерно для каждого производителя материнских плат.
Одна вещь, которая может работать ...
- Дамп памяти CMOS при завершении работы - вероятно, это сделает
dd if=/dev/nvram of=cmos_ram.bin
. - Получить его при включении питания.
- Сравните с сохраненным файлом с момента последнего выключения. Если есть несоответствие, CMOS был изменен или поврежден. Так же как и обновление системного времени.
Честно говоря, из-за смещения и неточности многих часов CMOS вы должны обновлять системное время при каждой загрузке.
ПОЦЕЛУЙ!
всегда используйте NTP для корректировки времени (ntpdate, а затем ntpd).
Таким образом, у вас всегда будет правильное время. Это то, что делает компьютер без CMOS или внутренних часов.
Нет необходимости создавать какие-либо другие программы (они уже существуют) и проверять CMOS (это хорошо, но не обязательно)
Это может быть возможно, но, скорее всего, не будет кроссплатформенным (поскольку вы хотите использовать его как на ПК, так и на BeagleBone, которые имеют совершенно разное оборудование).
Запустите ntp, который всегда будет поддерживать правильное время независимо от состояния батареи.