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