재부팅 문제 시 Linux 시간이 지속됩니다.

재부팅 문제 시 Linux 시간이 지속됩니다.

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를 설정합니다.

관련 정보