'embedded'에 해당되는 글 9건
- 2007.11.08 WinCE 6.0의 Network Projector
- 2007.11.06 Windows Embedded CE update
- 2007.11.05 Windows Embedded CE 6.0의 OSDesign에서 Platform manager를 추가하지 말라!
- 2007.10.31 Windows CE 이미지 생성을 위한 configuration files
- 2007.10.29 Windows Embedded CE 6.0 Update Check
- 2007.10.18 [WindowsCE 6.0 특집 ③] 윈도우 임베디드 CE 애플리케이션 디버깅
- 2007.10.18 [WindowsCE 6.0 특집 ①] 연결된 장치 개발을 위한 윈도우 임베디드 CE 6 플랫폼
- 2007.10.17 Windos CE 5.0 vs. Windows Embedded CE 6.0 ch.1
- 2007.10.17 Platform Builder 6.0의 Catalog Items View...
2007. 11. 8. 10:26
WinCE 6.0의 Network Projector
2007. 11. 8. 10:26 in Windows Embedded/Windows Embedded CE 6.0
Windows Embedded CE 6.0에 'Network Projector' 라는 녀석이 있다.
네트웍을 통해 회의장과 같은 곳에서 RDP를 이용하여 원격으로 프리젠테이션을 할 수 있는 기능을 가지고 있다. 쉽게말해 Network Projector 기능을 장착하고 있는 기계에 PC가 접속하여 현재 PC 화면의 내용을 네트웍을 통해 그기계의 출력을 할 수있는 디바이스(모니터, LCD패널, 빔프로젝터 등)로 출력을 하는 것이다.
이녀석은 특이하게 Windows Vista기반의 PC하고만 연동하여 사용된다. 다른 운영체제(XP)에서는 사용을 할 수 없다.
단순한 프리젠테이션 용도로만 사용되는 듯하다.
VMWare에 Vista를 설치했고, 무선인터넷을 사용한 테스트 환경이라 그럴 수도 있지만... 테스트를 해본 결과 성능이 그리 좋지는 않았다.
프리젠테이션 파일이나, 도큐먼트 파일의 경우 별 무리없이 출력을 해내지만, 동영상과 같은 많은 움직임을 갖는 데이터의 경우 상당히 버벅거린다는..ㅡㅡ;
그냥 처음보는 기능이라 테스트를 해보았을 뿐.. 잘만 이용하면 쓸만한 제품이 나올것 같기도 하다.
'Windows Embedded > Windows Embedded CE 6.0' 카테고리의 다른 글
Windows Embedded CE 6.0 R2 릴리즈 & 설치 (0) | 2007.11.16 |
---|---|
Windows Embedded CE 6.0 Catalog Items (0) | 2007.11.14 |
Windows Embedded CE update (0) | 2007.11.06 |
Windows Embedded CE 6.0의 OSDesign에서 Platform manager를 추가하지 말라! (0) | 2007.11.05 |
릴리즈 모드에서 "DEBUGMSG()"보는 방법 (0) | 2007.11.02 |
2007. 11. 6. 13:22
Windows Embedded CE update
2007. 11. 6. 13:22 in Windows Embedded/Windows Embedded CE 6.0
Windows Embedded CE의 update사이트를 소개하려 한다.
기본적으로 Platform Build를 설치하고 나서 꼭 해주어야 하는 작업이기에...
CE로 이미지를 제작하다 보면 여러 에러를 볼 수 가 있는데.. 여기 저기 서칭하다보면 자주 듣게되는 말이 QFE를 설치하라는 말이 있다.
이 QFE를 통해서 Windows CE관련 업데이트를 하게 되는 것이다.
Windows Embedded CE Update Site
오늘 날짜로 들어가 보니 Windows Embedded CE 6.0의 경우는 2007년 9월까지 릴리즈된 update 현황을 볼 수 있었다.
왜 더는 없는 거지?? 이녀석들도 상당히 게으른 건가?? ㅡㅡ;
참고 : 자신의 Platform Builder에서 현재 QFE 업데이트 상황이 어떻게 되는지 확인을 하고 싶다면..
'여기'를 통해 알 수 있다.
'Windows Embedded > Windows Embedded CE 6.0' 카테고리의 다른 글
Windows Embedded CE 6.0 Catalog Items (0) | 2007.11.14 |
---|---|
WinCE 6.0의 Network Projector (0) | 2007.11.08 |
Windows Embedded CE 6.0의 OSDesign에서 Platform manager를 추가하지 말라! (0) | 2007.11.05 |
릴리즈 모드에서 "DEBUGMSG()"보는 방법 (0) | 2007.11.02 |
Files 디렉토리의 bib, reg파일 수정 후 NK바이너리에 적용시키는 방법 (0) | 2007.11.01 |
2007. 11. 5. 20:21
OSDesing이란 CE OS를 만들 때 필요한 기능을 추가할 것인지 말것인지를 정하고 실제 추가 삭제를 하는 작업을 말한다.
Windows Embedded CE 6.0의 OSDesign 작업을 할 때에 주의할 점이있다.
Platform manager이라는 컴포넌트를 OSDesign에 추가하지 말라는 것이다.
만일 이를 추가할 시에는 빌드를 하여 이미지를 생성하려 하면 다음과 같은 에러를 발생시킨다.
아래는 본인경우에서의 에러메시지이다.
Error: Could not find file 'C:\WINCE600\OSDesigns\emdk4000_cam_6\
emdk4000_cam_6\RelDir\EMDK4000_ARMV4I_Release\cemgrc.exe'
on disk cemgrc.exe C:\WINCE600\OSDesigns\emdk4000_cam_6\emdk4000_cam_6\RelDir\
EMDK4000_ARMV4I_Release\cemgrc.exe NK
C:\WINCE600\PUBLIC\COMMON\CESYSGEN\makefile 파일의 1187라인을 살펴보면, Platman Stuff라는 녀석을 타겟쪽으로 복사를 하는 작업을 하게 되는데... 이 'Platman Stuff'라는 녀석은 CE 6.0을 인스톨할 때부터 존재하지 않는 녀석이라고 한다. 그래서 이 파일은 복사될 수도 없고, 빌드 시 에러를 발생시킨다고 한다.
자세한 내용은 여기를 참조하면 될 듯 하다.
주저리 주저리 내용은 많지만 중요한 점은 그냥 OSDesign시에 체크를 하지 말라는 내용이다.
'Windows Embedded > Windows Embedded CE 6.0' 카테고리의 다른 글
WinCE 6.0의 Network Projector (0) | 2007.11.08 |
---|---|
Windows Embedded CE update (0) | 2007.11.06 |
릴리즈 모드에서 "DEBUGMSG()"보는 방법 (0) | 2007.11.02 |
Files 디렉토리의 bib, reg파일 수정 후 NK바이너리에 적용시키는 방법 (0) | 2007.11.01 |
Windows CE 이미지 생성을 위한 configuration files (0) | 2007.10.31 |
2007. 10. 31. 14:06
Windows CE 이미지 생성을 위한 configuration files
2007. 10. 31. 14:06 in Windows Embedded/Windows Embedded CE 6.0
Windows CE용 이미지를 생성하는데 사용되는 몇가지의 구성 파일(Configuration file)들이 있다.
이미지를 만들기 위해 반드시 필요하고, 또 설정을 잘 못할 시 만든 OS image가 제대로 동작을 안하는 경우도 종종 있다.
BIB, REG, DAT, DB 4개의 파일이 바로 그것이다.
1. BIB(Binary Image Builder)
BIB파일은 NK.bin으로 압축할 파일들에 대한 정보, 압축이미지의 속성을 결정하는 파일이다.
쉽게 말해서 만들 OS image안에 포함되는 모듈이나 컴포넌트들을 정의하는 파일이다.
BIB파일은 4개(FILES, MODULES, MEMORY, CONFIG)의 세션으로 구성된다.
2. REG
시스템 레지스트리 파일을 만드는데 사용되는 파일이다.
Make Image과정 중 모든 *.reg파일을 통합하여 REGINIT.ini파일을 만든다.
나중에 부팅 과정에서 형성될 초기 시스템 레지스트리 환경을 구축한다.
3. DAT
단축아이콘 등을 원하는 위치에 생성하도록 지시하는 파일이다.
4. DB
데이터베이스 테이블을 생성하도록 지시하는 파일이다.
이미지를 만들기 위해 반드시 필요하고, 또 설정을 잘 못할 시 만든 OS image가 제대로 동작을 안하는 경우도 종종 있다.
BIB, REG, DAT, DB 4개의 파일이 바로 그것이다.
1. BIB(Binary Image Builder)
BIB파일은 NK.bin으로 압축할 파일들에 대한 정보, 압축이미지의 속성을 결정하는 파일이다.
쉽게 말해서 만들 OS image안에 포함되는 모듈이나 컴포넌트들을 정의하는 파일이다.
BIB파일은 4개(FILES, MODULES, MEMORY, CONFIG)의 세션으로 구성된다.
- FILES
: 실행가능한 파일들, 그렇지 않은 파일들 모두 정의될수 있고, 이것들이 메모리 영역안에 저장된다.
ex) aaa.avi $(_FLATRELEASEDIR)\aaa.avi NK SHU
NK라는 이름을 가지는 이미지 파일안으로, aaa.avi 파일이 압축된다.
폰트, 단축아이콘, 멀티미디어 파일등이 포함될 수 있다.
참고 : S : System
H : Hidden
U : Uncompressed
- MODULE
: FILES 와 비슷하지만, 실행가능한 파일(OCX, DLL, EXE)들을 정의한다.
ex) config.bib 의 예
MODULES
nk.exe $(_FLATRELEASEDIR)\kernkitl.exe NK SHXL
kd.dll $(_FLATRELEASEDIR)\kd.dll NK SHK
NK라는 이름을 갖는 이미지파일 안으로 nk.exe, kd.dll파일이 압축된다.
참고 : X : 이미지 속에 압축될 때 서명된 정보를 보관하도록 지시
L : 가상메모리 상에서 해당하는 파일이 분리되어 보관되지 않게 지시
(코드, 데이터 영역이 연속적인 공간상에 존재하도록 하기 위함)
K : Kernel 모드
- MEMORY
: 대상 Target system의 Memory정보를 정의한다.
ex) config.bib 의 예
MEMORY
NK 80240000 009C0000 RAMIMAGE
RAM 80C00000 03400000 RAM
....
NK라는 이름을 갖는 이미지가 0x80240000 ~ 0x009C0000만큼의 메모리를 사용하며, 이것은 RAMIMAGE(ROM)의 속성을 갖는다는 의미를 갖는다.
- CONFIG
: 압축 혹은 ROM size와 같은 속성들을 설정하기 위해 사용한다.
2. REG
시스템 레지스트리 파일을 만드는데 사용되는 파일이다.
Make Image과정 중 모든 *.reg파일을 통합하여 REGINIT.ini파일을 만든다.
나중에 부팅 과정에서 형성될 초기 시스템 레지스트리 환경을 구축한다.
3. DAT
단축아이콘 등을 원하는 위치에 생성하도록 지시하는 파일이다.
4. DB
데이터베이스 테이블을 생성하도록 지시하는 파일이다.
'Windows Embedded > Windows Embedded CE 6.0' 카테고리의 다른 글
릴리즈 모드에서 "DEBUGMSG()"보는 방법 (0) | 2007.11.02 |
---|---|
Files 디렉토리의 bib, reg파일 수정 후 NK바이너리에 적용시키는 방법 (0) | 2007.11.01 |
Windows Embedded CE 6.0 Update Check (0) | 2007.10.29 |
[WindowsCE 6.0 특집 ③] 윈도우 임베디드 CE 애플리케이션 디버깅 (0) | 2007.10.18 |
[WindowsCE 6.0 특집 ②] 윈도우 임베디드 CE 6.0의 Cellcore 및 RIL 기능 (0) | 2007.10.18 |
2007. 10. 29. 10:55
Windows Embedded CE 6.0 Update Check
2007. 10. 29. 10:55 in Windows Embedded/Windows Embedded CE 6.0
Windows Embedded CE 6.0에서 QFE라고 거의 매월마다 새로이 업데이트(패치)되는 시스템이 있다. 버그라든지, 새로이 추가되는 기능들을 QFE라는 파일로 업데이트 하는 것이다.
현재 사용하고 있는 Platform builder에서 어디까지 업데이트가 되어있는지 확인하는 방법이 있다.
먼저 Visual studio 2005를 실행시키고, CE 6.0의 프로젝트를 하나 열자. 그리고 메뉴에서 Tools를 선택한다.
Tools의 하위 메뉴중 Platform Builder for CE 6.0 -> CE Update Check를 선택한다.
다음과 같이 CEUpateCheck라는 윈도우가 뜬다. 확인하고자 하는 플랫폼에 체크를 하고, Verify Updates를 클릭한다.
아래 그림과 같이 Windows Embedded CE 6.0의 업데이트 상황을 알 수가 있다. 녹색의 체크된 부분은 이미 업데이트가 된 부분이고, 그렇지 않은 부분은 새로이 업데이트를 해주어야 하는 부분이다.
업데이트는 다음 사이트를 통해서 다운로드 받을 수 있다.
Windows Embedded CE QFE Update 사이트
'Windows Embedded > Windows Embedded CE 6.0' 카테고리의 다른 글
Files 디렉토리의 bib, reg파일 수정 후 NK바이너리에 적용시키는 방법 (0) | 2007.11.01 |
---|---|
Windows CE 이미지 생성을 위한 configuration files (0) | 2007.10.31 |
[WindowsCE 6.0 특집 ③] 윈도우 임베디드 CE 애플리케이션 디버깅 (0) | 2007.10.18 |
[WindowsCE 6.0 특집 ②] 윈도우 임베디드 CE 6.0의 Cellcore 및 RIL 기능 (0) | 2007.10.18 |
[WindowsCE 6.0 특집 ①] 연결된 장치 개발을 위한 윈도우 임베디드 CE 6 플랫폼 (0) | 2007.10.18 |
2007. 10. 18. 14:11
[WindowsCE 6.0 특집 ③] 윈도우 임베디드 CE 애플리케이션 디버깅
2007. 10. 18. 14:11 in Windows Embedded/Windows Embedded CE 6.0
다음은 'zdnet'에 올라와 있는 라영호님의 글을 스크랩한 것이다.
라영호님은 Windows Embedded 분야 Microsoft MVP로 현제 인벤텍 상하이 연구소에서 Windows Embedded CE 기반의 단말기 및 스마트폰을 개발하고 있으며, Windows Embedded 운영체제에 대한 블로그를 운영하고 있다.
윈도우 임베디드 CE(Windows Embedded CE) 개발 과정을 크게 4가지로 구분해 본다면, 하드웨어에 관련된 부트 로더 개발 부분, 디바이스 드라이버 관련 개발 부분, OS를 포팅하고 최적화 하는 부분, 개발한 장비에서 동작할 애플리케이션을 개발하는 것으로 분류해 볼 수 있다. 각 개발 단계 중 본 칼럼에서는 윈도우 임베디드 CE 상의 애플리케이션 개발이라는 주제, 그 중에서도 애플리케이션 개발 과정 중의 디버깅 방법에 대한 내용에 대해 알아보고자 한다.
윈도우 임베디드 CE용 애플리케이션 개발은 <그림 1>과 같이 윈도우 임베디드 CE 운영체제의 포팅, SDK 생성과 같이 PC 애플리케이션에서는 고려하지 않았던 단계들이 추가되고 개발하는 하드웨어의 LCD나 장치를 고려하고 개발해야 한다는 제한 사항이 있다.
다른 어려움은 PC와 같이 어느 정도 안정화된 운영체제 환경에서 개발을 하는 것이 아니라, 개발 중인 운영체제에서 애플리케이션을 개발해야 한다는 것이다. 문제점이 애플리케이션에서 발생하는 것인지 포팅이 완전히 안 끝난 시스템의 문제인지 확인하기가 난해하다는 것이다.
일례로 필자가 이전 개발 프로젝트 개발 중에 생겼던 문제를 꼽을 수 있다. 필자는 LCD 디바이스 드라이버 개발을 담당하고 있었고, 카메라 프로그램을 위한 API를 제공하여 애플리케이션을 개발하도록 돕고 있었다. 카메라 애플리케이션에서 일정 작업을 하다 보면 Memory Leak가 생기는 경우가 있었다.
LCD 디바이스 드라이버나 카메라 드라이버 역시 충분히 테스트를 했기 때문에 그럴 일이 없다고 장담을 하고 있는 상황이었고, CETK나 테스트 절차를 통해 대부분의 테스트가 Pass를 했기 때문에 안정화가 되었다고 생각하고 애플리케이션만의 문제라고 손 놓고 있었다.
하지만 애플리케이션 개발자의 집요한 분석 리포트와 테스트 방법론을 보고 할 수 없이 드라이버를 디버깅해야 했다. 결국 필자의 잘못으로 결론이 나왔고 많은 사람들의 원망(?)속에서 수정을 해야 했다. 이렇듯 윈도우 임베디드 CE 상의 애플리케이션 개발은 단순히 애플리케이션 개발뿐 아니라 시스템의 문제까지도 고려해야 하는 어려운 개발 작업이다.
따라서 개발을 하다 보면 비주얼 스튜디오 2005의 막강한 디버깅 기능만 가지고 디버깅을 하여 문제점을 찾아내기 어려울 때가 있다. 이러한 문제를 디버깅하기 위해 마이크로소프트는 다양한 디버깅 툴을 제공하고, 필자는 이 툴을 사용하여 어떻게 디버깅을 해 나가야 하는지 알려드리고자 한다.
윈도우 임베디드 CE용 애플리케이션 개발에 있어 버그가 없고 안정적인 프로그램을 만들기 위한 좋은 방법은 무엇일까? 이 질문에 대한 필자의 대답은 ‘개발 경험’+’좋은 설계’+’좋은 툴’+’테스트’+’@’ 이 5가지를 꼽을 수 있겠다. 개발 경험이야 개발하면서 얻어져야 하는 것이고, 좋은 설계 방법이나 방법론적인 방법은 S/W Engineering 책에 수없이 다루어졌기 때문에 본 칼럼에서 다루지는 않겠다.
플랫폼 빌더(Platform Builder), 비주얼 스튜디오라는 개발 환경은 사실상 널리 확인이 된 좋은 개발 환경이다. 여기에 반복적인 테스트를 통해 생겨날 수 있는 모든 문제점을 확인하는 것이야말로 윈도우 임베디드 CE용 애플리케이션 개발의 최적의 조건이라고 할 수 있겠다.
@는 어떤 요소일까? 윈도우 임베디드 CE용 애플리케이션은 임베디드 시스템이라는 것과 윈도우 임베디드 CE라는 운영체제라는 것을 염두에 두어야 한다는 것이다. 임베디드 시스템의 제한 사항을 머리에 항상 염두에 두고 적은 메모리를 차지하고 빠르게 동작할 수 있는 애플리케이션을 만들 수 있도록 노력을 해야 한다.
그러기 위해서는 윈도우 임베디드 CE라는 운영체제가 어떻게 동작하는지에 대한 지식을 가지고 있어야 한다. 6.0으로 오면서 메모리, 슬롯(Slot) 개념, 스레드(Thread)에 대한 제한이 많이 없어 졌지만 윈도우 CE 5.0 버전의 경우 이러한 시스템 제한 요소 때문에 애플리케이션 개발 시에도 문제가 되는 경우가 많았다.
슬롯의 한계 때문에 개별 프로그램으로써 개발 할 때는 잘 되다가도 정작 운영체제에 포함시키고 동작시킬 때는 갑자기 프로세스가 종료 되거나 시스템과 충돌하는 문제가 생기기도 했었다.
이러한 이유로 애플리케이션 개발을 할지라도 시스템에 대한 깊은 이해는 좋은 프로그램을 만들기 위한 밑받침이 되는 것이다. 따라서 윈도우 임베디드 CE에 대한 시스템적인 지식이 좋은 프로그램을 만들기 위한 @가 되는 것이다.
개발한 애플리케이션의 알고리즘적인 버그를 디버깅 하기 위해서는 구현한 세부 코드를 잘 살피고 변수의 변경을 추적하면서 어떠한 부분이 잘못되었는지 추적해 나가야 한다.
하지만 윈도우 임베디드 CE용 애플리케이션은 시스템과의 관계 및 구조를 잘 이해하면서 문제에 대해 집중하여 디버깅을 해야 한다. 이때 도움을 줄 수 있는 것들이 비주얼 스튜디오와 플랫폼 빌더, 그리고 각종 Remote Tool들이다.
이제부터 윈도우 임베디드 CE에서의 애플리케이션 디버깅에 관한 내용에 대해 살펴보도록 하겠다.
비주얼 스튜디오 2005 디버깅
일반적으로 윈도우 임베디드 CE 6.0용 애플리케이션의 개발과 디버깅은 비주얼 스튜디오 2005에서 이루어진다. 이전에 임베디드 비주얼 C++이 있어 플랫폼과 응용프로그램 개발도구 각각 존재하였지만 이제는 비주얼 스튜디오 2005라는 통합 환경으로 운영체제, 애플리케이션의 개발 및 디버깅을 같이 할 수 있게 되었다.
<그림 2>는 비주얼 스튜디오 2005에서 윈도우 임베디드 CE용 애플리케이션을 디버깅 하는 화면이다. 코드상의 문제점을 추적하기 위한 중단점(Breakpoint)의 설정을 통해 프로그램 진행을 잠시 중단하도록 한 후에 ‘한 단계씩 코드 실행’, ‘프로시저 단위 실행’ 명령을 통해 애플리케이션의 진행을 Step By Step 진행시키면서 디버깅 할 수 있다.
비주얼 스튜디오에서 애플리케이션 디버깅의 중요 요소들
이제 비주얼 스튜디오 환경은 윈도우 임베디드 CE 운영체제 개발 환경일 뿐 아니라 애플리케이션 개발 환경이다. 비주얼 스튜디오를 이용한 디버깅 방법은 이제 모두 다 아는 사실이다. 그래도 디버깅에 관련된 중요 키워드를 확인해 본다면 다음과 같다.
(1)중단점(BreakPoint) – 중단점은 윈도우 임베디드 CE용 애플리케이션 디버깅을 하기 위한 기본 요소이다. 프로그램 소스 내에 디버깅을 원하는 중요한 위치에 중단점을 설치하고 거기서부터 디버깅이 이루어진다.
(2)지역, 자동 – 지역 및 자동 창에는 현재 실행중인 코드 영역에 해당하는 지역 변수가 표시되고, 자동 창에는 현재 줄과 코드의 이전 줄에 사용된 변수가 나타나게 된다.
(3)호출 스택 – 애플리케이션 디버깅 시 눈 여겨 별 중요한 부분은 호출 스택 창이다. 호출 스택 창은 디버그 메뉴/창/호출 스택에서 확인할 수 있다. 실시간 디버깅작업에서는 호출된 순서를 보여주는 기능으로 사용할 수 있다. 즉, 현재 프로그램 라인까지 어떠한 함수가 호출되었는지 과정을 보여준다.
복잡한 애플리케이션의 디버깅 시 호출된 함수를 순서대로 역추적하면서 문제점을 확인할 수 있기 때문에 중요한 기능이라고 하겠다. <그림 3>은 비주얼 스튜디오 2005에 호출 스택 화면이다.
(4)메모리, 레지스터 – 애플리케이션 동작 중 레지스터의 값 및 메모리의 내용을 확인하기 위해 사용한다. 레지스터나 실제 메모리를 직접 바꾸면서 디버깅 용도로도 사용할 수 있다. <그림 2> 화면 참조.
윈도우 임베디드 CE 애플리케이션 개발의 첫걸음, 디버그 메시지
DEBUGZONE, DEBUGMSG, RETAILMSG 등의 디버깅 메시지 출력 매크로는 윈도우 임베디드 CE 개발을 하게 되면서 알게 된 중요한 매크로들이다. 시리얼 포트를 통하여 하이퍼 터미널이나 플랫폼 빌더의 디버그메시지 창에 출력된 메시지 정보 디버깅을 위한 중요한 실마리다.
문제에 따라 디버그 존을 설정해 어떠한 메시지를 중점적으로 볼 것인가 선택을 하고 출력된 메시지를 추적해 나가면서 문제점을 추적하는 방법은 고전적이지만 매우 유용한 디버깅 방법이다. 비주얼 스튜디오에서의 디버깅 메시지 출력뿐 아니라 OS 이미지 내에 포함되어서도 유용한 디버깅 정보를 제공하기 때문에 DEBUGMSG의 사용은 디버깅을 위한 기본 준비라고 하겠다.
DEBUGMSG 등록 및 사용 아래와 같다. DEBUGZONE을 등록하고, 등록한 DEBUGZONE에 따라 디버그 메시지를 출력할 수 있도록 DEBUGMSG를 사용하는 예이다. DEBUGMSG의 DEBUGZONE 설정은 실시간 디버깅 환경에서 디버깅 메시지 출력을 선택적으로 조절하면서 좀 더 쉽게 디버깅하고자 하기 위해서 사용한다.
플랫폼 빌더에서 모듈에 대한 DEBUGZONE의 표시와 DEBUGZONE의 선택은 <그림 4>과 같다.
Kernel Debugger를 이용한 애플리케이션 디버깅 방법
비주얼 스튜디오 2005를 이용한 임베디드 CE OS용 애플리케이션의 디버깅 방법은 PC용 애플리케이션을 디버깅하는 것과 별반 차이가 없다. 하지만 윈도우 임베디드 CE에서는 설치 가능한 독립적인 윈도우 임베디드 CE용 애플리케이션을 개발한다기 보다 NAND나 NOR같은 Flash 메모리상에 OS와 함께 탑재되어 동작되는 상황을 고려해야 한다.
UI(User Interface)와 프로그램의 기본 동작에 관련된 사항은 비주얼 스튜디오를 이용하여 디버깅을 마무리하고 OS에 탑재될 환경을 고려하여 OS이미지에 애플리케이션이 포함되어 빌드 되도록 하거나 플랫폼 빌더에서 애플리케이션을 실행시켜 OS 상에서의 애플리케이션의 동작 검증 및 디버깅을 할 수 있도록 한다.
<그림 5>는 윈도우 임베디드 CE 상에서 플랫폼 빌더를 이용해 OS 이미지에 포함된 “WavPlay.exe”라는 윈도우 임베디드 CE용 애플리케이션을 디버깅하는 그림이다. 비주얼 스튜디오에서 애플리케이션 디버깅 방법과 같이 소스 코드에 중단점을 설정한 후 디버깅을 진행하면 된다. 애플리케이션이 OS 이미지 내에 포함되어 있다는 것뿐 디버깅 방법은 차이가 없다.
Remote Tools을 사용한 애플리케이션 디버깅
플랫폼 빌더에서 애플리케이션을 디버깅하는 것은 간단하게는 윈도우 임베디드 CE 운영체제가 동작하는 환경에서 애플리케이션이 제대로 동작하는지 검증하는 것도 있지만 운영체제 사이와의 동작 관계를 확인하는 목적도 있다.
이때 사용하는 것이 플랫폼 빌더의 Remote tool이다. 애플리케이션과 운영체제 간의 미묘한 동작 검증을 하기 위해 사용한다. CeLog는 <표 1>과 같이 윈도우 임베디드 CE 운영체제에 대한 Heap 생성, 인터럽트 처리등과 같은 시스템 이벤트가 발생할 때 관련 이벤트를 기록하여 분석할 수 있게 하는 기능이다.
플랫폼 빌더 Remote Tool 사용을 위한 준비
윈도우 임베디드 CE 운영체제에서의 애플리케이션 디버깅은 위와 같이 플랫폼 빌더 상에서 실행 이미지를 직접 로드하거나 OS 이미지 내에 포함시켜 디버깅을 하면 된다. 하지만 Remote Tool을 이용하면 운영체제와의 관계를 파악하거나 Profiler를 통해 좀더 OS와의 관계를 통한 내부적인 동작내용을 확인할 수 있다.
그러기 위해서는 몇 가지 운영체제의 옵션을 추가해야 한다.
<그림 6>와 같이 프로젝트/속성 명령에서 설정하거나 환경 변수에 다음과 같이 추가 하면 된다. 환경 변수를 설정한 후 OS를 다시 빌드해야 Remote Tool을 이용해 애플리케이션의 문제점을 분석할 수 있는 환경이 준비되는 것이다.
Profiler나 CeLog Enable의 경우 Ethernet이나 USB 통한 KITL뿐만 아니라 ActiveSync를 통해서도 이용할 수 있기 때문에 개발 시 Profiler, CeLog가 Enable된 이미지를 별도로 릴리스한 후 ActiveSync 연결만으로 Application 디버깅을 위한 OS 이미지로 사용할 수 있다.
set IMGCELOGENABLE=1
set IMGPROFILER=1
set IMGAUTOFLUSH=1
Kernel Tracker를 이용한 Memory Leak 디버깅
윈도우 임베디드 CE용 애플리케이션 개발 중 가장 많이 겪는 문제는 애플리케이션의 성능 문제, 잘못된 동작 혹은 시스템 호출을 통한 “Data Abort” 발생 후 시스템의 중단, Memory Leak 문제이다. Data Abort의 발생은 동작 중 잘못된 코드를 호출한 후 생기는 문제이기 때문에 Data Abort가 발생한 시점의 모듈과 관계를 추적하다 보면 쉽게 찾아낼 수 있다.
누적해서 발생하는 문제가 아니라면 Data Abort 발생 지점을 추적하여 Data Abort를 일으키는 모듈의 위치 및 코드까지 추적할 수 있다.(자세한 사항은 Sue Loh’s Blog, http://blogs.msdn.com/sloh/를 참조하기 바란다).
Memory Leak는 애플리케이션에서 메모리 할당과 해지를 제대로 안 할 경우에 발생한다. Memory Leak을 방지하기 위해서는 사용 메모리의 할당과 해지에 대해서 주의해서 프로그램을 해야 한다.
Memory Leak은 Kernel Tracker를 이용하여 보다 손쉽게 디버깅 할 수 있다. 메모리의 할당과 해지를 이벤트 형태로 실시간 볼 수 있기 때문에 어떠한 부분에서 메모리 해지가 일어나지 않아 문제가 생기는지 확인할 수 있는 것이다. Kernel Tracker를 이용한 Memory Leak을 디버깅하기 위한 방법은 다음과 같다.
● Kernel Tracker의 Edit 메뉴에서 Event Filter를 선택한다. Synchronization, Miscellaneous, User Defined, Extensions에 설정된 이벤트 명을 모두 클리어 시키고 Memory 탭 부분만 설정한 채로 남겨둔다. <그림 7> 참고.
● Find Event를 선택하여 메모리 할당에 관련된 Allocate Heap 이벤트와 Free Heap 이벤트, Allocate Virtual Memory와 Free Virtual Memory 이벤트간의 관계 중에 빠진 것이 있는지 확인을 하면서 보다 자세하게 Memory Leak에 대해 디버깅 할 수 있는 것이다. <그림 7>은 Kernel Tracker를 이용한 Memory Leak 디버깅 화면이다. 그림과 같이 Allocate Virtual Memory에 해당하는 Free Virtual Memory가 없기 때문에 Memory Leak이 발생한다는 것을 손쉽게 디버깅할 수 있게 한다. <그림 8>은 Kernel Tracker를 이용해 Memory Leak을 찾아내는 화면이다.
Call Profiler를 이용한 수행시간 최적화
Call Profiler는 프로그램내의 함수나 코드의 동작시간을 수치와 그래픽적으로 표시해주어 어떠한 루틴에서 지연 요소가 생겼는지 분석할 수 있게 해주는 Remote Tool이다.
윈도우 임베디드 애플리케이션 개발이 어느 정도 마무리가 되었다면 Call Profiler로 프로그램의 수행시간을 측정하여 동작 지연 요소가 생기는 부분을 찾아내어 개선하는 방법도 애플리케이션의 성능 개선을 위한 좋은 방법이라고 하겠다. <그림 9>은 Call Profiler를 이용하여 프로그램의 수행 시간을 분석하는 화면이다.
ActiveSync 없이 Visual Studio 2005로 디버깅 하기
비주얼 스튜디오 2005로 윈도우 임베디드 CE용 애플리케이션을 개발하다 보면 귀찮은 부분 중의 하나가 ActiveSync를 통하여 단말기를 연결하고 디버깅을 해야 한다는 것이다.
만약 디버깅을 위한 Ethernet 포트가 있고, 프로세서가 ARMV4i나 X86계열이라면 "www.OpenNETCF.com"를 사용할 것을 추천한다. ActiveSync 없이 TCP/IP를 통해 Windows Embedded CE 장치와 연결하고 Application의 개발과 디버깅을 할 수 있게 하는 유틸리티이다.
테스트 자동화를 통한 Bug Free !
윈도우 임베디드CE 애플리케이션의 개발 방법론은 PC나 웹과 같은데 적용되는 개발 방법론과 결코 다르지 않다. 리펙토링(Refactoring), 페어 프로그래밍(Pair Programming)과 같이 현재 각광 받고 있는 프로그래밍 기법들 역시 윈도우 임베디드 CE 애플리케이션에서도 적용이 가능하다.
하지만 잊지 말아야 할 중요한 차이점은 애플리케이션에서 하드웨어에 대해 좀더 관여를 하고 있다는 점이다. 한 비트 잘못 설정한 프로세서의 레지스터 값이 나비 효과처럼 작용하여 전체 시스템을 불안하게 만드는 원인으로 작용할 수 있다는 것이다. 따라서 작은 문제점도 찾아낼 수 있는 테스트 방법과 기준이 필요한 것이다.
하지만 이러한 문제는 쉽게 발견되는 것이 아니기 때문에 테스트 방법에 대한 기준을 정하고 자동화할 수 있는 방법을 모색하라는 것이다. 말은 쉽지만 많은 시행착오가 있어야 좋은 방법을 찾을 수 있다.
개발 시작 초기에 어떤 테스트를 하고 어떤 테스트 결과를 기대할 것인가에 대한 기준을 정하는 것이 좋다. 완벽한 기준이 있다면 다행이지만 없다면 간단하게라도 만들라는 것이다. 제일 좋은 것은 실제 기기를 사용하는 것과 같은 기준으로 기준을 만들고 테스트 하는 것이다. 즉, "최소한 사용자가 어떻게 사용한다는 가정 하에 기준을 만들고 사용자가 사용하는 것처럼 테스트 하라" 라는 것이다.
예를 들어 내비게이션 시스템을 개발하고 있다고 가정하여 하루에 사용자가 키를 몇 번 누르는지 예측을 하여 제품의 수명만큼 계속 누르는 반복 테스트를 하라는 것이다.
실제로 핸드폰 품질을 책임지고 있는 품질 기술 연구소에서는 자동화된 기계나 로봇을 이용하여 사용자가 핸드폰을 사용하는 형태를 짧은 시간에 집중 테스트 하여 소프트웨어, 하드웨어서 생길 수 있는 문제를 검증하고 있다.
테스트를 하다 보면 개발 중에 예측하지 못하는 다양한 문제점을 이러한 테스트를 통하여 발견 할 수 있다. 실생활에서 특정 키를 연속으로 1만번 누르거나 전원 켜고 끄는 것을 1,000번 이상을 하지는 않는다. 하지만 이러한 반복적인 테스트에서 소프트웨어에서 있을지 모르는 버그를 발견할 수 있는 것이다.
일례로, 필자는 100ms 단위로 키를 반복적으로 1만번 누르는 테스트를 한 적이 있었다. 윈도우 CE의 포팅이나 응용프로그램이 어느 정도 안정화 됐다고 생각을 하고 있었다. 실제로 직접 이것저것 동작 시켜보면 제대로 동작하였다. 하지만 테스트 시작 후 3일 정도가 지난 후 모든 장치가 멈춰있는 것을 보게 되었다. 한마디로 시스템이 다운된 것이다.
나중에 알아낸 사실이지만 드라이버에서 수십 바이트의 메모리 누수가 발생하였고 이게 누적되어 3일 후에는 시스템을 다운 시키는 요소로 작용하였던 것이다. 평상시 간단히 테스트 할 때는 이러한 문제점을 찾을 수 없었다. 이러한 테스트를 하기 위해서 테스트 장치를 모든 회사에서 구비할 필요는 없다.
좀 고민을 하다 보면 몇 줄 안 되는 C 코드로 구현해서 테스트 해볼 수 있기 때문이다. 필자도 테스트 하는 장소가 필자의 회사에서 좀 멀리 떨어진 곳에 있어서 테스트 하러 가기 귀찮아서 고안해낸 방법이다.
다음 코드는 키 입력을 에뮬레이션 하는 간단한 코드이다. 필자는 이 코드를 별도 애플리케이션에서 구현하여 테스트 하는 방법을 사용하고 있다.
Sleep(KEY_PRESS_DURATION);
keybd_event((BYTE) VK_TUP, 0x0, 0, 0);
Sleep(KEY_PRESS_DURATION);
keybd_event((BYTE) VK_TUP, 0x0, KEYEVENTF_KEYUP, 0);
이 방법은 별도의 장치 없이 테스트 하는 방법이며 운영체제의 안정성뿐만 아니라 응용프로그램의 신뢰성 테스트에도 필자는 이용하고 있다. 이런 식의 간단한 루틴으로 간단하게는 키 테스트부터 Application의 반복 동작 시 문제점을 검증할 수 있는 것이다.
조금만 고민 한다면 자동으로 모든 테스트를 할 수 있고, 이러한 자동화된 테스트 방법이 여러분 시스템 및 안정성을 더욱 높여줄 것이다.
끝으로
윈도우 임베디드 CE 상의 애플리케이션 디버깅 방법을 위한 비주얼 스튜디오 2005의 디버깅 방법, 디버그 메시지 등록방법, 디버깅 테크닉 등에 대해 간략히 살펴봤다.
실제 디버깅에 사용되는 방법들은 단순한 한 가지 방법으로는 문제가 해결되지 않을 것이다. 하지만 문제에 대한 실마리는 언제나 비주얼 스튜디오의 디버깅 창에 나온 작은 단서로부터 찾아낼 수 있다.
실제 제품이 기획에서 생산이 되고 출시가 되기까지에는 무수히 반복된 테스트와 디버깅을 통해 안정성을 확보해야 한다. 그래야 비로소 상품으로써의 그 가치를 인정 받을 수 있을 것이다.
디버깅을 하기 위해 밤새 반복된 테스트와 원인 분석을 하고 마침내 그 문제가 해결 됐을 때의 기쁨은 엔지니어가 아니면 누리기 힘든 기쁨일 것이다. 비주얼 스튜디오와 플랫폼 빌더의 막강한 디버깅기능을 이용해 “Bug Free!” Application에 도전해 보기 바란다!
라영호님은 Windows Embedded 분야 Microsoft MVP로 현제 인벤텍 상하이 연구소에서 Windows Embedded CE 기반의 단말기 및 스마트폰을 개발하고 있으며, Windows Embedded 운영체제에 대한 블로그를 운영하고 있다.
윈도우 임베디드 CE(Windows Embedded CE) 개발 과정을 크게 4가지로 구분해 본다면, 하드웨어에 관련된 부트 로더 개발 부분, 디바이스 드라이버 관련 개발 부분, OS를 포팅하고 최적화 하는 부분, 개발한 장비에서 동작할 애플리케이션을 개발하는 것으로 분류해 볼 수 있다. 각 개발 단계 중 본 칼럼에서는 윈도우 임베디드 CE 상의 애플리케이션 개발이라는 주제, 그 중에서도 애플리케이션 개발 과정 중의 디버깅 방법에 대한 내용에 대해 알아보고자 한다.
윈도우 임베디드 CE용 애플리케이션 개발은 <그림 1>과 같이 윈도우 임베디드 CE 운영체제의 포팅, SDK 생성과 같이 PC 애플리케이션에서는 고려하지 않았던 단계들이 추가되고 개발하는 하드웨어의 LCD나 장치를 고려하고 개발해야 한다는 제한 사항이 있다.
다른 어려움은 PC와 같이 어느 정도 안정화된 운영체제 환경에서 개발을 하는 것이 아니라, 개발 중인 운영체제에서 애플리케이션을 개발해야 한다는 것이다. 문제점이 애플리케이션에서 발생하는 것인지 포팅이 완전히 안 끝난 시스템의 문제인지 확인하기가 난해하다는 것이다.
일례로 필자가 이전 개발 프로젝트 개발 중에 생겼던 문제를 꼽을 수 있다. 필자는 LCD 디바이스 드라이버 개발을 담당하고 있었고, 카메라 프로그램을 위한 API를 제공하여 애플리케이션을 개발하도록 돕고 있었다. 카메라 애플리케이션에서 일정 작업을 하다 보면 Memory Leak가 생기는 경우가 있었다.
LCD 디바이스 드라이버나 카메라 드라이버 역시 충분히 테스트를 했기 때문에 그럴 일이 없다고 장담을 하고 있는 상황이었고, CETK나 테스트 절차를 통해 대부분의 테스트가 Pass를 했기 때문에 안정화가 되었다고 생각하고 애플리케이션만의 문제라고 손 놓고 있었다.
하지만 애플리케이션 개발자의 집요한 분석 리포트와 테스트 방법론을 보고 할 수 없이 드라이버를 디버깅해야 했다. 결국 필자의 잘못으로 결론이 나왔고 많은 사람들의 원망(?)속에서 수정을 해야 했다. 이렇듯 윈도우 임베디드 CE 상의 애플리케이션 개발은 단순히 애플리케이션 개발뿐 아니라 시스템의 문제까지도 고려해야 하는 어려운 개발 작업이다.
따라서 개발을 하다 보면 비주얼 스튜디오 2005의 막강한 디버깅 기능만 가지고 디버깅을 하여 문제점을 찾아내기 어려울 때가 있다. 이러한 문제를 디버깅하기 위해 마이크로소프트는 다양한 디버깅 툴을 제공하고, 필자는 이 툴을 사용하여 어떻게 디버깅을 해 나가야 하는지 알려드리고자 한다.
<그림 1 - AppDev.bmp> |
윈도우 임베디드 CE용 애플리케이션 개발에 있어 버그가 없고 안정적인 프로그램을 만들기 위한 좋은 방법은 무엇일까? 이 질문에 대한 필자의 대답은 ‘개발 경험’+’좋은 설계’+’좋은 툴’+’테스트’+’@’ 이 5가지를 꼽을 수 있겠다. 개발 경험이야 개발하면서 얻어져야 하는 것이고, 좋은 설계 방법이나 방법론적인 방법은 S/W Engineering 책에 수없이 다루어졌기 때문에 본 칼럼에서 다루지는 않겠다.
플랫폼 빌더(Platform Builder), 비주얼 스튜디오라는 개발 환경은 사실상 널리 확인이 된 좋은 개발 환경이다. 여기에 반복적인 테스트를 통해 생겨날 수 있는 모든 문제점을 확인하는 것이야말로 윈도우 임베디드 CE용 애플리케이션 개발의 최적의 조건이라고 할 수 있겠다.
@는 어떤 요소일까? 윈도우 임베디드 CE용 애플리케이션은 임베디드 시스템이라는 것과 윈도우 임베디드 CE라는 운영체제라는 것을 염두에 두어야 한다는 것이다. 임베디드 시스템의 제한 사항을 머리에 항상 염두에 두고 적은 메모리를 차지하고 빠르게 동작할 수 있는 애플리케이션을 만들 수 있도록 노력을 해야 한다.
그러기 위해서는 윈도우 임베디드 CE라는 운영체제가 어떻게 동작하는지에 대한 지식을 가지고 있어야 한다. 6.0으로 오면서 메모리, 슬롯(Slot) 개념, 스레드(Thread)에 대한 제한이 많이 없어 졌지만 윈도우 CE 5.0 버전의 경우 이러한 시스템 제한 요소 때문에 애플리케이션 개발 시에도 문제가 되는 경우가 많았다.
슬롯의 한계 때문에 개별 프로그램으로써 개발 할 때는 잘 되다가도 정작 운영체제에 포함시키고 동작시킬 때는 갑자기 프로세스가 종료 되거나 시스템과 충돌하는 문제가 생기기도 했었다.
이러한 이유로 애플리케이션 개발을 할지라도 시스템에 대한 깊은 이해는 좋은 프로그램을 만들기 위한 밑받침이 되는 것이다. 따라서 윈도우 임베디드 CE에 대한 시스템적인 지식이 좋은 프로그램을 만들기 위한 @가 되는 것이다.
개발한 애플리케이션의 알고리즘적인 버그를 디버깅 하기 위해서는 구현한 세부 코드를 잘 살피고 변수의 변경을 추적하면서 어떠한 부분이 잘못되었는지 추적해 나가야 한다.
하지만 윈도우 임베디드 CE용 애플리케이션은 시스템과의 관계 및 구조를 잘 이해하면서 문제에 대해 집중하여 디버깅을 해야 한다. 이때 도움을 줄 수 있는 것들이 비주얼 스튜디오와 플랫폼 빌더, 그리고 각종 Remote Tool들이다.
이제부터 윈도우 임베디드 CE에서의 애플리케이션 디버깅에 관한 내용에 대해 살펴보도록 하겠다.
비주얼 스튜디오 2005 디버깅
일반적으로 윈도우 임베디드 CE 6.0용 애플리케이션의 개발과 디버깅은 비주얼 스튜디오 2005에서 이루어진다. 이전에 임베디드 비주얼 C++이 있어 플랫폼과 응용프로그램 개발도구 각각 존재하였지만 이제는 비주얼 스튜디오 2005라는 통합 환경으로 운영체제, 애플리케이션의 개발 및 디버깅을 같이 할 수 있게 되었다.
<그림 2>는 비주얼 스튜디오 2005에서 윈도우 임베디드 CE용 애플리케이션을 디버깅 하는 화면이다. 코드상의 문제점을 추적하기 위한 중단점(Breakpoint)의 설정을 통해 프로그램 진행을 잠시 중단하도록 한 후에 ‘한 단계씩 코드 실행’, ‘프로시저 단위 실행’ 명령을 통해 애플리케이션의 진행을 Step By Step 진행시키면서 디버깅 할 수 있다.
<그림 2-VS2005 Debug.BMP> |
비주얼 스튜디오에서 애플리케이션 디버깅의 중요 요소들
이제 비주얼 스튜디오 환경은 윈도우 임베디드 CE 운영체제 개발 환경일 뿐 아니라 애플리케이션 개발 환경이다. 비주얼 스튜디오를 이용한 디버깅 방법은 이제 모두 다 아는 사실이다. 그래도 디버깅에 관련된 중요 키워드를 확인해 본다면 다음과 같다.
(1)중단점(BreakPoint) – 중단점은 윈도우 임베디드 CE용 애플리케이션 디버깅을 하기 위한 기본 요소이다. 프로그램 소스 내에 디버깅을 원하는 중요한 위치에 중단점을 설치하고 거기서부터 디버깅이 이루어진다.
(2)지역, 자동 – 지역 및 자동 창에는 현재 실행중인 코드 영역에 해당하는 지역 변수가 표시되고, 자동 창에는 현재 줄과 코드의 이전 줄에 사용된 변수가 나타나게 된다.
(3)호출 스택 – 애플리케이션 디버깅 시 눈 여겨 별 중요한 부분은 호출 스택 창이다. 호출 스택 창은 디버그 메뉴/창/호출 스택에서 확인할 수 있다. 실시간 디버깅작업에서는 호출된 순서를 보여주는 기능으로 사용할 수 있다. 즉, 현재 프로그램 라인까지 어떠한 함수가 호출되었는지 과정을 보여준다.
복잡한 애플리케이션의 디버깅 시 호출된 함수를 순서대로 역추적하면서 문제점을 확인할 수 있기 때문에 중요한 기능이라고 하겠다. <그림 3>은 비주얼 스튜디오 2005에 호출 스택 화면이다.
<그림 3 - CallStack.BMP> |
(4)메모리, 레지스터 – 애플리케이션 동작 중 레지스터의 값 및 메모리의 내용을 확인하기 위해 사용한다. 레지스터나 실제 메모리를 직접 바꾸면서 디버깅 용도로도 사용할 수 있다. <그림 2> 화면 참조.
윈도우 임베디드 CE 애플리케이션 개발의 첫걸음, 디버그 메시지
DEBUGZONE, DEBUGMSG, RETAILMSG 등의 디버깅 메시지 출력 매크로는 윈도우 임베디드 CE 개발을 하게 되면서 알게 된 중요한 매크로들이다. 시리얼 포트를 통하여 하이퍼 터미널이나 플랫폼 빌더의 디버그메시지 창에 출력된 메시지 정보 디버깅을 위한 중요한 실마리다.
문제에 따라 디버그 존을 설정해 어떠한 메시지를 중점적으로 볼 것인가 선택을 하고 출력된 메시지를 추적해 나가면서 문제점을 추적하는 방법은 고전적이지만 매우 유용한 디버깅 방법이다. 비주얼 스튜디오에서의 디버깅 메시지 출력뿐 아니라 OS 이미지 내에 포함되어서도 유용한 디버깅 정보를 제공하기 때문에 DEBUGMSG의 사용은 디버깅을 위한 기본 준비라고 하겠다.
DEBUGMSG 등록 및 사용 아래와 같다. DEBUGZONE을 등록하고, 등록한 DEBUGZONE에 따라 디버그 메시지를 출력할 수 있도록 DEBUGMSG를 사용하는 예이다. DEBUGMSG의 DEBUGZONE 설정은 실시간 디버깅 환경에서 디버깅 메시지 출력을 선택적으로 조절하면서 좀 더 쉽게 디버깅하고자 하기 위해서 사용한다.
플랫폼 빌더에서 모듈에 대한 DEBUGZONE의 표시와 DEBUGZONE의 선택은 <그림 4>과 같다.
<그림 4 - DEBUGZONE.BMP> |
Kernel Debugger를 이용한 애플리케이션 디버깅 방법
비주얼 스튜디오 2005를 이용한 임베디드 CE OS용 애플리케이션의 디버깅 방법은 PC용 애플리케이션을 디버깅하는 것과 별반 차이가 없다. 하지만 윈도우 임베디드 CE에서는 설치 가능한 독립적인 윈도우 임베디드 CE용 애플리케이션을 개발한다기 보다 NAND나 NOR같은 Flash 메모리상에 OS와 함께 탑재되어 동작되는 상황을 고려해야 한다.
UI(User Interface)와 프로그램의 기본 동작에 관련된 사항은 비주얼 스튜디오를 이용하여 디버깅을 마무리하고 OS에 탑재될 환경을 고려하여 OS이미지에 애플리케이션이 포함되어 빌드 되도록 하거나 플랫폼 빌더에서 애플리케이션을 실행시켜 OS 상에서의 애플리케이션의 동작 검증 및 디버깅을 할 수 있도록 한다.
<그림 5>는 윈도우 임베디드 CE 상에서 플랫폼 빌더를 이용해 OS 이미지에 포함된 “WavPlay.exe”라는 윈도우 임베디드 CE용 애플리케이션을 디버깅하는 그림이다. 비주얼 스튜디오에서 애플리케이션 디버깅 방법과 같이 소스 코드에 중단점을 설정한 후 디버깅을 진행하면 된다. 애플리케이션이 OS 이미지 내에 포함되어 있다는 것뿐 디버깅 방법은 차이가 없다.
<그림 5- PlatformDebug.BMP> |
Remote Tools을 사용한 애플리케이션 디버깅
플랫폼 빌더에서 애플리케이션을 디버깅하는 것은 간단하게는 윈도우 임베디드 CE 운영체제가 동작하는 환경에서 애플리케이션이 제대로 동작하는지 검증하는 것도 있지만 운영체제 사이와의 동작 관계를 확인하는 목적도 있다.
이때 사용하는 것이 플랫폼 빌더의 Remote tool이다. 애플리케이션과 운영체제 간의 미묘한 동작 검증을 하기 위해 사용한다. CeLog는 <표 1>과 같이 윈도우 임베디드 CE 운영체제에 대한 Heap 생성, 인터럽트 처리등과 같은 시스템 이벤트가 발생할 때 관련 이벤트를 기록하여 분석할 수 있게 하는 기능이다.
<표 1 - CeLog Event 예> |
플랫폼 빌더 Remote Tool 사용을 위한 준비
윈도우 임베디드 CE 운영체제에서의 애플리케이션 디버깅은 위와 같이 플랫폼 빌더 상에서 실행 이미지를 직접 로드하거나 OS 이미지 내에 포함시켜 디버깅을 하면 된다. 하지만 Remote Tool을 이용하면 운영체제와의 관계를 파악하거나 Profiler를 통해 좀더 OS와의 관계를 통한 내부적인 동작내용을 확인할 수 있다.
그러기 위해서는 몇 가지 운영체제의 옵션을 추가해야 한다.
<그림 6>와 같이 프로젝트/속성 명령에서 설정하거나 환경 변수에 다음과 같이 추가 하면 된다. 환경 변수를 설정한 후 OS를 다시 빌드해야 Remote Tool을 이용해 애플리케이션의 문제점을 분석할 수 있는 환경이 준비되는 것이다.
Profiler나 CeLog Enable의 경우 Ethernet이나 USB 통한 KITL뿐만 아니라 ActiveSync를 통해서도 이용할 수 있기 때문에 개발 시 Profiler, CeLog가 Enable된 이미지를 별도로 릴리스한 후 ActiveSync 연결만으로 Application 디버깅을 위한 OS 이미지로 사용할 수 있다.
set IMGCELOGENABLE=1
set IMGPROFILER=1
set IMGAUTOFLUSH=1
<그림 6-ProfilerSetting.bmp> |
Kernel Tracker를 이용한 Memory Leak 디버깅
윈도우 임베디드 CE용 애플리케이션 개발 중 가장 많이 겪는 문제는 애플리케이션의 성능 문제, 잘못된 동작 혹은 시스템 호출을 통한 “Data Abort” 발생 후 시스템의 중단, Memory Leak 문제이다. Data Abort의 발생은 동작 중 잘못된 코드를 호출한 후 생기는 문제이기 때문에 Data Abort가 발생한 시점의 모듈과 관계를 추적하다 보면 쉽게 찾아낼 수 있다.
누적해서 발생하는 문제가 아니라면 Data Abort 발생 지점을 추적하여 Data Abort를 일으키는 모듈의 위치 및 코드까지 추적할 수 있다.(자세한 사항은 Sue Loh’s Blog, http://blogs.msdn.com/sloh/를 참조하기 바란다).
Memory Leak는 애플리케이션에서 메모리 할당과 해지를 제대로 안 할 경우에 발생한다. Memory Leak을 방지하기 위해서는 사용 메모리의 할당과 해지에 대해서 주의해서 프로그램을 해야 한다.
Memory Leak은 Kernel Tracker를 이용하여 보다 손쉽게 디버깅 할 수 있다. 메모리의 할당과 해지를 이벤트 형태로 실시간 볼 수 있기 때문에 어떠한 부분에서 메모리 해지가 일어나지 않아 문제가 생기는지 확인할 수 있는 것이다. Kernel Tracker를 이용한 Memory Leak을 디버깅하기 위한 방법은 다음과 같다.
● Kernel Tracker의 Edit 메뉴에서 Event Filter를 선택한다. Synchronization, Miscellaneous, User Defined, Extensions에 설정된 이벤트 명을 모두 클리어 시키고 Memory 탭 부분만 설정한 채로 남겨둔다. <그림 7> 참고.
<그림 7- MemoryLeak.bmp> |
● Find Event를 선택하여 메모리 할당에 관련된 Allocate Heap 이벤트와 Free Heap 이벤트, Allocate Virtual Memory와 Free Virtual Memory 이벤트간의 관계 중에 빠진 것이 있는지 확인을 하면서 보다 자세하게 Memory Leak에 대해 디버깅 할 수 있는 것이다. <그림 7>은 Kernel Tracker를 이용한 Memory Leak 디버깅 화면이다. 그림과 같이 Allocate Virtual Memory에 해당하는 Free Virtual Memory가 없기 때문에 Memory Leak이 발생한다는 것을 손쉽게 디버깅할 수 있게 한다. <그림 8>은 Kernel Tracker를 이용해 Memory Leak을 찾아내는 화면이다.
<그림 8 - KernelTracker.bmp> |
Call Profiler를 이용한 수행시간 최적화
Call Profiler는 프로그램내의 함수나 코드의 동작시간을 수치와 그래픽적으로 표시해주어 어떠한 루틴에서 지연 요소가 생겼는지 분석할 수 있게 해주는 Remote Tool이다.
윈도우 임베디드 애플리케이션 개발이 어느 정도 마무리가 되었다면 Call Profiler로 프로그램의 수행시간을 측정하여 동작 지연 요소가 생기는 부분을 찾아내어 개선하는 방법도 애플리케이션의 성능 개선을 위한 좋은 방법이라고 하겠다. <그림 9>은 Call Profiler를 이용하여 프로그램의 수행 시간을 분석하는 화면이다.
<그림 9 - CallProfiler.bmp> |
ActiveSync 없이 Visual Studio 2005로 디버깅 하기
비주얼 스튜디오 2005로 윈도우 임베디드 CE용 애플리케이션을 개발하다 보면 귀찮은 부분 중의 하나가 ActiveSync를 통하여 단말기를 연결하고 디버깅을 해야 한다는 것이다.
만약 디버깅을 위한 Ethernet 포트가 있고, 프로세서가 ARMV4i나 X86계열이라면 "www.OpenNETCF.com"를 사용할 것을 추천한다. ActiveSync 없이 TCP/IP를 통해 Windows Embedded CE 장치와 연결하고 Application의 개발과 디버깅을 할 수 있게 하는 유틸리티이다.
테스트 자동화를 통한 Bug Free !
윈도우 임베디드CE 애플리케이션의 개발 방법론은 PC나 웹과 같은데 적용되는 개발 방법론과 결코 다르지 않다. 리펙토링(Refactoring), 페어 프로그래밍(Pair Programming)과 같이 현재 각광 받고 있는 프로그래밍 기법들 역시 윈도우 임베디드 CE 애플리케이션에서도 적용이 가능하다.
하지만 잊지 말아야 할 중요한 차이점은 애플리케이션에서 하드웨어에 대해 좀더 관여를 하고 있다는 점이다. 한 비트 잘못 설정한 프로세서의 레지스터 값이 나비 효과처럼 작용하여 전체 시스템을 불안하게 만드는 원인으로 작용할 수 있다는 것이다. 따라서 작은 문제점도 찾아낼 수 있는 테스트 방법과 기준이 필요한 것이다.
하지만 이러한 문제는 쉽게 발견되는 것이 아니기 때문에 테스트 방법에 대한 기준을 정하고 자동화할 수 있는 방법을 모색하라는 것이다. 말은 쉽지만 많은 시행착오가 있어야 좋은 방법을 찾을 수 있다.
개발 시작 초기에 어떤 테스트를 하고 어떤 테스트 결과를 기대할 것인가에 대한 기준을 정하는 것이 좋다. 완벽한 기준이 있다면 다행이지만 없다면 간단하게라도 만들라는 것이다. 제일 좋은 것은 실제 기기를 사용하는 것과 같은 기준으로 기준을 만들고 테스트 하는 것이다. 즉, "최소한 사용자가 어떻게 사용한다는 가정 하에 기준을 만들고 사용자가 사용하는 것처럼 테스트 하라" 라는 것이다.
예를 들어 내비게이션 시스템을 개발하고 있다고 가정하여 하루에 사용자가 키를 몇 번 누르는지 예측을 하여 제품의 수명만큼 계속 누르는 반복 테스트를 하라는 것이다.
실제로 핸드폰 품질을 책임지고 있는 품질 기술 연구소에서는 자동화된 기계나 로봇을 이용하여 사용자가 핸드폰을 사용하는 형태를 짧은 시간에 집중 테스트 하여 소프트웨어, 하드웨어서 생길 수 있는 문제를 검증하고 있다.
테스트를 하다 보면 개발 중에 예측하지 못하는 다양한 문제점을 이러한 테스트를 통하여 발견 할 수 있다. 실생활에서 특정 키를 연속으로 1만번 누르거나 전원 켜고 끄는 것을 1,000번 이상을 하지는 않는다. 하지만 이러한 반복적인 테스트에서 소프트웨어에서 있을지 모르는 버그를 발견할 수 있는 것이다.
일례로, 필자는 100ms 단위로 키를 반복적으로 1만번 누르는 테스트를 한 적이 있었다. 윈도우 CE의 포팅이나 응용프로그램이 어느 정도 안정화 됐다고 생각을 하고 있었다. 실제로 직접 이것저것 동작 시켜보면 제대로 동작하였다. 하지만 테스트 시작 후 3일 정도가 지난 후 모든 장치가 멈춰있는 것을 보게 되었다. 한마디로 시스템이 다운된 것이다.
나중에 알아낸 사실이지만 드라이버에서 수십 바이트의 메모리 누수가 발생하였고 이게 누적되어 3일 후에는 시스템을 다운 시키는 요소로 작용하였던 것이다. 평상시 간단히 테스트 할 때는 이러한 문제점을 찾을 수 없었다. 이러한 테스트를 하기 위해서 테스트 장치를 모든 회사에서 구비할 필요는 없다.
좀 고민을 하다 보면 몇 줄 안 되는 C 코드로 구현해서 테스트 해볼 수 있기 때문이다. 필자도 테스트 하는 장소가 필자의 회사에서 좀 멀리 떨어진 곳에 있어서 테스트 하러 가기 귀찮아서 고안해낸 방법이다.
다음 코드는 키 입력을 에뮬레이션 하는 간단한 코드이다. 필자는 이 코드를 별도 애플리케이션에서 구현하여 테스트 하는 방법을 사용하고 있다.
Sleep(KEY_PRESS_DURATION);
keybd_event((BYTE) VK_TUP, 0x0, 0, 0);
Sleep(KEY_PRESS_DURATION);
keybd_event((BYTE) VK_TUP, 0x0, KEYEVENTF_KEYUP, 0);
이 방법은 별도의 장치 없이 테스트 하는 방법이며 운영체제의 안정성뿐만 아니라 응용프로그램의 신뢰성 테스트에도 필자는 이용하고 있다. 이런 식의 간단한 루틴으로 간단하게는 키 테스트부터 Application의 반복 동작 시 문제점을 검증할 수 있는 것이다.
조금만 고민 한다면 자동으로 모든 테스트를 할 수 있고, 이러한 자동화된 테스트 방법이 여러분 시스템 및 안정성을 더욱 높여줄 것이다.
끝으로
윈도우 임베디드 CE 상의 애플리케이션 디버깅 방법을 위한 비주얼 스튜디오 2005의 디버깅 방법, 디버그 메시지 등록방법, 디버깅 테크닉 등에 대해 간략히 살펴봤다.
실제 디버깅에 사용되는 방법들은 단순한 한 가지 방법으로는 문제가 해결되지 않을 것이다. 하지만 문제에 대한 실마리는 언제나 비주얼 스튜디오의 디버깅 창에 나온 작은 단서로부터 찾아낼 수 있다.
실제 제품이 기획에서 생산이 되고 출시가 되기까지에는 무수히 반복된 테스트와 디버깅을 통해 안정성을 확보해야 한다. 그래야 비로소 상품으로써의 그 가치를 인정 받을 수 있을 것이다.
디버깅을 하기 위해 밤새 반복된 테스트와 원인 분석을 하고 마침내 그 문제가 해결 됐을 때의 기쁨은 엔지니어가 아니면 누리기 힘든 기쁨일 것이다. 비주얼 스튜디오와 플랫폼 빌더의 막강한 디버깅기능을 이용해 “Bug Free!” Application에 도전해 보기 바란다!
'Windows Embedded > Windows Embedded CE 6.0' 카테고리의 다른 글
Windows CE 이미지 생성을 위한 configuration files (0) | 2007.10.31 |
---|---|
Windows Embedded CE 6.0 Update Check (0) | 2007.10.29 |
[WindowsCE 6.0 특집 ②] 윈도우 임베디드 CE 6.0의 Cellcore 및 RIL 기능 (0) | 2007.10.18 |
[WindowsCE 6.0 특집 ①] 연결된 장치 개발을 위한 윈도우 임베디드 CE 6 플랫폼 (0) | 2007.10.18 |
Windows CE 개발자를 위한 커뮤니티들.. (0) | 2007.10.17 |
2007. 10. 18. 09:44
[WindowsCE 6.0 특집 ①] 연결된 장치 개발을 위한 윈도우 임베디드 CE 6 플랫폼
2007. 10. 18. 09:44 in Windows Embedded/Windows Embedded CE 6.0
다음은 'zdnet'에 올라와 있는 서진호님의 글을 스크랩한 것이다.
서진호님은 현재 마이크로소프트 임베디드 디벨로퍼 에반젤리스트로 활동하고 있으며 국내 모바일/임베디드 및 로봇 기술전도에 앞장서고 있다. 현재 서진호 모바일/임베디드 이야기라는 블로그를 운영하고 있다.
서진호님은 현재 마이크로소프트 임베디드 디벨로퍼 에반젤리스트로 활동하고 있으며 국내 모바일/임베디드 및 로봇 기술전도에 앞장서고 있다. 현재 서진호 모바일/임베디드 이야기라는 블로그를 운영하고 있다.
여러분은 어떤 술을 좋아하는가?
남자분들이라면 만추의 그윽한 향기를 느낄 수 있는 몰트 위스키 한 잔을 떠올릴 것이고 여자분들이라면 부드럽고 감미로운 붉은 포도주 한 잔을 떠오를 것이다. 최근 미국 로스앤젤레스에서 개최된 와이어드 넥스트 페스트2007에서 이 와인에 RFID를 달아서 판매된 수량 및 재고 파악 외에 이 와인을 사 가지고 간 고객 정보를 입력 받아 같은 와인 종류를 좋아하는 사람들끼리 커뮤니티를 형성 해주는 일종의 소셜 네트워크(Social Networking) 마케팅을 한 사례가 소개되었다.
생각보다 우리가 알지 못하는 사이에 임베디드 장치는 우리의 생활 속에 사람들과 잘 융합해 가고 있다. 오늘은 이러한 임베디드 장치를 만드는 데 향후 차세대 먹거리가 어떠한 것이 될 것인가에 대해 함께 이야기를 나누어 보도록 하자.
연결형 장치 개발의 도래 배경
국내 유비쿼터스 전도사인 차원용 소장님은 향후 유비쿼터스 시대가 도래하게 되면 우리의 오감을 만족시키는 임베디드 장치와 소프트웨어 서비스가 융복합(NT+IT+BT융합)된다고 예측한 바 있다.
이러한 예측은 [그림1]에서 보듯이 IDC 기관의 2005년도 11월 리포트에서 잘 입증해 주고 있다. 따라서 향후 2010년에는 PC 시장이 점차 태블릿PC 또는 미니PC와 같은 인간 중심의 필기/음성 인식이 탑재된 사용자 인터페이스를 가진 PC로 서서히 진화되며, 지금의 강력한 PC 기능은 개인 사용자가 사용하고 있는 나만의 PC(PDA)로 변모하고 산업 속에서 점차 기계와 기계 간의 스스로 연결되고 동작하는 로봇과 같은 장치로 변모될 것이다.
그만큼 개인과 기업 시장에서의 임베디드 시장은 폭발적인 성장을 할 것이라는 예측을 하고 있다. 특히 연결된 장치라 부르는 인터넷이나 다른 네트워크(무선랜/블루투스)와 같은 연결형 장치의 출시가 주류를 이끌게 될 것이다.
한편, 이러한 연결된 장치는 독립형 장치와 달리 인터넷을 통한 웹 사이트 또는 기업의 기간계 백-엔드 시스템과 접속을 기본으로 한다.
예를 들어 앞에서 말했던 RFID를 이용한 와인 소셜 네트워킹 시스템에서 RFID가 담긴 와인 장치를 클라이언트라고 보면 고객의 동적인 정보를 기록하여 소셜 네트워킹으로 연결해 주는 백-엔드 고객 관리 시스템은 서버라고 볼 수 있다.
지금까지 이러한 클라이언트는 메인 프레임의 호스트부터 다운사이징이 된 후 PC, 그리고 웹을 이용한 클라이언트를 이용하는 것까지 발전해왔다. 그러나 향후 이러한 시스템과 병행하여 임베디드 장치를 클라이언트로 하는 하드웨어, 소프트웨어 및 웹 서비스가 융합하는 이른바 ‘서비스로서의 소프트웨어’ 시장이 도래하게 될 것이다.
결론적으로 말해서 서비스로서의 소프트웨어는 장치 중심에서 사람 중심으로 시나리오가 변경되므로 새로운 비즈니스 모델을 기반한 수익 창출의 증대에 있다. 특히 국내와 같은 하드웨어 기반의 IT 산업에서는 하드웨어와 소프트웨어 지식이 결합하여 다른 나라와의 경쟁에서 우위를 선점할 수 있는 기반이 중요하다.
새로운 여정의 시작, 윈도우 임베디드 CE 6
그렇다면 임베디드 개발자 입장에서 보자면 이것을 어떻게 구현할 것인가에 대해 의문을 가지게 될 것이다. 만일 지금 당장 이를 시제품으로 구현해 보라고 명령이 떨어진다면 연결된 장치라고 해서니까 먼저 임베디드 보드에 통신을 할 수 있는 LAN 포트와 그 밖의 부가적으로 동작시키는 CPU와 메모리, 배터리 등 하드웨어 사양에 대한 조사를 할 것이다.
그런 후에 여러분들은 보드 기반의 소프트웨어 프레임워크인 BSP(Board Support Package)가 있는지 점검하게 될 것이다. 그 위의 여러분들이 동작시킬 장치 드라이버와 사용자 인터페이스에 필요한 쉘(Shell)이나 최종 사용자가 사용할 응용 프로그램을 탑재 시킬 것이다.
여기까지가 일반적으로 임베디드 개발자가 구현하는 범위일 것이다. 여기 범위에서 한 발짝 더 나아가 연결된 장치는 웹 서버를 통한 웹 사이트나 기간계 백-엔드 시스템을 연결하면 된다.
이때 SOAP이나 REST와 같은 표준 통신 프로토콜을 이용한 서비스-지향 아키텍처로 기존의 솔루션과 통합하는 작업이 필요하다. [그림3]은 연결된 장치 기반의 솔루션 아키텍처를 잘 보여주는 예이다.
이러한 연결된 장치는 개인 부문 시장에서는 자동차 내비게이션 또는 IPTV와 같은 솔루션에서 이미 DMB나 안정된 케이블 또는 WiBro/HSDPA와 같은 유무선 네트워크와 연결되어 서비스되고 있다. 그러나 고객들은 좀 더 빠르고 편리하게 사용하며 저전력의 소프트웨어를 원하고 있다.
이것을 뒷받침하기 위해서는 하드웨어 업체도 CPU와 메모리의 용량도 증폭시키는 데 투자를 많이 하고 있지만 소프트웨어 플랫폼들도 이를 긴밀하게 지원하기 위한 프로세스 및 메모리 관리를 혁신시킬 필요가 있다.
윈도우 임베디드 CE 6부터는 10년 동안 사용하던 정적으로 프로세스를 관리하는 방법을 버리고 PC 운영체제와 비슷하게 동적으로 프로세스를 관리하는 방식으로 변경되었다.
윈도우 임베디드 CE 6에서는 3만2,000개의 프로세스와 하나의 프로세스당 4기가 가상 메모리 중 2기가 사용자 메모리를 쓸 수 있어서 기존 버전보다 가상 메모리를 더 사용할 수 있기 때문에 용량이 많은 HD급 화질의 멀티미디어 동영상이나 트래픽이 많은 스트리밍 서비스 등을 소프트웨어적으로 더 가속화시킬 수 있는 기반을 마련했다.
[그림4]는 작년 11월에 발표된 윈도우 임베디드 CE 6 커널 아키텍처를 나타낸 그림이다. 여기에서 보듯이 윈도우 임베디드 CE6는 과거 버전과 달리 커널 모드와 사용자 모드라는 두 가지의 모드로 분리했다.
이것은 커널 장치 드라이버의 성능을 좀더 높이기 위해, 그리고 USB나 SDIO과 같은 입출력 많은 사용자 드라이버로 인하여 견고성을 갖추기 위해 분리시켰다.
또한 임베디드 보드나 칩을 만드는 회사가 포팅을 해주는 NK.EXE 와 윈도우 임베디드 CE 6의 커널을 DLL 형태로 분리하며 KITL 또한 분리하여 개발자가 쉽게 커널 모드에서 디버깅을 할 수 있도록 제공하게 되었다.
그리고 윈도우 임베디드 CE6부터는 커널 소스를 100%로 공유 소스 라이선스 방식으로 공개되어 CE 6 플랫폼 빌더만 있으면 그 소스를 쉽게 접근하게 되었다.
인터넷에 연결된 장치를 양산함으로써 여러분의 코드에 대해 한 가지 더 주의를 기울여야 하는 점이 생기게 되었다. 그것은 말하지 않아도 잘 알겠지만 이제부터 보안을 강화해야 한다.
다시 말해 특정 장치 드라이버에 알 수 없는 메모리 블록 복사로 인하여 버퍼가 오버런이 나거나 특정 포트를 공격하는 것과 같은 인터넷 상에서 발생하는 웜 바이러스 또는 DOS 공격 등을 여러분의 장치에서도 할 수 있다는 이야기이다.
이를 방지하기 위해 CE 6부터는 커널 모드에 곧바로 접근할 수 없고 보안을 강화는 API만 사용해야만 접근할 수 있도록 변경되었다.
윈도우 임베디드 운영체제의 시즌2
시즌2라는 말은 로스트나 프리즌 브레이크와 같은 미국 드라마나 연속극들이 시리즈 물을 편성하기 위해 사용된 말인데 마이크로소프트는 올 하반기에 ‘R2(Release2)’ 라는 이름으로 작년에 발표되었던 윈도우 임베디드 운영체제의 특징을 좀더 보강할 계획이 있다.
특히 윈도우 임베디드 CE6 R2에서는 개발 및 디버깅할 수 있는 플랫폼 빌더나 운영체제 시스템 및 커널, BSP 등은 변경되지 않는다.
그러나 CEPC에서 하드 디스크를 사용할 수 있도록 시리얼 ATA(Sa-ta) 드라이버 지원을 확장했고 부트로더에서는 FAT32 와 ExFAT 파티션을 지원하여 플래시 메모리에서 새로운 멀티 레이어 셀을 지원하여 스트리밍 드라이버 방식인 MDD/PDD 표준 방식으로 변경될 예정이다.
한편 R2의 BSP에서는 연결형 기업 장치를 위하여 씬 클라이언트에서 많이 사용될 X86 프로세서를 지원하는 HP/Compaq t5530 보드를 새롭게 지원하며 ST마이크로 사의 STI7109 보드를 지원하여 비디오 스트리밍을 강화시키며, 마벨 사의 PXA270을 통한 VoIP 솔루션을 참조할 수 있도록 추가될 예정이다.
끝으로 R2 에서는 인터넷 익스플로러와 윈도우 미디어 플레이어가 업데이트 될 예정이다. 아직까지는 데스크톱 PC에서 사용하는 만큼 풀 브라우징을 지원하지 못하지만 보안 강화를 통해 연결형 장치의 보안에 대비를 한 것이 돋보인다. 또한 미디어 플레이어 컨트롤을 버전 7.0으로 데스크톱 PC에서 사용했던 것과 똑같이 API 인터페이스를 지원하기 시작한다.
그리고 연결된 장치를 위해 Windows XP 와 Windows 서버2003 과 같은 원격 서버를 웹 패드와 같은 씬 클라이언트로 접속 및 제어하기 위해 RDP 프로토콜 6.0으로 업그레이드되었다.
통합 커뮤니케이션을 위한 VoIP 솔루션을 더욱 더 쉽고 빠르게 개발할 수 있도록 홈 스크린 사용자 인터페이스 및 폰 응용 프로그램를 개선했으며 멀티 레벨과 멀티 파티에서 비디오 컨퍼런싱을 할 수 있도록 서버 솔루션들과 함께 컴포넌트를 제공한다. 한편 CE6 R2 발표는 11월 OEM테크니컬 세미나에서 발표될 예정이다.
결론: 우리의 내일
이와 같이 임베디드 장치 시장에서는 하드웨어나 소프트웨어 모두 급변하게 변해가고 있다. 그것도 그럴 것이 요즘 택시를 타 보면 자동차 내비게이션 시스템의 맵이 2D에서 3D로 바뀌고 있으며 어디에서 고객이 요청해 오는지 호출 번호가 화면에 떠오른다. 그리고 그 호출 번호에 연결되어 통화할 수 있도록 지원해주는 연결형 장치가 우리 눈앞에 벌써 다가왔다.
그리고 올 여름 서울에서 개최된 전세계 대학생들의 소프트웨어 경연대회인 이매진 컵(Imagine Cup)에서 국내 세종대학교 EN#605팀이 준우승한 소식을 이미 들었을 것이다.
이렇게 준우승을 할 수 있는 이유는 시각장애자에게 학습과 커뮤니케이션을 위해 임베디드 칩을 이용한 장갑을 개발하여 점자 언어를 이용할 수 있도록 창의적 아이디어의 혁신성 때문이었다.
향후 미래의 임베디드 개발에서는 현업에서 나오는 창의적 아이디어로 개발된 솔루션이 매우 중요하며 이것은 플랫폼을 지원하는 회사와, 이를 임베디드 하드웨어와 연결하여 솔루션을 개발하는 국내 파트너와 나아가서는 실용적인 학문을 익혀 학생들이 사회진출을 돕는 대학교 및 연구소의 역할이 상생을 이루어야 한다.
참고 레퍼런스 사이트
남자분들이라면 만추의 그윽한 향기를 느낄 수 있는 몰트 위스키 한 잔을 떠올릴 것이고 여자분들이라면 부드럽고 감미로운 붉은 포도주 한 잔을 떠오를 것이다. 최근 미국 로스앤젤레스에서 개최된 와이어드 넥스트 페스트2007에서 이 와인에 RFID를 달아서 판매된 수량 및 재고 파악 외에 이 와인을 사 가지고 간 고객 정보를 입력 받아 같은 와인 종류를 좋아하는 사람들끼리 커뮤니티를 형성 해주는 일종의 소셜 네트워크(Social Networking) 마케팅을 한 사례가 소개되었다.
생각보다 우리가 알지 못하는 사이에 임베디드 장치는 우리의 생활 속에 사람들과 잘 융합해 가고 있다. 오늘은 이러한 임베디드 장치를 만드는 데 향후 차세대 먹거리가 어떠한 것이 될 것인가에 대해 함께 이야기를 나누어 보도록 하자.
연결형 장치 개발의 도래 배경
국내 유비쿼터스 전도사인 차원용 소장님은 향후 유비쿼터스 시대가 도래하게 되면 우리의 오감을 만족시키는 임베디드 장치와 소프트웨어 서비스가 융복합(NT+IT+BT융합)된다고 예측한 바 있다.
이러한 예측은 [그림1]에서 보듯이 IDC 기관의 2005년도 11월 리포트에서 잘 입증해 주고 있다. 따라서 향후 2010년에는 PC 시장이 점차 태블릿PC 또는 미니PC와 같은 인간 중심의 필기/음성 인식이 탑재된 사용자 인터페이스를 가진 PC로 서서히 진화되며, 지금의 강력한 PC 기능은 개인 사용자가 사용하고 있는 나만의 PC(PDA)로 변모하고 산업 속에서 점차 기계와 기계 간의 스스로 연결되고 동작하는 로봇과 같은 장치로 변모될 것이다.
그만큼 개인과 기업 시장에서의 임베디드 시장은 폭발적인 성장을 할 것이라는 예측을 하고 있다. 특히 연결된 장치라 부르는 인터넷이나 다른 네트워크(무선랜/블루투스)와 같은 연결형 장치의 출시가 주류를 이끌게 될 것이다.
[그림1] 임베디드 장치 성장 예측 |
한편, 이러한 연결된 장치는 독립형 장치와 달리 인터넷을 통한 웹 사이트 또는 기업의 기간계 백-엔드 시스템과 접속을 기본으로 한다.
예를 들어 앞에서 말했던 RFID를 이용한 와인 소셜 네트워킹 시스템에서 RFID가 담긴 와인 장치를 클라이언트라고 보면 고객의 동적인 정보를 기록하여 소셜 네트워킹으로 연결해 주는 백-엔드 고객 관리 시스템은 서버라고 볼 수 있다.
지금까지 이러한 클라이언트는 메인 프레임의 호스트부터 다운사이징이 된 후 PC, 그리고 웹을 이용한 클라이언트를 이용하는 것까지 발전해왔다. 그러나 향후 이러한 시스템과 병행하여 임베디드 장치를 클라이언트로 하는 하드웨어, 소프트웨어 및 웹 서비스가 융합하는 이른바 ‘서비스로서의 소프트웨어’ 시장이 도래하게 될 것이다.
결론적으로 말해서 서비스로서의 소프트웨어는 장치 중심에서 사람 중심으로 시나리오가 변경되므로 새로운 비즈니스 모델을 기반한 수익 창출의 증대에 있다. 특히 국내와 같은 하드웨어 기반의 IT 산업에서는 하드웨어와 소프트웨어 지식이 결합하여 다른 나라와의 경쟁에서 우위를 선점할 수 있는 기반이 중요하다.
[그림2] 임베디드 장치 마켓 분석 |
새로운 여정의 시작, 윈도우 임베디드 CE 6
그렇다면 임베디드 개발자 입장에서 보자면 이것을 어떻게 구현할 것인가에 대해 의문을 가지게 될 것이다. 만일 지금 당장 이를 시제품으로 구현해 보라고 명령이 떨어진다면 연결된 장치라고 해서니까 먼저 임베디드 보드에 통신을 할 수 있는 LAN 포트와 그 밖의 부가적으로 동작시키는 CPU와 메모리, 배터리 등 하드웨어 사양에 대한 조사를 할 것이다.
그런 후에 여러분들은 보드 기반의 소프트웨어 프레임워크인 BSP(Board Support Package)가 있는지 점검하게 될 것이다. 그 위의 여러분들이 동작시킬 장치 드라이버와 사용자 인터페이스에 필요한 쉘(Shell)이나 최종 사용자가 사용할 응용 프로그램을 탑재 시킬 것이다.
여기까지가 일반적으로 임베디드 개발자가 구현하는 범위일 것이다. 여기 범위에서 한 발짝 더 나아가 연결된 장치는 웹 서버를 통한 웹 사이트나 기간계 백-엔드 시스템을 연결하면 된다.
이때 SOAP이나 REST와 같은 표준 통신 프로토콜을 이용한 서비스-지향 아키텍처로 기존의 솔루션과 통합하는 작업이 필요하다. [그림3]은 연결된 장치 기반의 솔루션 아키텍처를 잘 보여주는 예이다.
[그림3] 연결형 장치 아키텍처 |
이러한 연결된 장치는 개인 부문 시장에서는 자동차 내비게이션 또는 IPTV와 같은 솔루션에서 이미 DMB나 안정된 케이블 또는 WiBro/HSDPA와 같은 유무선 네트워크와 연결되어 서비스되고 있다. 그러나 고객들은 좀 더 빠르고 편리하게 사용하며 저전력의 소프트웨어를 원하고 있다.
이것을 뒷받침하기 위해서는 하드웨어 업체도 CPU와 메모리의 용량도 증폭시키는 데 투자를 많이 하고 있지만 소프트웨어 플랫폼들도 이를 긴밀하게 지원하기 위한 프로세스 및 메모리 관리를 혁신시킬 필요가 있다.
윈도우 임베디드 CE 6부터는 10년 동안 사용하던 정적으로 프로세스를 관리하는 방법을 버리고 PC 운영체제와 비슷하게 동적으로 프로세스를 관리하는 방식으로 변경되었다.
윈도우 임베디드 CE 6에서는 3만2,000개의 프로세스와 하나의 프로세스당 4기가 가상 메모리 중 2기가 사용자 메모리를 쓸 수 있어서 기존 버전보다 가상 메모리를 더 사용할 수 있기 때문에 용량이 많은 HD급 화질의 멀티미디어 동영상이나 트래픽이 많은 스트리밍 서비스 등을 소프트웨어적으로 더 가속화시킬 수 있는 기반을 마련했다.
[그림4] 윈도우 임베디드CE 6 커널 아키텍처 |
[그림4]는 작년 11월에 발표된 윈도우 임베디드 CE 6 커널 아키텍처를 나타낸 그림이다. 여기에서 보듯이 윈도우 임베디드 CE6는 과거 버전과 달리 커널 모드와 사용자 모드라는 두 가지의 모드로 분리했다.
이것은 커널 장치 드라이버의 성능을 좀더 높이기 위해, 그리고 USB나 SDIO과 같은 입출력 많은 사용자 드라이버로 인하여 견고성을 갖추기 위해 분리시켰다.
또한 임베디드 보드나 칩을 만드는 회사가 포팅을 해주는 NK.EXE 와 윈도우 임베디드 CE 6의 커널을 DLL 형태로 분리하며 KITL 또한 분리하여 개발자가 쉽게 커널 모드에서 디버깅을 할 수 있도록 제공하게 되었다.
그리고 윈도우 임베디드 CE6부터는 커널 소스를 100%로 공유 소스 라이선스 방식으로 공개되어 CE 6 플랫폼 빌더만 있으면 그 소스를 쉽게 접근하게 되었다.
인터넷에 연결된 장치를 양산함으로써 여러분의 코드에 대해 한 가지 더 주의를 기울여야 하는 점이 생기게 되었다. 그것은 말하지 않아도 잘 알겠지만 이제부터 보안을 강화해야 한다.
다시 말해 특정 장치 드라이버에 알 수 없는 메모리 블록 복사로 인하여 버퍼가 오버런이 나거나 특정 포트를 공격하는 것과 같은 인터넷 상에서 발생하는 웜 바이러스 또는 DOS 공격 등을 여러분의 장치에서도 할 수 있다는 이야기이다.
이를 방지하기 위해 CE 6부터는 커널 모드에 곧바로 접근할 수 없고 보안을 강화는 API만 사용해야만 접근할 수 있도록 변경되었다.
윈도우 임베디드 운영체제의 시즌2
시즌2라는 말은 로스트나 프리즌 브레이크와 같은 미국 드라마나 연속극들이 시리즈 물을 편성하기 위해 사용된 말인데 마이크로소프트는 올 하반기에 ‘R2(Release2)’ 라는 이름으로 작년에 발표되었던 윈도우 임베디드 운영체제의 특징을 좀더 보강할 계획이 있다.
특히 윈도우 임베디드 CE6 R2에서는 개발 및 디버깅할 수 있는 플랫폼 빌더나 운영체제 시스템 및 커널, BSP 등은 변경되지 않는다.
그러나 CEPC에서 하드 디스크를 사용할 수 있도록 시리얼 ATA(Sa-ta) 드라이버 지원을 확장했고 부트로더에서는 FAT32 와 ExFAT 파티션을 지원하여 플래시 메모리에서 새로운 멀티 레이어 셀을 지원하여 스트리밍 드라이버 방식인 MDD/PDD 표준 방식으로 변경될 예정이다.
한편 R2의 BSP에서는 연결형 기업 장치를 위하여 씬 클라이언트에서 많이 사용될 X86 프로세서를 지원하는 HP/Compaq t5530 보드를 새롭게 지원하며 ST마이크로 사의 STI7109 보드를 지원하여 비디오 스트리밍을 강화시키며, 마벨 사의 PXA270을 통한 VoIP 솔루션을 참조할 수 있도록 추가될 예정이다.
끝으로 R2 에서는 인터넷 익스플로러와 윈도우 미디어 플레이어가 업데이트 될 예정이다. 아직까지는 데스크톱 PC에서 사용하는 만큼 풀 브라우징을 지원하지 못하지만 보안 강화를 통해 연결형 장치의 보안에 대비를 한 것이 돋보인다. 또한 미디어 플레이어 컨트롤을 버전 7.0으로 데스크톱 PC에서 사용했던 것과 똑같이 API 인터페이스를 지원하기 시작한다.
그리고 연결된 장치를 위해 Windows XP 와 Windows 서버2003 과 같은 원격 서버를 웹 패드와 같은 씬 클라이언트로 접속 및 제어하기 위해 RDP 프로토콜 6.0으로 업그레이드되었다.
통합 커뮤니케이션을 위한 VoIP 솔루션을 더욱 더 쉽고 빠르게 개발할 수 있도록 홈 스크린 사용자 인터페이스 및 폰 응용 프로그램를 개선했으며 멀티 레벨과 멀티 파티에서 비디오 컨퍼런싱을 할 수 있도록 서버 솔루션들과 함께 컴포넌트를 제공한다. 한편 CE6 R2 발표는 11월 OEM테크니컬 세미나에서 발표될 예정이다.
결론: 우리의 내일
이와 같이 임베디드 장치 시장에서는 하드웨어나 소프트웨어 모두 급변하게 변해가고 있다. 그것도 그럴 것이 요즘 택시를 타 보면 자동차 내비게이션 시스템의 맵이 2D에서 3D로 바뀌고 있으며 어디에서 고객이 요청해 오는지 호출 번호가 화면에 떠오른다. 그리고 그 호출 번호에 연결되어 통화할 수 있도록 지원해주는 연결형 장치가 우리 눈앞에 벌써 다가왔다.
그리고 올 여름 서울에서 개최된 전세계 대학생들의 소프트웨어 경연대회인 이매진 컵(Imagine Cup)에서 국내 세종대학교 EN#605팀이 준우승한 소식을 이미 들었을 것이다.
이렇게 준우승을 할 수 있는 이유는 시각장애자에게 학습과 커뮤니케이션을 위해 임베디드 칩을 이용한 장갑을 개발하여 점자 언어를 이용할 수 있도록 창의적 아이디어의 혁신성 때문이었다.
향후 미래의 임베디드 개발에서는 현업에서 나오는 창의적 아이디어로 개발된 솔루션이 매우 중요하며 이것은 플랫폼을 지원하는 회사와, 이를 임베디드 하드웨어와 연결하여 솔루션을 개발하는 국내 파트너와 나아가서는 실용적인 학문을 익혀 학생들이 사회진출을 돕는 대학교 및 연구소의 역할이 상생을 이루어야 한다.
참고 레퍼런스 사이트
와이어드 넥스트 페스트2007
스터디 비즈니스 닷컴, 차원용 소장
OEM 테크니컬 세미나
이매진 컵 국내 첫 우승
'Windows Embedded > Windows Embedded CE 6.0' 카테고리의 다른 글
[WindowsCE 6.0 특집 ③] 윈도우 임베디드 CE 애플리케이션 디버깅 (0) | 2007.10.18 |
---|---|
[WindowsCE 6.0 특집 ②] 윈도우 임베디드 CE 6.0의 Cellcore 및 RIL 기능 (0) | 2007.10.18 |
Windows CE 개발자를 위한 커뮤니티들.. (0) | 2007.10.17 |
Windows Embedded CE 6.0 platform builder 설치 순서. (0) | 2007.10.17 |
Windows Embedded CE 6.0 관련 웹 캐스트 (0) | 2007.10.17 |
2007. 10. 17. 16:49
Windos CE 5.0 vs. Windows Embedded CE 6.0 ch.1
2007. 10. 17. 16:49 in Windows Embedded/Windows CE 5.0
Windows Embedded CE 6.0을 회사에서 구매하는 바람에.. 기존의 Windows CE 5.0을 6.0으로
mirgration해야한다. 덕분에 공부할 게 생겨버렸고..
먼저 Windows CE 5.0에서 windows Embedded CE 6.0으로 넘어오면서 바뀐점은 무엇인가? 를 알아보자
가장 눈에띄는 점은 명칭이다. ^^;
Windows와 CE 사이에 Embedded라는 것을 넣어서 Embedded라는 것을 강조한 듯 하다.
가상 메모리구조와 프로세스등 많이 바뀌었다.
Windows CE 5.0의 경우..
2G의 커널, 2G의 프로세서를 위한 가상메모리를 지원하고, 최대 32개의 프로세스(슬롯이라 부르는 구조)를 생성할 수 있었다.
메모리는 유저 공간의 상위 반을 공유메모리로 사용하고, 모든 프로세서들에 의해 읽거나 쓰는 공간으로 사용되었다.
Windows Embedded CE 6.0의 경우..
프로세서당 2G의 가상 메모리를 지원하고, 최대 32,000 프로세스를 지원한다고 한다. 말이 32,000이지.. 이론상이다.
통합커널로 핵심적인 OS요소들을 커널공간으로 이동시켜 시스템 성능을 향상시켰다고 한다.
이로써 시스템 오버헤드가 감소하고, 유저 스페이스와 커널 스페이스간의 잦은 이동으로 인한 오버헤드등이 감소하는 등의 장점이 있다.
먼저 Windows CE 5.0에서 windows Embedded CE 6.0으로 넘어오면서 바뀐점은 무엇인가? 를 알아보자
가장 눈에띄는 점은 명칭이다. ^^;
Windows와 CE 사이에 Embedded라는 것을 넣어서 Embedded라는 것을 강조한 듯 하다.
가상 메모리구조와 프로세스등 많이 바뀌었다.
Windows CE 5.0의 경우..
2G의 커널, 2G의 프로세서를 위한 가상메모리를 지원하고, 최대 32개의 프로세스(슬롯이라 부르는 구조)를 생성할 수 있었다.
메모리는 유저 공간의 상위 반을 공유메모리로 사용하고, 모든 프로세서들에 의해 읽거나 쓰는 공간으로 사용되었다.
Windows Embedded CE 6.0의 경우..
프로세서당 2G의 가상 메모리를 지원하고, 최대 32,000 프로세스를 지원한다고 한다. 말이 32,000이지.. 이론상이다.
통합커널로 핵심적인 OS요소들을 커널공간으로 이동시켜 시스템 성능을 향상시켰다고 한다.
Windows CE 5.0과
Windows Embedded CE 6.0의 메모리 구조 차이
커널 메모리
공간
사용자 메모리
공간
이밖에도 중요 드라이버라든지, 파일시스템, graphical window manager등이 커널로 이동되었다.
새로 바뀐
OS구조이로써 시스템 오버헤드가 감소하고, 유저 스페이스와 커널 스페이스간의 잦은 이동으로 인한 오버헤드등이 감소하는 등의 장점이 있다.
Windows CE 5.0과
Windows Embedded CE 6.0과의 시스템 호출 구조
Windows CE 5.0의 시스템
호출 구조
Windows Embedded CE
6.0의 시스템 호출 구조
참고 : MS웹캐스트 및 웹 자료..
'Windows Embedded > Windows CE 5.0' 카테고리의 다른 글
Platform Builder 5.0 Emulator:x86 에러.. (0) | 2008.06.04 |
---|---|
Windows CE 이미지 생성 절차 (2) | 2007.11.08 |
BSP와 Common (0) | 2007.11.07 |
이솝 LX800보드 WinCE 5.0 포팅 완료!! (0) | 2007.10.17 |
Windos CE 5.0 vs. Windows Embedded CE 6.0 ch.2 (0) | 2007.10.17 |
2007. 10. 17. 13:40
Platform Builder 6.0의 Catalog Items View...
2007. 10. 17. 13:40 in Windows Embedded/Windows Embedded CE 6.0
Platform Builder 6.0에서 Workspace Window의 "Catalog Items View"를 보게 되면.. Platform Builder 5.0과는 약간 다름을 알 수 있다.
더 편해졌다고 해야하나? 한 윈도우에서 추가되는 것과 그렇지 않은 것을 알 수 있으니.. ㅋㅋ
특이한 점은 포함될 Component들이 ""■" 또는 "∨" 로 표시된다.
"■"는 OS Design 시 Dependency에 위해서 포함된 Component들이고, "∨"는 개발자가 선택하여 추가한 Component들 의미한다.
추가된 Component들임은 분명한데 왜 표시되는게 다를까 하고 검색하던 도중 좋은 정보 발견!! ㅋ
참고 사이트 : I Am Sam의 티스토리
더 편해졌다고 해야하나? 한 윈도우에서 추가되는 것과 그렇지 않은 것을 알 수 있으니.. ㅋㅋ
특이한 점은 포함될 Component들이 ""■" 또는 "∨" 로 표시된다.
"■"는 OS Design 시 Dependency에 위해서 포함된 Component들이고, "∨"는 개발자가 선택하여 추가한 Component들 의미한다.
추가된 Component들임은 분명한데 왜 표시되는게 다를까 하고 검색하던 도중 좋은 정보 발견!! ㅋ
참고 사이트 : I Am Sam의 티스토리
'Windows Embedded > Windows Embedded CE 6.0' 카테고리의 다른 글
[WindowsCE 6.0 특집 ②] 윈도우 임베디드 CE 6.0의 Cellcore 및 RIL 기능 (0) | 2007.10.18 |
---|---|
[WindowsCE 6.0 특집 ①] 연결된 장치 개발을 위한 윈도우 임베디드 CE 6 플랫폼 (0) | 2007.10.18 |
Windows CE 개발자를 위한 커뮤니티들.. (0) | 2007.10.17 |
Windows Embedded CE 6.0 platform builder 설치 순서. (0) | 2007.10.17 |
Windows Embedded CE 6.0 관련 웹 캐스트 (0) | 2007.10.17 |