본문 바로가기
IT/linux

리눅스 부팅 시 date 가 맞지 않을 때 해결 방법

by 어느해겨울 2021. 12. 20.

리눅스 부팅 시 date 가 맞지 않을 때

 

임베디드 리눅스 장치에서 sntp를 사용하지 않고 date 및 hwclock을 사용하여 시간을 설정하였으나 물리 리셋(전원을 내렸다 올림)을 하면 2000년 1월 1일 xx시 xx분 xx초로 변경이 되는 상황이 발생하였다.

하지만 소프트웨어 리셋(reboot)을 통하여 재부팅을 하면 유지가 되었다.

 

원인을 찾기 위해 자사 템플릿 내부에서 시간을 제어하는 모듈을 모두 비활성하였고 dmesg 명령을 실행하여 time, date, rtc 같이 시간과 관련 있는 항목을 찾다 보니 아래 화면 같은 rtc 같은 현상을 발견하였다.

블록 잡은 라인 처럼 재부팅 시 시스템 클럭이 바뀌는 현상

그럼 rtc 드라이버의 문제인가? 라고 생각했지만 동일한 빌드 환경과 펌웨어를 사용하는 다른 장치에서는 똑같이 "setting system clock to xxxx" 이 현시되었으나 정상 동작하는 것을 확인하였다.

 

문제 해결을 위해 접근한 방법은,

1. 소프트웨어적 요소 배제

2. 드라이버 요소 배제

3. 동일 하드웨어 및 펌웨어 간 대조

를 통해서 위 3가지는 모두 문제 없다고 판단하였다.

 

그러고 나서 알게 된 정답은 정말 간단했다. 머더보드에 rtc 배터리의 수명이 다된 것이었다..

동일 환경 동일 하드웨어 동일 펌웨어라고 방심말고 늘 외적인 요소도 고려하는 습관을 갖아야 한다.

 

요약. 배터리 갈고 해결됨.

 

# dmesg

dmesg is used to examine or control the kernel ring buffer.
The default action is to display all messages from the kernel ring buffer.

https://man7.org/linux/man-pages/man1/dmesg.1.html

 

dmesg(1) - Linux manual page

dmesg(1) — Linux manual page DMESG(1) User Commands DMESG(1) NAME         top dmesg - print or control the kernel ring buffer SYNOPSIS         top dmesg [options] dmesg --clear dmesg --read-clear [options] dmesg --console-level level dmesg --cons

man7.org

정의하자면 커널 메시지를 현시하는 명령어이다. 사용자 정의로 커널 메시지를 찍을 수 있지만 대부분의 경우 드라이버가 호출될 때 동작하며 현시되는 메시지들이다.

시스템이 생각처럼 동작하지 않을 때 자주 확인하자.

 

 

댓글