개발 윈도우CE 개발툴에 관한 12가지 이야기

출처 : http://www.zdnet.co.kr/builder/dev/0,39035659,39167141,00.htm

 

임베디드 시스템의 핵심인 마이크로 프로세서는 소프트웨어에 의해 제어가 된다. 윈도우CE운영체제는 ARM, X86계열, MIPS 계열 프로세서에서 많이 사용되는 임베디드 시스템용 운영체제이다. 그럼 이 윈도우CE라는 운영체제는 어떻게 만들고 어떻게 디버깅할까?
물론 플랫폼 빌더(Platform Builder)라는 개발 툴을 사용한다. 지난 글에도 많이 언급을 했기에 익숙한 독자도 있을 것이다. 플랫폼 빌더에 대한 이야기는 잠시 뒤로 미루고 필자의 과거 먼저 회상해 보겠다.
필자 역시 처음 컴퓨터에 대해서 공부하기 시작할 때 운영체제에 관심이 많았었다. MS-DOS가 PC운영체제로 널리 사용되던 시절이었다. 이때 우연히 보게 된 UNIX 나 XENIX는 운영체제에 필자의 관심을 끌기에 충분한 요소를 가지고 있었다. 더군다나 소스까지 공개되었다는 사실에 더욱 더 흥미와 관심을 가지게 되었다. 어렵사리 소스를 인터넷을 통해서 받고, 도트 프린터의 기계음이 전산실을 가득 차게 하면서 소스를 프린트해 가며 봤다.
하지만, 역시 여러분의 예상과 같이 프린트된 많은 소스들을 보지 못한 체 분석을 포기했다. 운영체제라는 것은 프린트한 소스만 보면서 이해하기에는 너무나 많은 의미와 내용을 담고 있기 때문이다.
그래도 무의미했던 행동은 아니었다. 어렴풋하게 운영체제에서 어떻게 프로그램이 스케줄 되며, 메모리는 어떻게 관리 되는지 알게 되는 계기가 되었다. 사실 더 자세히 알게 된 시기는 운영체제에 대해 본격적으로 공부를 한 후다.
여러분도 필자와 비슷한 의문과 호기심을 가지고 있을 것이라 생각된다. 하지만 모든 것을 한번에 다 알 수는 없다. 우선은 먼저 운영체제 개발도구에 대하여 간단히 살펴보고자 한다. 그것은 운영체제를 개발하기 위한 개발도구가 어떤 것이 있는지 먼저 아는 것이 순서기 때문이다.
개발도구를 자세히 알고, 개발과 디버깅에 관한 내용을 파악하다 보면 어느덧 윈도우CE에 대한 전문가가 되어 있을 것이다.
우선 그전에 집고 넘어가야 할 것들은 다음과 같다.
임베디드 시스템용 운영체제도 하나의 프로그램이다.”
임베디드 시스템용 운영체제도 하나의 응용 프로그램을 만드는 것과 같이 컴파일을 하고 빌드를 해야 한다는 것이다”
운영체제도 디버깅을 할 수 있다!”
그럼 지금부터 윈도우CE를 개발하기 위한 12가지 도구들을 살펴보기로 하자. 개발 툴을 통하여 윈도우CE 운영체제를 개발할 때 어떠한 방식으로 진행되는 지 볼 수 있을 것이다.
1. 플랫폼 빌더(Platform Builder)
윈도우CE 운영체제를 만드는 소프트웨어라고 말할 수 있다. 플랫폼 빌더는 윈도우CE 5.0 버전까지는 독립된 소프트웨어 형태로 제공이 되었다가 6.0 버전부터는 Visual Studio 2005에 포함되는 형태로 제공되고 있다. 플랫폼 빌더의 기능을 정리한다면 다음과 같다.
-윈도우CE 운영체제 및 디바이스 드라이버, 응용프로그램 소스를 컴파일 하고 링크 함
즉, 크로스 컴파일러(Cross Compiler) 및 링커(Linker)를 가지고 있다.
-윈도우CE 운영체제에 포함될 컴포넌트를 결정하고 구성한다.
-디버거 기능을 이용하여 운영체제 내에 포함된 디바이스 드라이버나 응용프로그램을 디버깅 한다.
-플랫폼 빌더는 통합 개발환경(IDE 혹은 Integrated Development Environment)이다. 소스 편집, 관리를 할 수 있다.
-플랫폼 빌더를 이용하여 운영체제 이미지를 포팅 하려고 하는 개발보드에 다운로드 할 수 있다.
-리모트 툴(Remote Tools)을 사용할 수 있게 해 준다. 리모트 툴은 동작하고 있는 개발보드의 상태나 프로세서 정보, 시스템 정보를 확인하는 툴이다.
모든 기능을 나열하기엔 무리가 있다. 운영체제만큼 플랫폼 빌더도 복잡한 기능을 가지고 있다. 하지만 이것 하나만 명심해 두자! ‘플랫폼 빌더는 윈도우CE 운영체제를 개발하고 디버깅하기 위해서 사용하는 소프트웨어 툴이다.’라는 것이다. 윈도우CE를 시작하면서 가장 많이 사용하고 접하게 되는 툴이다.

clip_image002

PlatformBuilder

2. CETK(Windows CE Test Kit)
윈도우CE 운영체제를 테스트 하는 방법은 무엇인가 물어본다면 다음과 같이 대답하고 싶다. 첫 번째는 기기를 사용할 사용자 같이 테스트를 하는 것이고, 두 번째는 CETK를 통하여 호환성 및 안정성을 테스트 하는 것이다.
윈도우CE를 개발하면서 가장 어려웠던 점은 사용자가 사용하는 환경대로 테스트 해보는 것이었다. 물론 이를 대비하여 다양한 테스트를 한다. 별도 장치를 이용하여 버튼을 반복적으로 누른다든가, 시스템 전원을 On/Off를 반복하여 문제가 없는지 테스트를 한다. 이런 기본적인 반복 테스트를 통해 사용자가 동작 중 생길 문제를 미리 확인하게 된다.
CETK는 이러한 반복적인 테스트를 할 수 있도록 제공된 프로그램이다. 물론 On/Off 테스트와 같은 단순한 반복 테스트보다는 시스템 내에 구현된 디바이스 드라이버와 시스템 자체의 성능과 안정성을 테스트하는데 더 집중되어 있다. 플랫폼 빌더와 함께 제공되는 CETK는 다음 표와 같은 테스트를 할 수 있도록 만들어졌다.

clip_image004

CETK의 큰 장점은 위 테스트 이외에 사용자가 원하는 테스트 항목을 추가하는 기능이 있다는 것이다. 새로운 테스트 항목을 프로그램으로 만들어 추가 할 수 있다는 것이다.
CETK는 일반적인 테스트 관련 툴의 성격보다는 윈도우CE 운영체제 개발자를 위한 소프트웨어로 볼 수 있다. 시스템의 안정성을 확보하기 위한 도구로써 사용될 수 있기 때문이다. 필자의 경우 윈도우CE 운영체제 보다는 윈도우 모바일 장치를 개발했기 때문에 CETK과 비슷한 로고테스트(Microsoft Logo 테스트)를 진행했었다.
테스트의 이름이나 툴은 다르지만 매우 비슷한 테스트다. 실제로 테스트에 사용되는 프로그램 소스가 일부 동일하기 때문이다. 이 테스트를 하던 중 예상외의 결과가 나와서 당황한 적이 있었다. 많은 부분에서 테스트 항목을 패스 못하는 결과를 보여줬다.
BSP도 프로세서 업체에서 최신으로 제공 받았고 포팅 한 OS도 어느 정도 안정성이 있다고 판단된 시점이었다. 사실 의외의 결과였다. 문제의 원인은 포팅 방법과 BSP 문제였다. 포팅 방법 문제는 윈도우CE의 정책을 무시하고 개발한 디바이스 드라이버의 문제였고, BSP 문제는 일부 한정된 조건으로 BSP테스트를 하기 때문에 테스트 항목의 모든 조건을 만족시킬 수 없었으며, 일부항목에 대해서는 아예 고려가 되지 않았다는 것이다.
이제는 BSP에 대한 조건이 강화되어 이전과 같은 결과는 나오지 않지만 BSP 제공할 때 문서를 보면 어떤 테스트는 통과를 하고 어떠한 테스트는 문제가 되는지 설명해 주고 있다. 이런 것처럼 CETK는 혹 있을지도 모르는 문제를 검증하기 위한 마지막 단계이다.

clip_image006

CETK

3. Remote Kernel Tracker
윈도우CE 커널의 소스는 100%로 공개되었을까?
윈도우CE 6.0 버전부터 커널의 모든 소스가 공개 되었다. 따라서 맘만 먹는다면 윈도우CE의 커널이 어떻게 돌아가는지, 프로세서의 스케줄은 어떻게 이루어지는지, 동적 메모리 관리는 어떻게 이루어지는지 확인이 가능하다. 하지만 모든 소스가 공개 되었다고 생각하지는 말기 바란다. 아직까지도 많은 소스들은 공개가 되지 않았다. 윈도우CE는 Linux와 같은 공개 OS가 아니기 때문이다.
커널 소스를 일일이 분석하여 윈도우CE를 속속들이 알기보다는 문제가 생겼을 때 디버깅을 하는데 사용한다는 맞을 것이다. 특정한 문제가 발생하고 문제를 접근해 가는데 있어 소스는 중요한 역할을 한다.
하지만 윈도우CE는 여러 개의 프로세스(Process), 쓰레드(Thread)가 동시에 동작하는 멀티쓰레드(Multi Thread) 운영체제이다. 따라서 소스의 일부만 가지고, 디버거에서 브레이크(Break) 명령을 통해 운영체제의 동작을 일시 정지시킨 다음에 문제를 확인하기에는 어려운 점도 있다.
이때 사용하는 것이 리모트 커널 트랙커이다. 리모트 커널 트랙커는 윈도우CE 운영체제를 좀더 거시적으로 보게 해준다. 윈도우CE를 코드와 코드의 묶음이 아니라 프로세서와 프로세서, 쓰레드와 쓰레드의 관계로 보게 해준다. 이러한 점이 리모트 커널 트렉커의 중요한 점이다. 리모트 커널 트랙커로 할수 있는 기능은 다음과 같다.
-쓰레드간의 상호작용을 그림으로 보여준다.
-시스템 상태의 변화를 보여 준다.
-시스템 이벤트, 인터럽트, 쓰레드간의 연관 관계를 보여준다.
-프로세스와 쓰레드의 생성, 실행, 정지등의 상태를 상세히 보여준다.
한마디로 말해 커널 트랙커는 윈도우CE 운영체제가 동작하고 있는 모습을 자세하게 살펴볼 수 있게 해준다는 것이다. 어느 부분에서 정체되고 있으며 어떻게 접근해 가야 문제점에 다가갈 수 있는지 그래픽을 통해 보여주는 툴이다. 그래서 윈도우CE를 개발하는데 있어 중요한 역할을 하고 있다.

clip_image008

KernelTracker

4. Remote Performance Monitor
윈도우CE 운영체제의 성능은 어떻게 평가할까? 물론 상용으로 판매하는 벤치마크(Benchmark) 프로그램이 있다. PC 환경의 벤치마크 프로그램처럼 프로세서의 성능, 메모리의 성능, 저장 장치의 성능을 측정할 수 있다.
하지만 운영 다루는 입장에서는 어떠한 벤치마크 프로그램이 필요할까? 물론 좀더 세부적으로 측정할 수 있는 툴이 필요하다. 각 프로세스 별로 어느 정도 리소스를 차지하는지, 어떤 프로세스가 많은 스케줄링 시간을 이용하는지 이러한 정보를 알아야 한다. 그래야 프로세서나 쓰레드의 우선순위를 조절해 운영체제가 조화롭게 동작하게 조정할 수 있다. 리모트 퍼포먼스 모니터라는 툴을 이용해 이런 작업을 할 수 있다. 리모드 퍼포먼스 모니터의 역할을 정리하면 다음과 같다.
-쓰레드, 프로세스, 시스템의 성능 및 통계 측정
-시스템 메모리 사용에 대한 측정
-전원, TCP, IP, RAS, ICMP 등 성능 측정

clip_image010

perfmonitor

5. Remote Zoom-in
백문이 불여일견. 즉, 한번 보는 것이 말로 설명하는 것보다 낫다. 사실 이것이 윈도우CE를 개발하면서 비중이 높은 툴은 아니다. 단순히 동작하는 윈도우CE의 동작 화면을 캡쳐해서 저장하는 기능만 가지고 있는 툴이다.
하지만 어떻게 보면 플랫폼 빌더 다음으로 많이 사용한다. 문제점을 보고할 때, 매뉴얼 작업을 할 때 동작하는 장치에 대한 캡쳐 화면이 필요하다. 이때 사용하는 프로그램이 리모트 줌-인이다. 단순히 개발하고 있는 장치와 연결하여 원격으로 화면을 캡쳐하는 프로그램이지만 중요하고 많이 사용된다.

clip_image012

perfmonitor

6. Remote Registry Editor
PC의 레지스터리를 변경해 본적이 있는가? 사실 PC를 많이 사용한 사용자라고 해도 레지스터리 에디터를 이용하여 윈도우 시스템의 설정을 변경하여 사용하는 사용자는 많지 않을 것이다. 또한 있다 하더라도 직접 레지스터리를 수정하는 것이 아니라 PC 최적화 프로그램을 이용해 자동으로 PC를 최적화 해주면서 레지스터리를 변경한 경험은 있을 것이다.
레지스터리는 PC 뿐만 아니라 윈도우CE에서도 중요한 항목이다. PC와 비슷하게 윈도우CE의 설정과 디바이스 드라이버 등록이 레지스터리를 통해 이루어지기 때문이다. 윈도우CE를 개발할 때 제일 먼저 알아야 하는 것이 디바이스 드라이버를 레지스터리에 등록하는 방법이다. 이런 것처럼 레지스터리에 설정을 변경하고 새로운 드라이버를 등록하기 위해서 사용한다.
만약 이런 툴이 없다고 한다면 레지스터리를 변경하고 윈도우CE 운영체제를 새로 만들고 개발보드에 다시 올리는 작업을 반복해야 할 것이다. 그래서 리모트 레지스터리 에디터는 개발에 필요한 중요한 툴 중의 하나다.

clip_image014

Remote Registry Editor

7. Remote File Viewer
임베디드 시스템에 파일을 복사하는 방법은? 이런 문제에 고민할 일은 없었을 것이다. PC에서 파일을 복사하고 지우는 작업은 누구나 할 수 있는 일이다. 하지만 임베디드 시스템에서 파일을 사용하고 복사하는 작업은 복잡하다.(사실 PC에서 동작하는 파일시스템도 그 내부는 복잡할 것이다).
임베디드 시스템의 저장 장소는 플래시 메모리와 같은 저장 장치를 사용하고 동작하는 방법과 다르다. 따라서 비슷한 파일 시스템을 사용하기는 하지만 PC와 동일하다고 볼 수는 없다. 이러한 차이점을 극복하게 해주는 툴이 리모트 파일 뷰어다. PC에서 개발보드 파일 시스템내의 파일을 자유자제로 볼 수 있게 하고 PC로부터 개발보드로, 개발보드로부터 PC로 파일 복사 작업을 쉽게 해주는 툴이다.
윈도우CE 임베디드 시스템은 개발이 어느 정도 진행이 되면 ActiveSync를 통해 PC로 부터 파일을 복사할 수 있지만 그 전에는 운영체제 이미지에 파일을 포함시키는 것 말고는 없기 때문에 리모트 파일 뷰어는 초기 개발 시 중요한 툴의 하나이다.
8. Remote Heap Walker
메모리에는 여러 가지 종류가 있다. 응용 프로그램 내에서 malloc() 과 같은 함수에서 사용되는 메모리 영역, 함수를 호출할 때 인자가 저장되는 영역 등 여러 가지가 존재한다. 하나의 프로그램에서도 이런데 운영체제에는 더 복잡한 메모리 구조를 가질 것이다.
윈도우CE에서 이런 복잡한 메모리 이용 정보를 분석하게 해주는 툴이 리모트 힙 워커이다. 어떠한 쓰레드에서 어떻게 메모리를 할당하고 어떠한 방식으로 메모리를 이용하는지 분석할 수 있게 해준다. 메모리를 할당하고 제대로 해제는 하는지, 특정 프로세서에서 과도하게 메모리를 점유하지는 않는지 분석하기 위해서 사용된다. 잘못된 메모리 사용으로 인해 발생하는 메모리 누수를 방지하기 위해 사용되는 툴이다.
9. Remote Spy
당신의 행동은 다 기록되고 있다. 윈도우CE 운영체제는 윈도우와 그래픽, 이벤트로 구성된 시스템이다. 흔히 GWES(Graphics, Windowing, and Events Subsystem)이라는 명칭으로 부르고 있다.
이중에서 이벤트는 사용자의 입력을 처리하고 반응하는 구조를 말한다. 사용자가 터치패널을 터치하면 터치에 대한 입력 이벤트가 발생한다. 이 이벤트를 받은 이벤트 관리 프로그램은 적절한 위치에 새로운 윈도우를 만들게 된다. 이때 역시 새로운 윈도우가 생성되었다는 이벤트가 발생한다. 이러한 이벤트들의 움직임을 기록할 수 있게 하는 툴이 리모트 스파이다.
어떠한 이벤트가 발생하였으며 그에 따라 어떻게 움직이는지 확인하기 위해서 사용된다. PC용 응용 프로그램 개발자라면 다 들어봤을 Spy라는 프로그램의 임베디드 판이라고 보면 될 것이다.

clip_image016

Remote Spy

10. OSBENCH
운영체제를 벤치마크 하고 싶은가? 그러기 위해서는 \PUBLIC\COMMON\OAK\UTILS\OSBENCH에 있는 OSBENCH.EXE 프로그램을 사용해야 한다.
OSBENCH 프로그램은 플랫폼 빌더의 한 디렉토리를 차지하고 있는 응용 프로그램이며, 윈도우CE 운영체제의 스케줄러의 성능을 테스트 한다. 운영체제 자체의 성능을 테스트 한다기 보다 개발보드에 포팅된 운영체제가 원래 설계되었던 것처럼 제대로 동작하는지 확인하기 위해서 사용된다. 즉, 보드에 맞게 포팅한 부분이 잘 포팅이 되어 운영체제가 제 성능을 발휘하면서 동작하는지 확인하는 의도로 사용된다.
OSBENCH 프로그램은 앞에서 설명한 프로그램과는 다르게 결과가 화려한 그래픽으로 나타나지는 않는다. 시리얼포트나 파일로 결과가 출력되기 때문이다. 하지만 OS의 성능을 측정하는 중요한 툴이라는 것은 알아두어야 한다. 아울러 ▲시스템 함수 호출에 따른 시간 측정▲세마포어(Semaphore)나 뮤텍스(Mutex) 생성 시간 측정 ▲이벤트(event)관련 처리 시간 측정 등 주로 운영체제에서 사용되는 주요 요소의 동작 시간을 측정하는데 사용된다.
11. ILTIMING
인터럽트는 윈도우CE 운영체제의 심장이다. 물론 다른 운영체제도 인터럽트를 통해 프로세스 스케줄링을 하고 외부 장치에 대한 요구사항을 처리하게 된다. 따라서 하드웨어적인 인터럽트가 발생하고 처리되기까지의 시간이 얼마나 걸리는지 측정하는 것은 성능 측정에 중요한 요소가 된다.
윈도우CE 운영체제에서 이러한 성능 측정을 위해 사용되는 프로그램이 ILTIMING.EXE이다. 윈도우CE 운영체제에서 하드웨어 인터럽트의 발생에서부터 운영체제 처리부분까지, 그리고 인터럽트를 처리할 최종 쓰레드까지의 시간을 측정하는데 사용된다. 윈도우CE 운영체제를 포팅한 개발보드에서 인터럽트의 처리 시간을 측정하고 개선할 여지가 있는지 확인하는데도 유용하다.
12. 기타
윈도우CE운영체제를 개발 하는 데는 이 밖에도 많은 툴들이 있다.
-Remote Processor Viewer : 동작하는 시스템의 프로세스의 정보를 확인하기 위해서 사용한다. 실시간으로 PC에서 프로세스와 그 프로세스에 관련된 쓰레드 정보를 보여준다.
-Remote System Information : 동작하는 시스템의 메모리, 저장소, 플랫폼 이름 등 기본적인 시스템 정보를 확인하는데 사용한다.
-Remote Call Profiler : 프로파일러는 프로그램동작에 대한 분석 정보를 제공한다. 어떤 함수에서 리소스를 많이 사용하고, 프로세스 시간을 많이 사용하는지를 분석해서 프로그램내의 병목점(Bottleneck)을 해소하는데 사용한다.
-Application Verifier : 프로그램에서 생길 수 있는 메모리 누수, 핸들에 대한 잘못된 사용, GDI(Graphics Device Interface) 객체에 대한 누수를 탐지해 내는데 사용한다. 흔히들 응용프로그램에서 메모리를 할당하고 제때 해지하지 않는 문제로 생기는 문제를 미연에 찾아내주는 툴이다.

clip_image018

System Information

clip_image020

Call Profiler

이것들은 모두 윈도우CE 운영체제를 개발하기 위해 사용되는 중요한 툴들이다. 이 밖에도 소스를 관리하기 위한 소스세이프(SourceSafe) 프로그램, 소스를 편하게 보기 위한 프로그램 편집기 등 다양한 툴들이 사용된다.
이제까지 윈도우CE 운영체제를 개발하기 위해 사용되는 개발툴에 대해서 간단히 살펴봤다. 원도우CE를 탑재한 임베디드 시스템을 만든다는 것은 어려운 일이다. 언급한 툴들은 이러한 개발의 어려움을 도와주기 위해 제공된 툴이다.
윈도우CE 운영체제 개발은 참 막연할 일이다. 하드웨어도 새로 개발하는 작업이고 여기에 부트로더부터 시작해서 많은 디바이스 드라이버를 포팅해야 한다. 또한 운영체제가 잘 동작할 수 있도록 설정을 맞추고 테스트 해 봐야 한다. 여기에 다른 윈도우CE용 응용 프로그램이 정상적으로 동작하도록 호환성 보장도 해 주어야 한다.
이러한 모든 작업들은 지금까지 설명한 모든 툴을 이용해 검증하고 확인하면서 개발을 한다. 툴의 사용법을 잘 알고 이용하는 것이 모든 개발의 시작임을 강조하고 싶다. @

필자는?
필자 라영호는 2007, 2008 Microsoft Windows Embedded 분야 MVP이다. 윈도우 모바일 관련 스마트폰 개발과 윈도우CE 관련 장치를 개발하고 있다. 개인적으로 운영하고 있는 윈도우CE에 관한 블로그(www.embeddedce.com)를 통해 윈도우CE 개발에 대한 다양한 생각과 방법론을 함께 생각해 보고자 노력 중이다. 최근에는 윈도우CE를 이용해 어떻게 빠르고 안정적인 시스템을 만들 것인가를 고민하고 있다. 아울러 윈도우CE의 포팅 뿐만 아니라 개발에서부터 최종 제품이 나오기까지 거쳐야 할 다양한 테스트 및 신뢰성 문제에도 관심을 가지고 있다. 조만간 윈도우CE에 대한 다양한 강좌 및 테스트에 관한 내용을 알릴 예정이라고 한다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: