2.11 Watchdog (WDOG)
2.11.1 Introduction
Watchdog Timer 모듈은 예기치 않은 행(반응이 없는 상태)이나 무한 루프 상황, 프로그래밍 오류로부터 벗어나는 수단을 제공하여 시스템 오류로 부터 보호한다.
일부 플랫폼에는 두 개의 WDOG 모듈이 있을 수 있으며, 그 중 하나는 인터럽트 기능이 있다. i.MX 6과 7Dual은 i.MX 8M과 동일한 와치독 드라이버를 공유한다. i.MX 7ULP에는 별도의 와치독 드라이버가 있다. i.MX 8과 i.MX 8X는 시스템 컨트롤러 펌웨어로 가상의 와치독 드라이버 인터페이스를 공유한다.
2.11.2 Hardware Operation
WDOG 타이머가 활성화된 이후에는, 주기적으로 소프트웨어에서 서비스되어야 한다.
서비스가 제시간에 이루어지지 않으면, WDOG는 타임아웃된다. 타임아웃 시, WDOG는 소프트웨어 구성에 따라 wdog_b 신호나 wdog_rst_b 시스템 리셋 신호를 어설션한다. 와치독 모듈은 활성화된 후에는 비활성화할 수 없다.
2.11.3 Software Operation
Linux OS에는 특정 플랫폼에 대한 WDOG 드라이버를 지원할 수 있는 표준 WDOG 인터페이스가 있다.
WDOG는 STOP/DOZE와 WAIT 모드에서 독립적으로 suspended(일시 중지)/resumed(재실행) 할 수 있다. WDOG 레지스터의 일부 비트는 부팅 후 한 번만 프로그램이 가능하므로, 이러한 레지스터가 올바르게 기록되었는지 확인해야 한다.
2.11.4 Generic WDOG
일반적인 WDOG 드라이버는 drivers/watchdog/imx2_wdt.c 파일에 구현되어 있다.
다양한 IOCTL과 사용자 레벨 프로그램에서 읽기/쓰기 호출을 위한 기능을 제공하여 WDOG를 컨트롤한다.
2.11.5 Driver Features
WDOG 구현에는 다음 기능이 포함되어 있다:
- 활성화되어 있지만 미리 정의된 타임아웃 값(WDOG 소스 파일 중 하나에서 밀리초 단위로 정의됨) 내에 서비스되지 않으면, 리셋 신호를 생성한다.
- 사전 정의된 타임아웃 값 내에 서비스되면, 리셋 신호를 생성하지 않는다.
- 표준 WDOG 서브시스템에 필요한 IOCTL/read/write를 제공한다.
2.11.6 Source Code Structure
아래 테이블은 drivers/watchdog에 있는 WDOG 와치독 드라이버 소스 파일을 보여준다.
Table 23. Watchdog Driver Files
File | Description |
---|---|
driveers/watchdog/imx2_wdt.c | i.MX 6, i.MX 7Dual, i.MX 8M 와치독 함수 구현. i.MX 6과 i.MX 7의 경우, 시스템 리셋 와치독 함수는 arch/arm/mach-imx/system.c에 있다. |
drivers/watchdog/imx7ulp_wdt.c | i.MX 7ULP 와치독 함수 구현 |
drivers/watchdog/imx8_wdt.c | i.MX 8과 i.MX 8X에서, 시스템 컨트롤러 펌웨어(SCFW)와 커널에서 사용되는 소프트웨어 와치독은 가상 와치독 드라이버 imx8_wdt.c로 이런 인터페이스를 호출한다. i.MX 8M에는 사용되지 않는다. |
2.11.7 Menu Configuration Options
메뉴 구성에서 다음 모듈을 활성화한다:
- Device Drivers > Watchdog Timer Support > IMX2+ Watchdog
- Device Drivers > Watchdog Timer Support > IMX7ULP Watchdog
- Device Drivers > Watchdog Timer Support > IMX8 Watchdog
2.11.8 Programming Interface
다음 IOCTL은 WDOG 드라이버에서 지원되고 있다:
- WDIOC_GETSUPPORT
- WDIOC_GETSTATUS
- WDIOC_GETBOOTSTATUS
- WDIOC_KEEPALIVE
- WDIOC_SETTIMEOUT
- WDIOC_GETTIMEOUT
이러한 IOCTL에 대한 자세한 설명은 Documentation/watchdog을 참조한다.