1.25k likes | 1.54k Views
Windows CE .NET Device Driver. 경희대학교 컴퓨터 공학과 조 진 성. 목차. Overview of device driver GPIO_LED device driver 제작 KEYPAD device driver 제작 KEYPAD, GPIO_LED 를 이용한 application 제작. Overview of Device Driver. Device driver. OS 와 application 에게 적절한 인터페이스를 제공한다 .
E N D
Windows CE .NETDevice Driver 경희대학교 컴퓨터 공학과 조 진 성
목차 • Overview of device driver • GPIO_LED device driver 제작 • KEYPAD device driver 제작 • KEYPAD, GPIO_LED를 이용한 application제작
Device driver • OS와 application에게 적절한 인터페이스를 제공한다. • Application programmer는 device driver를 사용하여 하드웨어에 관한 지식 없이 하드웨어를 사용할 수 있다.
WINCE device driver • Application에서 직접 H/W 제어 불가 • 제어를 하기 위해서는 device driver나 커널을 통해서 제어 • Device driver 개발 • MS “Platform Builder” • 네 가지 프로세서를 지원하는 컴파일러 • 각종 라이브러리, 소스코드 등을 포함 • 커널 포팅 및 device driver, Application 같은 모듈 개발 • MS “eMbedded Visual C++” : WinCE용 Native Application 개발 • Visual Studio.net 2003 : Managed Application 개발 • 다른 OS device driver와 달리 User Mode에서 동작한다. • dynamic 또는 static하게 OS에 링크된다. • 인터럽트를 받는 부분은 커널 소스를 수정하여야 한다. • 커널은 device driver에게 인터럽트 발생 메시지를 전송한다.
WINCE device driver • 일반적인 디바이스 드라이버는 디바이스 매니저가 로드/관리의 작업수행 • 용도에 따라 FileSys, GWES에서 관리 • 디바이스 매니저가 관리 • HKEY_LOCAL_MACHINE\Drivers 레지스트리에 저장 • GWES가 관리 • HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP 위치
WINCE device driver의 종류 • Built-in driver • Native device driver • 전용 디바이스 드라이버 • 다른 드라이버의 구조에 맞춰서 구현하기가 힘들고, 정해진 방식대로, 정해진 함수들을 구현해야 함 • 파이프 라인 (Pipeline) • Application이 WINCE에서 지원하는 API를 통해서 device driver에 접근 • 정적으로 GWES에 링크되거나 DLL로 동작한다. • 이 드라이버는 하드웨어에 완전히 종속적이어서 정해진 인터페이스를 제공하지 않는 경우가 많다.
WINCE device driver의 종류 • Installable driver • Stream device driver • Application과 device driver가 데이터를 주고 받는 경우 • H/W를 제어하는 방식이 특정 API를 통하는 방식 • Stream 관련 API : CreateFile, ReadFile, WriteFile등 • User Mode DLL파일. • 디바이스 매니저(device.exe)에 의해 로딩되어 동작한다. • 기본적으로 일관된 인터페이스를 가진다.
WINCE device driver의 종류 • Layered Driver • 일반적인 윈도우 CE 디바이스 드라이버 • 상위 계층 (upper Layer : MDD) • Module Dependent Driver • 각 드라이버들의 공통된 부분의 라이브러리나 소스 • 공통 모듈 • 하위 계층 (Lower Layer : PDD) • 특정 하드웨어에 맞춰진 코드 • Monolithic driver • MDD 모듈이 제공되지 않거나 비교적 간단한 드라이버에 적용
Stream device driver • Device에 상관없이 일관된 인터페이스를 제공한다. • 논리적으로 데이터를 주고받는 device에 적합하다. • File system API와 매치되어 진다. • CreateFile, ReadFile, WriteFile … • 디바이스 드라이버 이름은 ‘COM1’같은 형태로 만들어진다. • COM : prefix. 영어 3문자. device종류 구분 • 1 : index. 한자리 숫자. device의 index • 레지스트리에 저장되어 있는 값이어야 한다. • 사용시, ‘COM1:’형태로 사용한다. ‘:’를 항상 붙여야 한다.
드라이버 로드 순서 • Device manager(device.exe)가 시스템에 로드 된다. • 장치열거자(regenum.dll)을 이용하여 레지스트리 내 드라이버들을 조사한다. • [HKEY_LOCAL_MACHINE\Drivers\Builtin]을 검사한다. • 드라이버들의 목록과 초기화할 순서를 만든다. • 레지스트리를 읽어 각각의 드라이버(DLL파일)을 로드한다. • 각 드라이버의 Active키를 생성하고 레지스트리에 저장한다. • [HKEY_LOCAL_MACHINE\Drivers\Active]에 저장한다. • xxx_Init을 통해 드라이버를 초기화 시킨다. • 이후 CreateFile을 통해 드라이버를 사용한다.
Device driver 제작 • 기본적으로 필요한 파일 • *.c – source file • *.def – definition file • makefile • sources – target name, source files등을 설정한다.
작업개요 • GPIO를 이용한 LED device driver의 제작 • PXA255PRO3 board에 2개의 led가 있다. • 2개의 led는 GPIO82와 83에 연결되어 있다. • LED가 10회 깜박거리는 application을 만들어 2개의 led를 test한다.
[\wince40\platform\PXA255PRO3\drivers\gpio_led] • 필요한 모든 파일은 위 디렉토리에 저장한다.
Compile device driver • Platform builder에서 • [Build]->[Open build release directory]를 선택한다.
현재 device driver를 구현한 directory로 이동한다. • [SET WINCEREL=1]을 입력한다. • 위 환경변수를 설정하면, 자동으로 release directory에 복사된다. • [build –cfs]를 입력한다.
gpio_led test application • Platform builder에서 • [File]->[New Project or File…]을 선택한다.
[WCE Application]을 선택한다. • Project Name에는 적절한 이름을 적은 후, [OK]를 선택한다.
[A simple Windows CE application]을 선택한다. • [Finish]를 선택한다.
위와 같이 새로운 project가 생성된 것을 볼 수 있다. • [Source Files]->[gpio_led_test.cpp]의 내용을 수정해야 한다.
Build gpio_led_test app • Platform builder에서 • [Build]->[Build gpio_led_test.exe]를 선택한다.