RTC 추가

RTC 전용으로 PCF8583 칩을 사용한다. RK818의 RTC 기능이 정상적으로 동작하지 않는 이유가 있다고 한다.

먼저 해당 어드레스와 I2C 채널을 확인하고 수정작업에 들어간다.

kernel .config 파일에 해당 디바이스를 설정한다.

dtc 파일에서 rtc 디바이스를 i2c 에 연결시킨다.

rk818 rtc 의 기능을 따로 끄는 옵션이 없고, 하드코딩되어 작동되기 때문에 다음과 같이 모듈을 정상적으로 probe 하지 못하도록 하여 8583이 rtc0가 되도록 한다.

기존 소스코드를 검토해본 결과 8583 코드가 있기는 하지만, rockchip의 i2c 인터페이스와 맞지 않고 cmos 초기화 부분이 제대로 구현되어 있지 않다.

rockchip i2c 인터페이스를 사용하기 위해서 i2c read/write에 사용할 scl_rate를 지정해준다.

베터리를 새로 장착할 경우 RTC의 CMOS 메모리 내용이 파괴되었다는 것을 감지하기 위해서 년도를 나타내는 2바이트와 0xFF를 xor하여 체크섬을 저장한 후 비교한다. 만약 맞지 않으면 1970년으로 설정되도록 한다.

리눅스 커널이 시간을 부팅시 RTC에게 한번만 질의하여 시스템 시간을 세팅하고 이후의 시간은 자체 클럭을 이용해서 유지한다.

최초 RTC 시간은 hctosys 모듈이 담당하고 있으며, UTC에 맞게 전달해주어야 한다.

다음은 App에서 시스템 시간을 저장한 후 RTC에 시간을 저장하는 방법이다.