우선 이글은 FALINUX 강좌란에 유영창님께서 올리신 글이며 ESP-NS를 사용하시는 분들에게는 좋은 팁이 될꺼 같아 올립니다.

 

1. ESP-NS의 워치독

ESP_NS 보드에는 워치독 디바이스가 따로 준비된것은 아닙니다. 단지 ESP-NS 보드에 사용되는 프로세스인 PXA255에 내장된 워치독을 이용할 뿐입니다.

일부 개발자중에는 프로세스에 내장된 워치독에 대한 신뢰성을 제기하는 분들이 있읍니다. 그러나 실제 사용상함에 있어서 위치독이 내장되어 있던 외부에 있던 특별한 차이는 없읍니다.

ESP-NS 는 리눅스 커널이 동작합니다. 이 커널의 원 소스에는 표준적인 워치독 디바이스 드라이버가 포팅 되어 있읍니다. 단지 출고 되는 제품에는 워치독 디바이스 드라이버가 커널 이미지에 포함되어 있지 않기 때문에 직접 커널을 컴파일 하고 커널 이미지를 보드에 재 탑제 하셔야 합니다.

1.1 워치독 동작을 위한 커널 환경 설정

홈페이지에 제공되는 커널 소스를 다운 받으신후 커널소스의 환경 설정을 다음과 같이 설정하여야 합니다.

make menuconfig

명령을 수행하신후

Character devices 선택.
Watchdog Cards 선택.
[*] Watchdog Timer Support 선택.
<*> PXA250/210 watchdog (NEW) 선택.

위와 같은 선택을 수행하신후 환경을 저장하고

make zImage

명령을 수행하여

워치독 디바이스 드라이버를 커널 이미지에 포함시킵니다.

1.2 부트로더에서의 설정

ESP-NS 보드는 부트로더와 리눅스 커널에서 각각 관리하게 됩니다. 이때 부트로더는 리눅스 커널이 동작하여 어플리케이션이 동작할때까지의 워치독에 대한 설정을 합니다.

부트로더에서 워치독에 대한 설정은 부트로더 명령 대기 상태에서 set 명령을 수행하여 설정합니다.

EZBOOT> set

1. MAC Address [00:a2:55:f2:26:25]
2. LOCAL IP [192.168.10.139]
3. HOST IP [192.168.10.20]
4. Host tftp directory []
5. zImage file name [zImage.x5.esp-ns]
6. ram disk file name [ramdisk.x5.esp-ns-12M.gz]
7. boot loader file name [ezboot.x5.esp-ns-200M]

A. Autoboot wait time [3]
B. Boot Menu Key [ ]
C. Copy Ramdisk [Y/N] [Y]
D. Architecture Number [303]
E. Serial FF/BT/ST(0/1/2) [2]
F. NAND-Partition MByte [1:5:26] (kernel:ramdisk:app)
W. Watchdog (sec, off=0) [0]

K. Kernel CMD 1st [initrd=0xa0800000,5M root=/dev/ram ramdisk=12288]
M. Kernel CMD 2nd [console=ttyS02,115200]
N. Kernel CMD 3rd []

L. Load Default
P. Apply & Exit
S. Save
0. Exit

Select >>w
W. Watchdog (sec, off=0) [0]
Newvalue : 10

 

이때 주어지는 시간은 커널 부팅후 응용 프로그램이 워치독 처리가 가능한 시간 을 예상하여 설정하여야 합니다. 만약 그 보다 짧다면 부트로더에 의해서 설정된 워치독 시간 초과로 인하여 보드는 계속 리부팅 될것이기 때문입니다. 보통 10초 정도의 시간을 설정하면 될것입니다.

1.3 응용 프로그램에서의 제어

부트로더에 의해서 워치독이 활성화 되었다면 응용 프로그램은 정해지 시간이네에 워치독을 무효화 시킬 필요가 있읍니다. 여기서 무효화란 워치독을 해제하는 것이 아니고 워치독 디바이스에게 신호를 공급하여 워치독에 의한 리셋이 발생하지 않도록 하는 것입니다.

1.3.1. 디바이스 파일

응용 프로그램에서 워치독을 제어하려면 다음과 같은 디바이스 파일이 필요합니다.

/dev/watchdog

이 디바이스 파일이 없다면 다음과 같은 명령을 이용하여 제작하여야 합니다.

[root@ez-x5 /root]$ mknod /dev/watchdog c 10 130

램디스크와 같은 경우에는 이렇게 만들어도 저장되지 않으므로 프로그램에서
제작할 필요가 있읍니다. 이때는 프로그램에서 다음과 같은 코드를 사용하여
매번 제작하게 할 필요가 있읍니다.


void watchdog_make_device( void )
{
if( access( WATCHDOG_DEV_FILE , F_OK ) != 0 )
mknod( WATCHDOG_DEV_FILE, S_IRWXU|S_IRWXG|S_IFCHR,(10<<8|(130)));
}


1.3.2. 워치독 주기설정

워치독 주기를 설정하기 위해서 다음과 같은 코드가 필요합니다.

int watchdog_set_time( int time )
{
int fd;

fd = open( WATCHDOG_DEV_FILE, O_RDWR|O_NDELAY );
if( fd < 0 ) return -1;

ioctl( fd, WDIOC_SETTIMEOUT, &time );

close( fd );
return 0;
}


1.3.3. 워치독 처리

워치독 디바이스에서 리셋을 발생하지 않도록 하기 위해서는 다음과 같은 코드
가 필요합니다.

int watchdog_live( void )
{
int fd;

fd = open( WATCHDOG_DEV_FILE, O_RDWR|O_NDELAY );
if( fd < 0 ) return -1;

ioctl( fd, WDIOC_KEEPALIVE, 0 );

close( fd );
return 0;
}

태그: *EZ-보드 *장비설정