我想通过编程确定 CMOS 电池是否正常工作。在我的 Linux C++ 程序中,如果 CMOS 电池不存在或不工作,我想连接到互联网并更新系统时间。
答案1
我相信如果发生校验和错误,BIOS 会在 CMOS RAM 的某处设置一个位。但这因主板制造商而异。
有一件事可能会有用......
- 在关机时转储 CMOS RAM -
dd if=/dev/nvram of=cmos_ram.bin
可能会这样做。 - 通电后即可检索。
- 与上次关机时保存的文件进行比较。如果不匹配,则 CMOS 已被更改或损坏。系统时间更新也是如此。
老实说,由于许多 CMOS 时钟的漂移和不准确性,您应该在每次启动时更新系统时间。
答案2
吻!
始终使用 NTP 来校正时间(ntpdate 然后是 ntpd)。
这样,您就始终拥有正确的时间。这就是没有 CMOS 或内部时钟的计算机所做的。
无需构建任何其他程序(它们已经存在)也无需检查 CMOS(有它会很好,但不是必需的)
答案3
这可能是可行的,但可能不会跨平台(因为您想在 PC 和 BeagleBone 上使用它,而它们的硬件有很大差异)。
运行 ntp,无论电池状态如何,它都会始终保持您的时间正确。