2012/01/26

VxWorks에서 NTP를 이용하여 시간 맞추기.

  1. NTP 서버를 마련한다.
    1. Windows 계열 PC를 NTP 서버로 설정하는 방법은 널리(?) 일려져 있으니 구글 검색..
    2. 방화벽으로 막혀 있을수 있으니 UDP 123 포트는 열어둘것. (이거 안해서 몇시간 공생했음..) 
  2. VxWorks kernel에서 SNTP 추가한다. (INCLUDE_IPSNTPC)
    1. 세부 설정에서 server IP 설정
이렇게 까지만 하면 잘 동작하는데... NTP 서버 시간을 UTC  시간으로 인식한다. 
즉 서버의 시간이 오후 1시 33분이면 vxWorks 장비에서는 04:33분으로 생각...
뭐.. 이가지만 해도 좋으면 그냥 둬도 되는데... TIMEZONE 변수로 맞출수도 있다.

->putenv("TIMEZONE=KST::-540:000000:000000")
이렇게 하면 동작 함...
(daylight 기능은 확인안해봤지만 될것 같은 느낌....)


-> t = time()
t = 0x7912b70: value = 1327552404 = 0x4f20d794
-> printf("%s\n", asctime(gmtime(&t)))
THU JAN 26 04:33:24 2012
value = 26 = 0x1a
-> printf("%s\n", asctime(localtime(&t)))
THU JAN 26 13:33:24 2012
value = 26 = 0x1a


** 기타 시간관련 함수는 ansiTime 관련 도움말 참고...
** bsp에서 RTC 관련 시간은 바뀌지 않기때문에 시간 관련 함수 통일할것...

댓글 1개:

Unknown :

VxWorks로 NTP Client 구현해야해서 찾아봤는데 바로 나와서 잘 보고갑니다 ^^
근데 궁금한게 있어요!

1. NTP서버시간을 UTC로 인식한다
받은 시간이 13:33인데 이걸 UTC로 인식해서 현지 시각으로 맞춰서 4:33 으로 출력한다는거죠??
우리나라는 GMT+9인데.. 제생각엔 13:33 -> 22:33 으로 나오는게 맞는것 같은데 잘못 이해한걸까요? ㅎㅎ

아니면.. 받은 시각을 UTC로 변환해서 출력해준다는 말씀이신가요? 약간 헷갈리네요~~ㅎㅎ

2. putenv("TIMEOZNE")으로 문제해결?!
TIMEZONE으로 해결 가능하다고 하셨는데 밑에 코드 보니까 시간을 출력하신게 gmtime과 localtime 두가지를 쓰셨더라구요.

문제가 되셨던게 localtime()사용시 처음에는 GMT로 나왔다가 putenv하니까 localtime()이 제대로 나온건가요~? ㅎㅎ

궁금합니다 ^^

3. 그냥..
제생각엔 putenv로 TIMEZONE 설정을 따로 KST로 해줘야 받아온 시각을 GMT+9로 계산해주는게 아닌가 싶네요!

답변은 메일로 주시면 감사하겠습니다 ^^

nacl1119@daum.net