기존의 다른 RTOS 는 어떤식으로 구성이 되어 있는지 정리했다.
공개된 RTOS 를 중심으로 설명할 것이다.
Nano QPlus
ETRI 에서 만든 것으로 QPlus 와 관련한 여러가지 제품들이 있지만, 그 중에서 Nano QPlus 는 센서 네트워킹을 위한 RTOS 이다.
QPlus 는 리눅스 커널을 기반으로 하기 때문에, 기존의 리눅스 커널과 같다고 생각하면 된다.
센서 네트워킹용으로 만들어졌기 때문에, 사이즈가 작고 기능이 간단하다. ncurses 를 이용해서 환경설정을 할 수 있다.
디버깅과 관련해서는 Makefil 에 'make debug' 에 대한 언급이 있지만, 실제로 구현되어 있지는 않다.
MicroC/OS
제한적이긴 하지만, 현재 공개된 RTOS 에서 가장 유명하다. 현재 여러가지의 플랫폼에 포팅이 되어 있는 상태다.
특정 헤더파일에서 define 하는 방법으로 전체적인 환경설정을 할 수 있다.
디버깅과 관련해서는 간단하게 ifdef 을 이용한 printf 설정이 전부다.
eCos
C++ 로 만들어졌으며, 가장 모듈화가 잘 되어 있다. 부트로더(redboot)를 제공하며, 윈도우와 리눅스에서 gui 기반의 인터페이스를 제공함으로서 거의 모든 환경 설정(캐쉬 타입, 라이브러리, 스케줄러, 타이머등) 및 컴파일이 가능하다.
디버깅과 관련해서는 gdb 를 연동할 수 있게끔 기능을 지원하고 있다.
Linux
리눅스와 비교를 한다는 것은 조금 어폐가 있을 수 있다. 하지만, 최근 들어 커널에 real-time 적인 기능이 추가되었기 때문에 넣었다. 기본적으로 리눅스 커널 자체에 디버깅 기능이 지원되는 것은 아니다. 하지만, kgdb 나 kdb 를 패치함으로서 강력한 디버깅 기능을 지원한다. 또한 2.6 에 들어서면서부터, 데드락이나 스핀락의 경우나 뮤텍스등을 디버깅할 수 있도록 커널 자체에서 지원하고 있다.
나의 생각
상용 RTOS 의 경우에는 디버깅과 관련해서 실제로 H/W 디버깅 장비를 사용하기 때문에 따로 기능은 제공하지 않는 것으로 생각한다.
앞에서 살펴본 것 중에서 eCos 의 gdb 지원은 눈여겨 볼 만 하다.
커널에서 디버깅과 관련한 기능을 배재시키는 이유는 성능 때문이라고 생각한다. S/W 적인 접근 방법으로는 성능 감소를 피해갈 수 없다. 하지만 나의 경우, H/W 를 배제한 S/W 만을 사용하는 디버깅 접근이기 때문에 지금으로서는 eCos 에서의 기능이 가장 최선이라고 생각한다.