안녕하세요, 리눅스 초보자입니다.

S3C2440 보드에 외부 rtc(i2c 인터페이스, ds1307)을 배터리와 함께 달아놓았습니다.

 

문제는... 외부 RTC에 시간설정하는 방법을 모르겠습니다.

 

현재까지 되는것은 다음과 같습니다.

1. 시스템 초기시간은 RTC에서 읽어서 초기화됩니다.

   커널 menuconfig에서 설정하였고, 정상동작하네요. 

  -> Devicd Drivers
   -> Real Tiem Clock
    [*] Set system time from RTC on startup
    (rtc1) The RTC to read the time from

    ...

 <*> DS1307 and similar I2C RTC chips.

   ...
 

  부팅로그는...

  s3c2440-i2c s3c2440-i2c: slave address 0x10
 s3c2440-i2c s3c2440-i2c: bus frequency set to 378 KHz
 ds1307 0-0068: rtc core: registered ds1307 as rtc1
 s3c2440-i2c s3c2440-i2c: i2c-0: S3C I2C adapter
  정상인듯 합니다.

 

2. 시간정보는 조회됩니다.

  /sys/class/rtc/rtc1 인터페이스는 생성되어 있고,

 $cat name

 ds1307

 $cat time

 05:13:03

처럼, 시간정보도 제대로 가고... 시스템파워를 off -> on 해도 기존시간 잘 유지됩니다.

 

문제1. 응용프로그램에서 RTC1에서 시간 읽는방법은 ?

  /dev/rtc1이 없어서 다음과 같이 만들었습니다.

  $mknod /dev/rtc1 c 254 1            // <-- 맞는가요 ?   rtc dev major 가 254라서...

 

 응용프로그램에서 rtc1(ds1307)의 시간을 읽기위해 다음과 같이 간단한 테스트 프로그램을 짜서 돌려봤는데,

  계속 에러가 납니다.

 

  ...

  dev = open("/dev/rtc1", O_RDONLY);   // <-- 정상.

  ....

  ioctl(dev, RTC_RD_TIME, &t1);   // <---- ERROR (-1)을 리턴함.

 

왜일까요 ?

  (물론, /sys/..../rtc1 의 파일을 읽으면 되긴 하지만.... /dev/rtc1 에서 ioctl()로 못읽는게 이상해서요..)

  

감사합니다.