노무현 전 대통령 서거 추모글 남기기


WinCE : Windows Consumer Electronics
PB: Platform Builder
WM: Windows Mobile
PPC: Pocket PC
HPC: Hand Held PC
BSP: Board Support Package
SDB: Standard Development Board
SSPI: Security Support Provider Interface
OAL : OEM adaptation Layer
QFE : Quick Fix Engineering
eVC++ : eMbedded Visual C++
SDK : Software Development Kit
CLR : Common Language Runtime
MDD : Model Device Driver
PDD : Platform Dependent Driver
DDI : Device Driver Interface
DDSI: Device Driver Service Provider Interface
PDA : Personal Digital Assistants
EBOOT : Ethernet Bootloader
KITL : Kernel Independent Transport Layer
XIP : eXecute In Place
WCE : Windows CE
GWES : Graphic Windowing Event Subsystem
JIT : Just In Time
MMU : Memory Management Unit
GPIO : General Purpose Input Output
CSP : Chip Support Package
DNW : Download for Windows
CPI : Clock Cycle Per Instruction
HAL : Hardware Abstraction Layer
IRQ : Interrupt Request
JTAG : Joint Test Action Group
CNS : Car Navigation System
ICE : In Circuit Emulator
IST : Interrupt Service Thread
WZC : Wireless Zero Configuration
PCM : Pulsed Code Modulation
SMDK : SAMSUNG Mobile Development Kit
VS : Visual Stdio
VC++ : Viual C++
XML : Extensible Markup Language
POOM : Pocket Outlook Object Model
NDIS : Network Driver Interface Specification
DDK : Device Driver Kit
CEPC : CEPC는 x86용 BSP입니다
SDHC : SD HOST Controller, Secure Digital High Capacity card
UART : Universal Asynchronous Receiver Transmitter

SSC : SQL Server Compact
SSCE : SQL Server 2005 Compact Edition
SQL Mobile : SQL Server 2005 Mobile Edition
SQL CE : SQL Server 2000 Windows CE Edition
EDB : Embedded Database
CEDB : Windows Embedded CE 데이터베이스
ADOCE : ActiveX Data Objects for Windows CE

NDA : Non Disclosure Agreement

PQ OAL : Production Quality OAL

GPS : Global Positioning System

MLC : Multi Level Cell

SLC : Single Level Cell

PDA : Personal Digital  Assistants


WINCE 관련 기술용어 정리

[출처] WINCE 관련 기술용어 정리|작성자 우하하

Windows CE 관련 기술용어 

<Module 1>
1. Landscape : 스크린에서 가로가 세로보다 긴 방향으로 정보를 출력하는 방법(ex:320x240). 이와 반대되는 용어로 Portrait가 있습니다.(ex:240x320)
2. DUA (Device Update Agent) : 배포 서버에 접속하여 정해진 규칙에 의한 업데이트가 있는지 확인하고, 있으면 업데이트를 받아서 수행 하는 것을 말합니다.
3. SMS (System Management Service) : MS의 Windows Update사이트가 아닌 직접 구성한 System Update Server로 부터 업데이트를 수행하는 것을 말합니다. (System Update Server는 MS에서 무료로 배포함. MS에서 제공하는 업데이트만 가능하고, 그 이외의 업데이트는 불가능합니다.)
4. API (Application Program Interface) : 운영체제나 다른 응용프로그램에게 처리요구를 할 수 있도록 운영체제나 다른 응용 프로그램에 의해 미리 정해진 형식을 말합니다.
5. Footprint : Kernel의 크기를 말합니다.
6. RISC (Reduced Instruction Set Computer): RISC[리스크]는 적은 수의 컴퓨터 명령어를 수행하도록 설계된 마이크로프로세서를 말합니다.
* RISC의 장점
-새로운 마이크로프로세서가 보다 빨리 개발되고 테스트될 수 있습니다.
-마이크로프로세서의 명령어를 사용하는 운영체계 및 응용프로그램 작성자들이
적은 수의 명령어 셋을 이용하므로 보다 쉽게 프로그램을 개발할 수 있습니다 .
-고급언어 컴파일러들이 RISC 컴퓨터 내에 있는 소수의 명령어만을
사용하게되므로 이전에 비해, 보다 효율적인 코드를 생산할 수 있습니다.
7. Flash Memory : 전원이 끊겨도 저장된 정보가 지워지지 않는 기억장치를 말하며 NAND형과 NOR형으로 분류됩니다.
8. NK.bin : NK는 ‘New Kernel’의 약자임. ‘NK.bin’ 은 OS 이미지의 여러 정보를 포함하고, OS를 구성하는 component 들을 record 별로 나누어 구성된 바이너리 이미지입니다.
9. x86 : 80286부터 시작된 인텔 마이크로프로세서 시리즈의 총칭입니다.
10. DOM (Disk On Module) : HDD I/F(IDE I/F:40pin , 44pin)를 사용하는 NAND type의 Flash Memory를 말합니다.
11. OEM (Original Equipment Manufacturer : 주문자 상표 부착방식) : 제품을 만들기 위해 하나 이상의 회사로부터 부품을 구입하여 사용하는 회사로써 그들은 그 상품들을 자신의 회사 이름과 브랜드를 붙여서 판매합니다.
12. ISV (Independent Software Vendor) : 하나 이상의 컴퓨터 H/W나 OS에서 실행되는 S/W 제품을 만들고 판매하는 회사를 말합니다.
13. OAL (OEM Abstraction Layer) : 다양한 H/W에 Windows CE Kernel이 운영될 수 있도록 H/W와 Kernel의 중간에 위치한 Layer를 말합니다.
14. GWES (Graphic Windowing Event Subsystem) : 사용자와 Application, 운영체제 간의 인터페이스를 말하며, GDI(Graphic Display Interface), 윈도우 관리자, 이벤트 관리자를 통합한 것을 말합니다.
15. RTOS (Real Time Operating System) : 지정된 시간 제한 내에 주어진 task를 확실히 처리하는 것을 보장하는 것을 말합니다.
16. Thread : 프로세스(process) 또는 태스크(task)보다 더 작은 하나의 작업 단위.
17. OAL ( OEM Abstraction Layer) : 다양한 H/W에 Windows CE Kernel이 운영될 수 있도록 H/W와 kernel의 중간에 위치한 Layer를 말합니다.
18. Heap : 프로그램의 프로세스가 사용할 수 있도록 미리 예약되어 있는 메모리의 영역을 말합니다.
19. Watchdog Timer (WDT) : OS에 타이머를 설정하여, 어플리케이션이 곤란한 상태에 빠졌을 때 설정한 시간이 지난 후 특정 연산을 수행하여 해당 어플리케이션을 회복하도록 하는 기능입니다.
20. Interrupt : 장치나 프로그램으로 오는 신호로써, OS가 하던 일을 멈추고 다음에 무엇을 할 것인지를 결정하게 됩니다.
21. HID (Human Interface Device Driver) : Keyboard, Mouse, Joystick등을 말합니다.
22. SDIO Now! : SDIO Now! 멤버십은 Device Semiconductor 및 주변기기 생산업체들에게 Windows Device가 SD 주변기기와 연동할 수 있도록 하는 툴과 기술을 제공하는 멤버십 프로그램입니다.
23. PC card : 신용카드 크기로 만들어진 메모리 또는 입출력 장치를 말합니다.(PC card의 종류로 16 bit용과 32 bit용이 있습니다.)
24. HID (Human Interface Device Driver) : Keyboard, Mouse, Joystick등을 말합니다.
25. RPC (Remote Procedure Call) : 한 프로그램이 네트워크상의 다른 컴퓨터에 위치하고 있는 프로그램에 서비스를 요청하는 프로토콜을 말합니다.
26. MUI (Multilingual User Interface ) : User Interface의 언어를 바꾸는 기능을 말합니다.(영어/한국어, 일본어/한국어 등으로 변경)
27. HPC (Hand-Held PC) : 일반적인 PDA(PPC)는 입력장치로 스타일러스펜을 사용합니다만, HPC는 작은 크기에 키보드까지 달려있는 형태의 단말기를 말합니다..
(PDA와 노트북의 중간단계)
28. 802.11 : 무선랜을 위한 규격 모음입니다.
29. Bluetooth : 근거리에 놓여 있는 컴퓨터와 이동단말기·가전제품 등을 무선으로 연결하여 쌍방향으로 실시간 통신을 가능하게 해주는 규격을 말하거나 그 규격에 맞는 제품들을 말합니다.
30. IPv6(Internet Protocol Version 6) : IP 주소의 길이가 기존의 32 bit에서 128 bit로 늘어남으로써 보다 많은 네트워크 주소를 제공하게 됩니다.
31. RDP (Remote Desktop Protocol) : 윈도우 NT 운영체제가 실행되고 있는 시스템이 마이크로소프트사의 윈도우 CE 운영체제 시스템과 통신하기 위한 프로토콜을 말합니다. (RDP5.5 지원)
32. BSP (Board Support Package) : H/W 플랫폼을 위한 각종 디바이스 드라이버와 OAL, Boot Loader, 관련 설정 파일들을 담고 있는 S/W Package를 말합니다.
33. ROM (Read Only Memory) : 읽기만 가능하고 그 값을 변경할 수 없으며, RAM과는 달리 전원이 꺼지더라도 데이터가 지워지지 않습니다.
34. XML (Extensible Markup Language) : 웹 상에서 구조화된 문서를 전송 가능하도록 설계된 표준화된 텍스트 형식을 말합니다.
35. IDE (Integrated Development Environment) : 통합 환경이라 함은 에디터, 컴파일러, 링커 등을 하나의 툴에서 다 지원하는 것을 말합니다.
36. GUI (Graphical User Interface) : 텍스트보다는 그래픽을 통해 사용자와 컴퓨터간의 인터페이스를 구현하는 것을 말합니다.
37. SDK (Software Development Kit) : S/W를 개발하는 도구로써, 윈도우 프로그래밍을 하기 위한 라이브러리라고 할 수 있습니다.


<Module 2>
38. Compilers : 컴퓨터가 알아볼 수 있는 기계어로 변환되어 *.obj로 만들어지는 것을 말합니다.
39. Linkers : *.obj 파일과 라이브러리 파일의 내용이 합쳐지는 것을 말합니다.
40. Platform Manager : Platform Manager는 WinCE 장치와 개발 PC사이에 통신을 관리해 주는 기술 입니다.
41. Emulation : 컴퓨터의 기능을 다른 기종의 컴퓨터에서 구현하는 것을 말합니다.


<Module 3>
42. common : 플랫폼 독립적인 라이브러리들과 모든 Win CE OS design에 공통적으로 사용되는 컴포넌트가 담겨 있습니다. 이들은 MS에서 공급합니다.
43. Wceshellfe : WinCE의 쉘 모듈을 지원하는 컴포넌트가 담겨 있습니다.
- Handheld PC-style shell, Pocket Internet Explorer, Control Panel applications 등이 담겨 있습니다.
44. Wceappsfe : WinCE의 어플리케이션 모듈을 지원하는 컴포넌트가 담겨 있습니다.
(WordPad, Inbox 등..)
45. IE : WinCE의 Internet Explorer 모듈을 지원하는 컴포넌트가 담겨 있습니다.
46. DirectX : MS의 DirectX®, waveform audio, the DVD-Video API, or Windows Media에 대한 모듈을 지원하는 컴포넌트가 담겨 있습니다.
47. Kernel : 운영체제에서 가장 기초적이고 핵심적인 기능을 담당하는 부분으로 시스템을 구성하는 중요한 자원(메모리, 주변장치 등)뿐만 아니라 프로세서 관리, CPU 스케줄링, 입·출력 제어, 시스템 자원의 배분 등과 같이 컴퓨터 운영에 필요한 핵심 사항들을
처리합니다.
48. GWES ( Graphic Windowing Event Subsystem) : 사용자와 Application, 운영체제 간의 인터페이스를 말하며, GDI(Graphic Display Interface), 윈도우 관리자, 이벤트 관리자를 통 합한 것을 말합니다.
49. Filesys : Filesys 모듈은 파일 시스템, 레지스트리, 데이타베이스 저장소를 포함하는 object store를 관리 합니다.
50. BIB (Binary Image Builder Files) : OS image안에 포함되어지는 모듈들과 파일들을 정의하는 파일입니다.
51. REG (Registry Files) :Windows CE MODULES와 관련된 Registry가 정의되어 있으며, Device driver entries와 같은 Platform 의존적인 Registry가 정의되어 있습니다.
52. DAT (File system Files) : Windows CE MODULES와 관련된 Registry가 정의되어 있으며, Device driver entries와 같은 Platform 의존적인 Registry가 정의 되어 있습니다.
53. DB (DataBase Files) : Define default image databases


<Module 4>
54. SDE (Smart Device Extensions) : SDE는 Visual Studio .NET에 연결되는 VSIP(Visual Studio Integration Package)입니다. 또는 Compact Framework SDK라고 부르기도 합니다. SDE는 독립적으로 실행될 수 없으며 Visual Studio .NET이 설치되어 있어야 하며, Visual Studio.NET을 통해 VB, C# 으로 CE용 응용 프로그램을 개발할 수 있습니다.
55. .NET compact Framework : .NET Compact Framework는 Microsoft .NET용 스마트 장치 개발 플랫폼으로서 언제 어디서 어떤 장치에서나 고객에게 최상의 경험을 제공한다는 Microsoft의 목표를 실현시켜 주는 중요한 부분입니다. .NET Compact Framework는 관리되는 코드와 XML 웹 서비스의 세계를 스마트 장치로 옮겨주어 PDA, 휴대폰 및 셋톱 박스와 같은 장치에서 다운로드 가능한 안전한 응용 프로그램을 실행할 수 있도록 만들어 줍니다.
56. AYGSHELL : 원래 Pocket PC 2002용으로 작성된 응용 프로그램을 일반 Windows CE의 표준 Windows Shell에서도 사용가능 하게하는 API를 제공하는 기능 입니다. Windows CE 장치용으로 작성된 응용 프로그램은 Pocket PC 2000, 2002, 2003과 같이, 다른 Windows CE 기반 장치와의 뛰어난 응용 프로그램 호환성을 갖습니다.
(각 장치의 H/W 구성이 동일한 경우)
57. Compilers : 컴퓨터가 알아볼 수 있는 기계어로 변환되어 *.obj로 만들어지는 것을 말합니다.
58. Linkers : *.obj 파일과 라이브러리 파일의 내용이 합쳐지는 것을 말합니다.
59. Active Template Library : C++ 또는 비주얼 C++를 이용하여 ASP 코드나 다른 ActiveX 프로그램 컴포넌트를 만들 때 사용하는 MS 프로그램 라이브러리 입니다.
60. ActiveX control : COM상에서 배포되어 수행되는 객체를 말합니다.
61. COM (Component Object Model) : 프로그램의 컴포넌트 객체들을 개발하고 지원하기 위한
하부 기반 구조를 말합니다. (OLE 객체와 다른 OLE object나 ActiveX control과 통신할 ActiveX control에 대한 기반 지원 제공)
62. MFC : 응용 프로그램 개발에 사용될 수 있는 클래스들의 모음입니다.
63. OLE (Object Linking and Embedding) : 복합문서를 만들거나 전시할 API의 집합을 말합니다.
64. ActiveX : 객체 지향 프로그래밍 기술 및 도구 모음에 대해 붙인 이름입니다.(주요 기술은 COM 이며, 네트웍 내에서 사용되던 COM은 DCOM이 됩니다.)
65. Compile : 컴퓨터가 알아볼 수 있는 기계어로 변환하는 것을 말합니다.
66. ANSI (American National Standards Institute) : 미국표준협회
67. Unicode : 컴퓨터에서 세계 각국의 언어를 통일된 방법으로 표현할 수 있게 제안된 국제적인 문자 코드 규약입니다.
68. macro : 여러 개의 명령어를 하나로 묶어서 새로운 이름의 명령어들을 사용할 수 있도록 만드는 방법을 말합니다.
69. Just-In-Time compiler : 한번 기계어로 번역된 코드를 기억하고 있어서 다시 실행할 경우에는 번역과정을 거치지 않고 바로 기계어를 실행해 줍니다. 이 기능을 사용하면 다양한 플랫폼을 대상으로 하는 응용 프로그램을 만들 수 있으며 응용 프로그램이 실행되는 특정 플랫폼마다 실행 파일을 다시 컴파일 하거나 다시 생성할 필요가 없습니다.
70. GUI (Graphical User Interface) : 텍스트보다는 그래픽을 통해 사용자와 컴퓨터간의 인터페이스를 구현하는 것을 말합니다.
71. Subset : 부분집합
72. Resources : 시스템에서 작업을 수행하기 위하여 구성하는 모든 것을 말하며, 일반적으로 시스템에서 작업을 수행하는 프로세스의 관점에서는 CPU, 기억 장치, 프린터, 터미널, 디스크 등과 같이 컴퓨터 시스템을 구성하는 각각의 장치들을 가리킵니다.
73. Porting : 한 플랫폼에서 작동하도록 되어 있는 프로그램을 다른 플랫폼에서 작동하도록 수정하는 것을 말합니다.


<Module 5>
74. Scheduler : 각 프로세스들이 CPU, 프린터 등의 자원을 공유할 때 이의 순서나 일정을 조정해 주는 프로그램을 말합니다.
75. Micro-Kernel : OS의 핵심기능만을 kernel에 넣고 나머지를 다른 process의 형태로 user application 처럼 동작시키는 구조를 가지는 것을 말합니다.
76. PSL: System API set을 제공하는 system process 입니다.
77. Headless Devices : 일반적으로 입력과 출력을 디스플레이하는 부분이 빠져 있는 형태의 장치를 말합니다.
78. GWES ( Graphic Windowing Event Subsystem) : 사용자와 Application, 운영체제 간의 인터페이스를 말하며, GDI(Graphic Display Interface), 윈도우 관리자, 이벤트 관리자를 통 합한 것을 말합니다.
79. Interface : 컴퓨터와 이들 주변 장치가 대화를 하여야 하는데, 이러한 상호 간의 대화
방법을 인터페이스라고 한다.
80. link : 컴파일러에 의하여 독자적으로 번역된 여러 개의 목적 프로그램을 하나로 모아서 컴퓨터에서 실행될 수 있는 실행 프로그램을 생성하는 작업을 말합니다.
81. Monolithic Drivers: Monolithic 드라이버는 동작과 관련된 인터페이스를 직접 구현하는 드라이버를 말합니다.
82. Layered Drivers: Layered 드라이버는 두 개의 층으로 나뉘어 구현되어 있습니다.
위 층(MDD : Model Device Driver)은 native 또는 stream interface를 제공하는 층이고 아래층(PDD : Platform Dependent Driver)은 하드웨어와 연결되는 층입니다.
Windows CE Platform Builder에 포함된 많은 드라이버들은 Layered 드라이버 입이다.
83. Shell : 일반적으로 login 이후부터 사용자가 입력하는 명령어를 기계어로 번역하여 커널에 전달하는 역할을 하는 명령 해석기를 말합니다.
84. SMB (Server Message Block) : SMB는 OS/2, NT, WIN9x를 사용하는 컴퓨터끼리 파일 공유등의 서비스를 구현하는데 사용되는 프로토콜입니다.
85. CreateFile() : 파일의 생성, 읽기, 쓰기 관련 함수 입니다.


<Module 6>
86. Alerting : 일반적으로 컴퓨터에서 오류가 발생한 경우에 이러한 사실을 사용자에게 알려주기 위하여 사용되는 신호.
87. Registry : 시스템을 구성하는 기본 정보가 담겨 있는 일종의 저장소 입니다.
88. hierarchical : 하나의 항목에서 자신을 소유하는 부모가 존재하고, 자신은 또다시 여러 개의 자식을 소유하는 구조로 표현하는 방법입니다. 예를 들면, 대부분의 운영체제에서 사용되는 파일 시스템에서는 하나의 디렉터리 안에 여러 개의 서브 디렉터리가 존재하고 자신은 하나의 부모 디렉터리에 존재하는 나무 모습의 구조를 가지게 됩니다.
89. bottlenecks : 예를 들어 성능이 뛰어난 컴퓨터 시스템에서 어떤 하나의 부분에 대한 성능이 떨어진다고 하면, 컴퓨터 시스템의 전체 성능은 바로 이러한 부분에 의하여 전체적으로 떨어지게 됩니다. 즉, 어떤 부분이 아무리 크다 해도 한 부분이 작게 되면 전체적으로 작은 부분에 의하여 모든 행동이 결정되는 현상을 병목현상이라고 합니다.
90. Debug : 프로그램 또는 하드웨어 장치에 존재하는 잘못된 부분을 찾아내어 수정하는 작업을 말합니다.
91. Dump : 현재 프로그램에서 사용되고 있는 주 기억 장치의 내용을 화면 등과 같은 장치로 출력하는 작업을 말하며, 일반적으로 프로그램의 오류를 수정하는 과정에서 프로그램의 작업 상태를 확인할 목적으로 사용됩니다.
92. Halt : 현재 작업을 수행하고 있는 프로그램의 실행을 강제로 중단시키는 작업 혹은 시스템의 동작을 중지시키는 것을 말합니다. 혹은, 컴퓨터의 CPU에서 모든 작동을 중지하고 외부에서 신호가 전달될 때까지 무한히 기다리는 대기 상태로 들어가는 것을 말하기도 합니다.
93. DBGPARAM : dpCursettings(전역변수)에 설정된 정보를 Output으로 보내주는 역할을 하는 변수입니다.
94. DEBUGREGISTER : 디버그 구성안에 디버그 존을 등록하는 macro 입니다.

Posted by Kelly Cook
,

Visual 2005 클래스 위자드라고 하기는 뭐하고, 2005에서 메세지 처리 함수를 추가 할수 있는 방법..

1. 뷰 클래스를  마우스로 클릭
2. 클릭한 상태 에서 Alt + Enter 키를 누름
3. 오른쪽에 속성 창 생김
4. 번개 모양등 중에 Messages 라는 툴바를 선택
5. 해당 메세지 추가

더 편해 졌다고는 하지만 원래 사용하던게 아니라 더 불편하다..
뭐 뭐든지다 불편해.. ㅠ
Posted by Kelly Cook
,

활성 비활성 함수를 메인 다이얼로그에 작성을 하셨다면....
AfxGetMainWnd() 라는 함수를 사용하셔서
메인 다이얼로그의 포인터를 얻어올 수 있습니다.

이는 CWnd* 타입을 반환하기 때문에
메인 다이얼로그의 클래스명이 예를 들어 CTestDlg라면,
CTestDlg* 타입으로 형변환하여
활성화 비활성화 함수를 호출하시면 될 것입니다.^^
 

MSDN에서 AfxGetMainWnd( ) 함수를 검색해보세요^^


CTestDlg* m_pTestDlg= (CTestDlg*)AfxGetMainWnd();

Posted by Kelly Cook
,

http://www.zdnet.co.kr/ArticleView.asp?artice_id=00000039167141

임베디드 시스템의 핵심인 마이크로 프로세서는 소프트웨어에 의해 제어가 된다. 윈도우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를 시작하면서 가장 많이 사용하고 접하게 되는 툴이다.

PlatformBuilder


2. CETK(Windows CE Test Kit)
윈도우CE 운영체제를 테스트 하는 방법은 무엇인가 물어본다면 다음과 같이 대답하고 싶다. 첫 번째는 기기를 사용할 사용자 같이 테스트를 하는 것이고, 두 번째는 CETK를 통하여 호환성 및 안정성을 테스트 하는 것이다.

윈도우CE를 개발하면서 가장 어려웠던 점은 사용자가 사용하는 환경대로 테스트 해보는 것이었다. 물론 이를 대비하여 다양한 테스트를 한다. 별도 장치를 이용하여 버튼을 반복적으로 누른다든가, 시스템 전원을 On/Off를 반복하여 문제가 없는지 테스트를 한다. 이런 기본적인 반복 테스트를 통해 사용자가 동작 중 생길 문제를 미리 확인하게 된다.

CETK는 이러한 반복적인 테스트를 할 수 있도록 제공된 프로그램이다. 물론 On/Off 테스트와 같은 단순한 반복 테스트보다는 시스템 내에 구현된 디바이스 드라이버와 시스템 자체의 성능과 안정성을 테스트하는데 더 집중되어 있다. 플랫폼 빌더와 함께 제공되는 CETK는 다음 표와 같은 테스트를 할 수 있도록 만들어졌다.



CETK의 큰 장점은 위 테스트 이외에 사용자가 원하는 테스트 항목을 추가하는 기능이 있다는 것이다. 새로운 테스트 항목을 프로그램으로 만들어 추가 할 수 있다는 것이다.

CETK는 일반적인 테스트 관련 툴의 성격보다는 윈도우CE 운영체제 개발자를 위한 소프트웨어로 볼 수 있다. 시스템의 안정성을 확보하기 위한 도구로써 사용될 수 있기 때문이다. 필자의 경우 윈도우CE 운영체제 보다는 윈도우 모바일 장치를 개발했기 때문에 CETK과 비슷한 로고테스트(Microsoft Logo 테스트)를 진행했었다.

테스트의 이름이나 툴은 다르지만 매우 비슷한 테스트다. 실제로 테스트에 사용되는 프로그램 소스가 일부 동일하기 때문이다. 이 테스트를 하던 중 예상외의 결과가 나와서 당황한 적이 있었다. 많은 부분에서 테스트 항목을 패스 못하는 결과를 보여줬다.

BSP도 프로세서 업체에서 최신으로 제공 받았고 포팅 한 OS도 어느 정도 안정성이 있다고 판단된 시점이었다. 사실 의외의 결과였다. 문제의 원인은 포팅 방법과 BSP 문제였다. 포팅 방법 문제는 윈도우CE의 정책을 무시하고 개발한 디바이스 드라이버의 문제였고, BSP 문제는 일부 한정된 조건으로 BSP테스트를 하기 때문에 테스트 항목의 모든 조건을 만족시킬 수 없었으며, 일부항목에 대해서는 아예 고려가 되지 않았다는 것이다.

이제는 BSP에 대한 조건이 강화되어 이전과 같은 결과는 나오지 않지만 BSP 제공할 때 문서를 보면 어떤 테스트는 통과를 하고 어떠한 테스트는 문제가 되는지 설명해 주고 있다. 이런 것처럼 CETK는 혹 있을지도 모르는 문제를 검증하기 위한 마지막 단계이다.

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를 개발하는데 있어 중요한 역할을 하고 있다.

KernelTracker


4. Remote Performance Monitor
윈도우CE 운영체제의 성능은 어떻게 평가할까? 물론 상용으로 판매하는 벤치마크(Benchmark) 프로그램이 있다. PC 환경의 벤치마크 프로그램처럼 프로세서의 성능, 메모리의 성능, 저장 장치의 성능을 측정할 수 있다.

하지만 운영 다루는 입장에서는 어떠한 벤치마크 프로그램이 필요할까? 물론 좀더 세부적으로 측정할 수 있는 툴이 필요하다. 각 프로세스 별로 어느 정도 리소스를 차지하는지, 어떤 프로세스가 많은 스케줄링 시간을 이용하는지 이러한 정보를 알아야 한다. 그래야 프로세서나 쓰레드의 우선순위를 조절해 운영체제가 조화롭게 동작하게 조정할 수 있다. 리모트 퍼포먼스 모니터라는 툴을 이용해 이런 작업을 할 수 있다. 리모드 퍼포먼스 모니터의 역할을 정리하면 다음과 같다.

-쓰레드, 프로세스, 시스템의 성능 및 통계 측정
-시스템 메모리 사용에 대한 측정
-전원, TCP, IP, RAS, ICMP 등 성능 측정

perfmonitor


5. Remote Zoom-in
백문이 불여일견. 즉, 한번 보는 것이 말로 설명하는 것보다 낫다. 사실 이것이 윈도우CE를 개발하면서 비중이 높은 툴은 아니다. 단순히 동작하는 윈도우CE의 동작 화면을 캡쳐해서 저장하는 기능만 가지고 있는 툴이다.

하지만 어떻게 보면 플랫폼 빌더 다음으로 많이 사용한다. 문제점을 보고할 때, 매뉴얼 작업을 할 때 동작하는 장치에 대한 캡쳐 화면이 필요하다. 이때 사용하는 프로그램이 리모트 줌-인이다. 단순히 개발하고 있는 장치와 연결하여 원격으로 화면을 캡쳐하는 프로그램이지만 중요하고 많이 사용된다.

perfmonitor


6. Remote Registry Editor
PC의 레지스터리를 변경해 본적이 있는가? 사실 PC를 많이 사용한 사용자라고 해도 레지스터리 에디터를 이용하여 윈도우 시스템의 설정을 변경하여 사용하는 사용자는 많지 않을 것이다. 또한 있다 하더라도 직접 레지스터리를 수정하는 것이 아니라 PC 최적화 프로그램을 이용해 자동으로 PC를 최적화 해주면서 레지스터리를 변경한 경험은 있을 것이다.

레지스터리는 PC 뿐만 아니라 윈도우CE에서도 중요한 항목이다. PC와 비슷하게 윈도우CE의 설정과 디바이스 드라이버 등록이 레지스터리를 통해 이루어지기 때문이다. 윈도우CE를 개발할 때 제일 먼저 알아야 하는 것이 디바이스 드라이버를 레지스터리에 등록하는 방법이다. 이런 것처럼 레지스터리에 설정을 변경하고 새로운 드라이버를 등록하기 위해서 사용한다.

만약 이런 툴이 없다고 한다면 레지스터리를 변경하고 윈도우CE 운영체제를 새로 만들고 개발보드에 다시 올리는 작업을 반복해야 할 것이다. 그래서 리모트 레지스터리 에디터는 개발에 필요한 중요한 툴 중의 하나다.

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라는 프로그램의 임베디드 판이라고 보면 될 것이다.

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) 객체에 대한 누수를 탐지해 내는데 사용한다. 흔히들 응용프로그램에서 메모리를 할당하고 제때 해지하지 않는 문제로 생기는 문제를 미연에 찾아내주는 툴이다.

System Information



Call Profiler


이것들은 모두 윈도우CE 운영체제를 개발하기 위해 사용되는 중요한 툴들이다. 이 밖에도 소스를 관리하기 위한 소스세이프(SourceSafe) 프로그램, 소스를 편하게 보기 위한 프로그램 편집기 등 다양한 툴들이 사용된다.

이제까지 윈도우CE 운영체제를 개발하기 위해 사용되는 개발툴에 대해서 간단히 살펴봤다. 원도우CE를 탑재한 임베디드 시스템을 만든다는 것은 어려운 일이다. 언급한 툴들은 이러한 개발의 어려움을 도와주기 위해 제공된 툴이다.

윈도우CE 운영체제 개발은 참 막연할 일이다. 하드웨어도 새로 개발하는 작업이고 여기에 부트로더부터 시작해서 많은 디바이스 드라이버를 포팅해야 한다. 또한 운영체제가 잘 동작할 수 있도록 설정을 맞추고 테스트 해 봐야 한다. 여기에 다른 윈도우CE용 응용 프로그램이 정상적으로 동작하도록 호환성 보장도 해 주어야 한다.

이러한 모든 작업들은 지금까지 설명한 모든 툴을 이용해 검증하고 확인하면서 개발을 한다. 툴의 사용법을 잘 알고 이용하는 것이 모든 개발의 시작임을 강조하고 싶다.
Posted by Kelly Cook
,

http://tong.nate.com/jimmyp68/47227211

Posted by Kelly Cook
,