Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Aug 2010 15:50:11 +0300
From:      phil hefferan <wdef200@gmail.com>
To:        Peter Jeremy <peterjeremy@acm.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Reading rtc on FreeBSD
Message-ID:  <AANLkTinW-Pj-A12wf7a85A6bS4jBZusN7T49aYktk0hG@mail.gmail.com>
In-Reply-To: <20100819113833.GA59397@server.vk2pj.dyndns.org>
References:  <AANLkTinu-7wxfHU3OweQ3rM9P6DvR10gTxNYys8OEpjq@mail.gmail.com> <20100819113833.GA59397@server.vk2pj.dyndns.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Aug 19, 2010 at 2:38 PM, Peter Jeremy <peterjeremy@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@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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTinW-Pj-A12wf7a85A6bS4jBZusN7T49aYktk0hG>