Reading rtc on FreeBSD

phil hefferan wdef200 at gmail.com
Thu Aug 19 12:50:26 UTC 2010


On Thu, Aug 19, 2010 at 2:38 PM, Peter Jeremy <peterjeremy at acm.org> wrote:

> Repeating your question will not encourage an answer.
>

I realize that - it was inadvertent and sloppy. I assumed the yahoo post
hadn't gone through when I posted from gmail. Again I apologize for the bad
netiquette.

>
> On 2010-Aug-19 13:09:46 +0300, phil hefferan <wdef200 at gmail.com> wrote:
> >I've been looking around for how to read the cmos/rtc on FreeBSD. There is
> >no hwclock utility in FreeBSD that I can read sources for to see how it is
> >done.
>
> The RTC is only accessed within the kernel (/sys/isa/atrtc.c for
> i386 and amd64) and read in /sys/kern/subr_rtc.c::inittodr()
>
> Thanks.  No equivalent to an ioctl on /dev/rtc/

>
> >implies that, on FreeBSD, gettimeofday reads the software time and
> >settimeofday sets the cmos clock. I read here
> >http://www.mail-archive.com/freebsd-hardware@freebsd.org/msg03414.htmlthat
> >settimeofday in fact sets both rtc and system time together.
>
> gettimeofday(2) reads the software clock only.
> settimeofday(2) writes both the software clock and RTC.
>
>
This might explain why some people assume the RTC is automatically synced to
software time.  If they change the software time, presumably this is most
likely done through settimeofday()?

This suggests also that comparing software time and RTC won't be useful for
what I want to do (detect if software time has been changed) since
settimeofday will have synced these if it has been changed.

Is there any other clock that can be read in userspace which does not change
immediately if software time is changed?


> >BUT the source to adjkerntz.c for FreeBSD seems to say that gettimeofday
> >reads the CMOS clock not the system time:
> >
> >/* get local CMOS clock and possible kernel offset */
> >if (gettimeofday(&tv, &tz)) {
> >    syslog(LOG_ERR, "gettimeofday: %m");
> >    return 1;
> >}
>
> That comment is incorrect.
>
> Maybe worth a bug report?  Also - wondering then if adjkerntz is actually
working as advertised.


> >Which is it? Does gettimeofday read the cmos clock/rtc on FreeBSD? If not,
> >how do I read the battery-backed clock on FreeBSD?
>
> There is no managed access to the RTC in FreeBSD.  Your only option to
> read the RTC is to directly access its IO port registers via io(4) or
> i386_set_ioperm(2)
>
> Thanks Peter.

-phil


More information about the freebsd-hackers mailing list