Real Time Clock
Sebastian Huber
sebastian.huber at embedded-brains.de
Sat May 16 07:21:48 UTC 2009
Joel Sherrill wrote:
> Thomas Doerfler wrote:
>
>> Hi,
>>
>> I think it makes sense to convert the rtc access functions to
>> standardized "*_read" and "*_write" functions in the classic API driver
>> IF (instead of dedicated functions).
>>
>>
>>
> That makes sense. stat( "/dev/rtc" ) to get the major/minor?
>
Why don't open the device and read/write/control it?
>> It may surely make sense to map the POSIX timer functions to that device.
>>
>>
>>
> yes. But remember clockid_t is shared by the clock_[sg]ettime
> methods and so those would have to be covered.
>
>> Any further comments?
>>
>>
>>
> What GNU/Linux lets a user do? How do you write a program
> there to access the RTC? What does the program hwclock
> do?
>
> We will need a shell method similar to hwclock and it would
> be best to be able to port the BSD equivalent of that to the
> RTEMS Shell environment. Chris has already ported other
> BSD methods. This would require the API to be REALLY standard. :)
>
Do we really need such a big beast like hwclock? Even FreeBSD does not
seem to have something like that:
http://lists.freebsd.org/pipermail/freebsd-questions/2007-March/144321.html
Reading and setting the RTC should be sufficient for the moment. This is
enough to support the clock_* functions from POSIX. If someone needs
more he can add later IO controls.
> FYI psim on the head supports an RTC device.
>
> --joel
>
>> wkr,
>> Thomas.
>>
>> Sebastian Huber wrote:
>>
>>
>>> Hi,
>>>
>>> in order to support the POSIX clock_gettime(), clock_settime() and
>>> clock_getres() functions we need a RTC driver interface which can at least read
>>> and set the RTC. An interface proposal follows:
>>>
>>> /**
>>> * @file
>>> *
>>> * Real-time clock driver interface.
>>> */
>>>
>>> /*
>>> * COPYRIGHT (c) 1989-2001.
>>> * On-Line Applications Research Corporation (OAR).
>>> *
>>> * The license and distribution terms for this file may be
>>> * found in the file LICENSE in this distribution or at
>>> * http://www.rtems.com/license/LICENSE.
>>> *
>>> * $Id: rtc.h,v 1.4 2005/01/28 08:04:27 ralf Exp $
>>> */
>>>
>>> #ifndef _RTEMS_RTC_H
>>> #define _RTEMS_RTC_H
>>>
>>> #include <rtems.h>
>>>
>>> #ifdef __cplusplus
>>> extern "C" {
>>> #endif
>>>
>>> /**
>>> * @defgroup rtems_rtc Real-Time Clock Driver Interface
>>> *
>>> * This driver interface provides support to read and set the real-time clock
>>> * and to initialize the time of day for the system.
>>> *
>>> * @{
>>> */
>>>
>>> /**
>>> * Device file name path.
>>> */
>>> #define RTC_DEVICE_NAME "/dev/rtc"
>>>
>>> /**
>>> * Device driver table entry.
>>> */
>>> #define RTC_DRIVER_TABLE_ENTRY \
>>> { rtc_initialize, rtc_open, rtc_close, \
>>> rtc_read, rtc_write, rtc_control }
>>>
>>> /**
>>> * Initializes the real-time clock device and sets the time of day for the
>>> * system.
>>> *
>>> * If the real-time clock provides an invalid time of day value the system time
>>> * of day must remain untouched.
>>> */
>>> rtems_device_driver rtc_initialize(
>>> rtems_device_major_number,
>>> rtems_device_minor_number,
>>> void *
>>> );
>>>
>>> /**
>>> * Opens the real-time clock device.
>>> */
>>> rtems_device_driver rtc_open(
>>> rtems_device_major_number,
>>> rtems_device_minor_number,
>>> void *
>>> );
>>>
>>> /**
>>> * Closes the real-time clock device.
>>> */
>>> rtems_device_driver rtc_close(
>>> rtems_device_major_number,
>>> rtems_device_minor_number,
>>> void *
>>> );
>>>
>>> /**
>>> * Reads the real-time clock value.
>>> *
>>> * The value will be returned in a @ref rtems_time_of_day structure.
>>> */
>>> rtems_device_driver rtc_read(
>>> rtems_device_major_number,
>>> rtems_device_minor_number,
>>> void *
>>> );
>>>
>>> /**
>>> * Sets the real-time clock value.
>>> *
>>> * The value will be set from a @ref rtems_time_of_day structure.
>>> */
>>> rtems_device_driver rtc_write(
>>> rtems_device_major_number,
>>> rtems_device_minor_number,
>>> void *
>>> );
>>>
>>> /**
>>> * Controls the real-time clock.
>>> */
>>> rtems_device_driver rtc_control(
>>> rtems_device_major_number,
>>> rtems_device_minor_number,
>>> void *
>>> );
>>>
>>> /** @} */
>>>
>>> #ifdef __cplusplus
>>> }
>>> #endif
>>>
>>> #endif
>>>
>>>
>>>
>>
>>
>
>
>
More information about the users
mailing list