Linux 커널 4.4.15를 실행하는 시스템 모듈(SOM)이 포함된 사용자 정의 보드가 있습니다. 보드에는 작은 배터리로 백업되는 RTC가 있습니다.
내 보드는 현재 네트워크 연결 없이 실행되고 있습니다.
두 개의 서로 다른 SOM이 있습니다. SOM A를 연결한 다음 장치를 부팅하면
$date returns date in Feb 2020
$hwclock returns same date/time in Feb 2020
시스템 시간과 RTC를 업데이트한 다음 플러그를 뽑고 재부팅하면 두 명령 모두 동일한 날짜(2020년 2월)로 반환됩니다.
SOM B를 연결하고 장치를 부팅하면 부팅 시 반환된 날짜가 2020년 5월 날짜/시간(실제로는 어제)이라는 점을 제외하면 결과는 동일합니다.
부팅 시 RTC에서 시간을 다시 읽는 데 문제가 있는 것 같습니다. 그러면 시스템이 어딘가에서 저장된 날짜/시간을 가져옵니다. 그런데 그게 어디일까요?
/etc/init.d(모든 rc.X 폴더에 연결되어 있음)에서 hwclock.sh 스크립트도 삭제했습니다.
또한 다른 호출자가 rtc를 설정하지 못하도록 hwclock 바이너리를 /sbin/에서 다른 곳으로 옮겼지만 부팅 후 수동으로 실행하면 여전히 잘못된 날짜/시간(2020년 2월 또는 어제)이 있는 것 같습니다. 이것도 이상해 보입니다. hwclock 바이너리가 정상 위치에 있지 않은 경우 어떻게 시스템 시계와 hwclock이 전원을 껐다가 켠 후 동일한 시간을 보고할 수 있습니까?
파일에 시간을 기록하고 이를 사용하여 시작 시 시스템 시간을 설정할 수 있는 다른 서비스/위치가 있습니까?
편집하다:
시스템 및 RTC 시간 설정
$ cat /proc/driver/rtc
rtc_time : 00:00:16
rtc_date : 2020-05-15
alrm_time : 00:00:00
alrm_date : 1970-01-01
alarm_IRQ : no
alrm_pending : no
update IRQ enabled : no
periodic IRQ enabled : no
periodic IRQ frequency : 1
max user IRQ frequency : 64
24hr : yes
전원 주기가 완료되고 RTC가 복원되었습니다.
$cat /proc/driver/rtc
rtc_time : 14:54:22
rtc_date : 2020-05-14
alrm_time : 00:00:00
alrm_date : 1970-01-01
alarm_IRQ : no
alrm_pending : no
update IRQ enabled : no
periodic IRQ enabled : no
periodic IRQ frequency : 1
max user IRQ frequency : 64
24hr : yes
편집 2:
다시 시작했을 때 실제로 테스트한 것은 전원 코드를 뽑고 몇 초 정도 기다렸다가 다시 연결하는 것뿐이었습니다. (임베디드 리눅스 장비라서 특이한 현상은 아닙니다.) 그런데 시간을 오늘로 설정하고 재부팅 명령을 내리니, (전원이 꺼지지 않은 채) 설정한 시간(자정)과 동시에 재개되다가 다음 시간이 되면 전원 주기가 완료되면 같은 날짜(오늘)로 다시 시작됩니다.
그래서 재부팅 프로세스의 어떤 부분이 OS가 어딘가에서 시간을 절약하도록 강요한다고 생각합니다. 그런 다음 시작 시 rtc를 읽는 대신 rtc를 설정합니다.