Windows CE.NET Device Driver

Slides:



Advertisements
Similar presentations
CHAP. 2 안드로이드 개발 도구 설치. © 2012 생능출판사 All rights reserved 개발 과정의 개요.
Advertisements

컴퓨터와 인터넷.
Windows CE Device Driver
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
1. 개발 시스템 개요.
미리보는 Windows CE 6.0 어드밴텍 테크놀로지스 기술지원팀 백승철 18년 9월 16일 17시 0분 15초
<<< 시스템등록정보 “하드웨어-장치관리자” 설정 >>>
Image & Video processing
Power Java 제3장 이클립스 사용하기.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
Windows CE 시스템 개발 환경 구축.
Windows CE 메모리 아키텍처 및 관리 서진호
Windows CE 5.0 Networking Internals
Cross Compiler를이용한 커널 컴파일 및 포팅
주제 실습 보드에 WinCE 이미지 포팅 실습 보드상에서 애플리케이션 제작
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
ANSYS17.2 Student 제품 무료 다운로드
Unix Project2 <test character device 생성>
UNIT 06 JTAG Debugger 로봇 SW 교육원 조용수.
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Root Filesystem Porting
Root Filesystem Porting
WinCE Device Driver 실습 #4
DK-128 ADC 실습 아이티즌 기술연구소
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
부트로더와 Self Programming
소프트웨어 분석과 설계 Struts2 & JBOSS 설치하기
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
ARM Development Suite v1.2
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
ATmega128 FND 실습 휴먼네트웍스 기술연구소
DK-128 개발환경 설정 아이티즌 기술연구소 김태성 연구원
Microprocessor I/O Port & CLCD Noh Jin-Seok.
Git 사용법 GitHub 가입 GitHub 새 저장소 만들기 Git 설치 로컬 저장소 만들기 로컬 저장소와 원격 저장소 연결
CHAP 12. 리소스와 보안.
Cross Compiler를이용한 커널 컴파일 및 포팅
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
리눅스 시스템 & 커널 기초 P.46 – P.53 이름: nsh009 학번: 112 1/20.
강의 개요. 2014년 가을학기 손시운 지도 교수: 문양세 교수님.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Device Driver 임베디드 시스템 I.
영상처리 실습 인공지능연구실.
기업고객사업본부 / 기술사업부 한국마이크로소프트
DK-128 FND 실습 아이티즌 기술연구소
임베디드 시스템 개론 임베디드 타겟 보드 포팅 및 H/W 제어 3일차 강의 자료 Embedded System Lab.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
논리회로 설계 및 실험 5주차.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
DK-128 실습 타이머카운터 사용법 아이티즌 기술연구소
컴퓨터 시스템 하드웨어 컴퓨터 시스템 소프트웨어 C P U Control Unit 입 력 장 치 출 력 장 치 ALU
WinCE Device Driver 실습 #2
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
7주차 실습 FPGA 보드 사용법.
WinCE Device Driver 실습 #4
( Windows Service Application Debugging )
OpenCV 설정 2.21 만든이 딩딩.
DK-128 개발환경 설정 아이티즌 기술연구소 김태성 연구원
DK-128 개발환경 설정 아이티즌 기술연구소
AT MEGA 128 기초와 응용 I 기본적인 구조.
13주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
06. 디바이스의 등록과 해제 김진홍
WinCE Device Driver 실습 #2
WinCE Device Driver 실습 #4
Platform Builder 사용법.
Presentation transcript:

Windows CE.NET Device Driver

강의 내용 Windows CE 구조 Device Driver 구조 Device Driver 개발 실습 #1 Windows CE.Net

Windows CE 구조 (1) Windows CE.Net

Windows CE 구조 (2) Kernel의 주요 역할 메모리 관리 스케줄링 Win32 API 지원 Process 관리 32개 process, process당 32MB 크기 Windows 2000 process의 2GB 주소 영역 Thread 관리 Windows CE 3.0 이전은 8개의 thread priority Windows CE.NET은 256개의 thread priority Windows CE.Net

Windows CE 구조 (3) Windows CE Kernel은 “NK.EXE” “New Kernel” 이라는 의미 NK.LIB Kernel의 기능을 갖춘 library Microsoft OAL.LIB OEM hardware에 맞춘 layer 개발자 NK.LIB + OAL.LIB = NK.EXE Windows CE.Net

Windows CE 구조 (4) Memory Model Windows CE.Net

Windows CE 구조 (5) OEM Adaptation Layer(OAL) Windows CE.Net

Windows CE 구조 (6) Interrupt Sequence Windows CE.Net

Windows CE 구조 (7) OAL Interrupt Service Routine : Xscale(PXA255)에서의 수정 사항 PLATFORM\HUINSPRO\KERNEL\HAL\cfwxsc1.c PLATFORM\HUINSPRO\KERNEL\HAL\ARM\intxsc1.c PLATFORM\HUINSPRO\INC\oalintr.inc PLATFORM\HUINSPRO\INC\oalintr.h Windows CE.Net

Device Driver 구조 Device Driver Overview Built-in Device Driver VS Installable Device Driver Native Device Driver VS Stream Interface Device Driver Stream Device Driver Device Driver Loading Windows CE.Net

Device Driver Overview 다른 운영체제들과 마찬가지로 Windows CE도 하드웨어 장치를 관리하고 운영하기 위한 Device Driver라고 불리는 소프트웨어를 필요 Device Driver는 운영체제와 디바이스를 연결하여 운영체제가 디바이스를 인식하고 디바이스가 제공하는 기능을 어플리케이션이 사용할 수 있도록 함. Windows CE에서 모든 Device Driver는 DLL(Dynamic-link library)이며 기능 구현을 위해서 Win32 API를 사용한다. Windows CE.Net

Device Manager Kernel에 의해 실행 되는 user-level 프로세스 [HKEY_LOCAL_MACHINE\init] “Launch20=“Device.exe” 디바이스 드라이버를 찾는 검색 루틴인 Regenum.dll을 호출 ActiveDeviceEX function을 호출하여, 적절한 디바이스 드라이버 검색 DeactiveDeivce function을 호출 드라이버 제거 Windows CE.Net

Graphics, Windowing, and Events Subsystem (GWES) Device Manager Stream Interface Stream- Interface Driver Card and Socket Services Stream Interface (DDI) MDD Layer Native Driver Device Driver Service-Provider Interface (DDSI) PDD Stream Interface NDIS Card and Socket Services Stream Interface USBD HCD NDIS Wrapper NDIS Miniport USB Interface USB Driver Graphics, Windowing, and Events Subsystem (GWES) Device Driver Interface(DDI) Monolithic Native Driver Device Driver Interface(DDI) MDD Layerd Native Driver Device Driver Service-Provider Interface(DDSI) PDD The DDI Interface of native Drivers is defined by Microsoft for Each device class Windows CE.Net

Built-in Device Driver vs Installable Device Driver Windows CE Device에 내장되어 OEM에 의해 설치되는 드라이버 디스플레이나 PC Card/USB 컨트롤러 Installable Device Driver Third Party가 공급 CE 장치의 최종 사용자가 하드웨어 소켓을 통해 언제든지 설치 프린터나 PC Card 장치 Windows CE.Net

Native Device Driver vs Stream Interface Device Driver Native Driver Built-In Device Driver OS에 필수적인 Device Driver GWES.EXE에 의해 로딩 및 관리 GWES는 드라이버를 시스템이 부트 될 때 로드 Display, Keyboard, Mouse, Touch driver, battery, Notification LED Stream Interface Device Driver Application에서 Driver를 file처럼 다룬다. DEVICE.EXE (Device Manager)에 의해 로딩 및 관리 DEVICE.EXE 는 드라이버를 부트 시에 로드 부팅된 후에는 모든 프로세스가 stream interface driver를 로드 가능 Serial, Block, Audio driver Windows CE.Net

Monolithic Device Driver vs Layered Device Driver (1) 상위 계층(MDD, Model Device Driver), 하위 계층(PDD, Platform Dependent Driver)으로 나눔 MDD는 디바이스 드라이버의 공통된 코드, 하드웨어와 연결 PDD는 특정 하드웨어에 맞춰진 코드 , native 또는 stream interface를 제공 Windows CE Platform Builder에 포함된 많은 드라이버들이 Layered Driver 하드웨어와 관련된 사항만을 구현하면 됨 드라이버 작성할 때의 노력을 감소 Monolithic Device Driver 동작과 관련된 인터페이스를 직접 구현 불필요한 call을 하지 않아 효율이 좋다. Interrupt service thread code, platform에 한정된 code Windows CE.Net

Monolithic Device Driver vs Layered Device Driver (2) GWES(Graphics, Windowing, and Events Subsystem) DDI functions DDI functions Layered Device Drivers MDD Monolithic Device Drivers DDSI functions PDD Hardware Windows CE.Net

Stream Device Driver (1) Device(ex: usb, ethernet)에 상관없는 일관된 인터페이스를 제공 논리적으로 데이터를 주고받는 디바이스에 적합 Stream 드라이버의 함수들이 File system API와 매칭 CreateFile, ReadFile, IOControl.. File 다루듯이 Stream Device를 다룸 응용 프로그램 개발자는 쉽게 디바이스에 접근 Stream 디바이스 드라이버 이름 규칙 Prefix(예, ‘COM1') 세 자리 문자 + Index 한 자리 숫자 Prefix와 Index는 레지스트리에 저장. Windows CE에서는 드라이버 이름 뒤에 ‘:’을 항상 붙인다. Windows CE.Net

Stream Device Driver (2) xxx는 디바이스의 Prefix (예, Block 드라이버인 경우 DSK_Init) xxx_Init xxx_Deinit xxx_Open xxx_Close xxx_Read xxx_Write xxx_Seek xxx_IOControl xxx_PowerDown xxx_PowerUp Windows CE.Net

Stream Device Driver Interface (1) Application Stream Interface Driver File APLs Filesystem IOCTLs File System Windows CE Kernel Device Manager Loaded at boot time OAL Interrupt Events Hardware Platforms Built-in Device Windows CE.Net

Streams Entry Points: Open and Close Mobile & Embedded DevCon 2005 17년 3월 17일 19시 35분 28초 Streams Entry Points: Open and Close XXX_Open Device를 read / write하기 위해 open 특정한 device fie이름을 open하기 위해 CreateFile을 호출할 때, application이 직접 이 function을 불러 낸다. 이 function이 호출되면, device는 각각의 context open과 동작을 위한 준비를 필요로 하는 resource에 allocate될 것이다. XXX_Close CloseHandle은 OS에서 이 function을 불러 낸다. Windows CE.Net © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

Streams Entry Points: Init and Deinit Mobile & Embedded DevCon 2005 17년 3월 17일 19시 35분 28초 Streams Entry Points: Init and Deinit XXX_Init Device Manager가 driver를 load할 때, 호출 사용되어지는 resource를 초기화 한다. Memory mapping XXX_Deinit Device Manager가 driver를 unload할 때, 호출 Resource를 해제, IST 정지 Windows CE.Net © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

Streams Entry Points: Read, Write and Seek Mobile & Embedded DevCon 2005 17년 3월 17일 19시 35분 28초 Streams Entry Points: Read, Write and Seek XXX_Read Application이 ReadFile function을 호출할 때 불려짐 XXX_Write Application이 WriteFile function을 호출할 때 불려짐 XXX_Seek 현재 I/O pointer를 이동하는 것을 허용 Windows CE.Net © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

Streams Entry Points: IOControl XXX_IOControl File에 따라 필수적이지 않은 custom operation의 허용 I/O control code는 동작을 정의 I/O control code 은 device 마다 다름 Windows CE.Net

Streams Entry Points: PowerUp and PowerDown Mobile & Embedded DevCon 2005 17년 3월 17일 19시 35분 28초 Streams Entry Points: PowerUp and PowerDown XXX_PowerUp Device에서 power를 돌려 받음 XXX_PowerDown Device에 power를 정지 Software의 제어 하에 shut off 될 수 있는 device인 경우 유용 Windows CE.Net © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

Stream Device Driver Interface (2) DWORD XXX_Init( DWORD dwContext ); BOOL XXX_Deinit( DWORD hDeviceContext ); DWORD XXX_Read( DWORD hOpenContext, LPVOID pBuffer, DWOR Count ); DWORD XXX_Write( DWORD hOpenContext, LPCVOID pBuffer, DWORD Count ); DWORD XXX_Seek( DWORD hOpenContext, long Amount, WORD Type ); BOOL XXX_IOControl( DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut ); void XXX_PowerDown( DWORD hDeviceContext ); void XXX_PowerUp( DWORD hDeviceContext ); Windows CE.Net

Stream Device Driver Interface (3) KERNEL Application xxx_Init DEVICE.EXE xxx_Deinit CreateFile xxx_Open xxx_Close CloseHandle xxx_Read ReadFile xxx_Write WriteFile xxx_Seek xxx_IOControl SetFilePointer xxx_PowerDown DeviceIoCtlontrol xxx_PowerUp Windows CE.Net

Device Driver Loading (1) Device Manager(Device.exe)가 시스템에 로드 Device.exe는 Regenum.dll(장치 열거자)을 이용 레지스트리에서 [HKEY_LOCAL_MACHINE\Drivers\Builtin] 안에 있는 드라이버들을 조사 목록과 초기화 할 순서를 생성 위 내용은 레지스트리에 있는 gpio_led 드라이버의 설정 값 ‘DLL'  드라이버 파일 이름(gpio_led) 'Prefix' - 디바이스 이름을 구성하는 세 글자의 이름 ‘Index' - Prefix와 디바이스 이름을 구성하는 숫자 ‘Order' - Regenum.dll가 드라이버 로딩할 순서를 결정 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\GPIO_LED]     "Dll"="gpio_led.dll"     "Prefix"="LED"     "Index"=dword:1     "Order"=dword:0 Windows CE.Net

Device Driver Loading (2) Regenum.dll는 위의 레지스트리를 읽어 드라이버(DLL)를 로드 드라이버의 Active 키를 생성 ActivateDevice 혹은 ActivateDeviceEx 함수를 사용 새로운 키 생성 [HKEY_LOCAL_MACHINE\Drivers\Active]에 생성 RegisterDevice 함수를 실행, 드라이버 로드 완료 RegisterDevice는 xxx_Init 함수를 호출하여 드라이버를 초기화 CreateFile이 드라이버를 Open Open 한 후, WriteFile, ReadFile, DeviceIoControl 등으로 디바이스를 제어 Windows CE.Net

Stream Device Driver 제작 (1) 다음과 같은 파일 작성 Driver file(.cpp, .h) Sources file .def file : export된 함수 포함 Dirs Makefile REG file BIB file Windows CE.Net

Stream Device Driver 제작 (2) PLATFORM/pxa255pro3/INC/xsc1bd.h에 Device Driver address 등록 (주)휴인스의 PXA255PRO보드의 CS3에 FPGA Board가 연결 OFFSET을 각각의 Device IO의 Physical / Virtual(cached, uncached) addess 등록 Device Driver는 이 address에 접근하여 IO Device 제어 Windows CE.Net

FPGA Memory Map Windows CE.Net

FPGA Board I/O Port Address I/O device 비고 PXA255Pro1 0x0c000002 LED LED 출력 포트 0x0c000004 FND FND 출력 포트 0x0c00001e DOT #1 DOT #1 출력 포트 0x0c000018 Step Motor Step Motor 제어 포트 0x0c00001c Text LCD 명령어 포트 0x0c00001a 데이터 포트 0x0c000006 ~0x0c000014 ADC ADC 입력값 FIFO(16Btes) 0x0d000016 DAC DAC 출력값FIFO(16Btes) Windows CE.Net

FPGA Board I/O Port Address I/O device 비고 PXA255Pro3 0x0c000016 LED LED 출력 포트 0x0c000002 FND FND 출력 포트 0x0c000004 DOT #1 DOT #1 출력 포트 0x0c00000c Step Motor Step Motor 제어 포트 0x0c000014 Text LCD 명령어 포트 0x0c000012 데이터 포트 0x0c800000 ADC ADC 입력값 FIFO(16Btes) 0x0d000000~0x0d000020 DAC DAC 출력값FIFO(16Btes) 0x0c800004 CDS CDS 출력값 Windows CE.Net

HAL(Hardware Adaptation Layer) ~WINCE420/PLATFORM/PXA255PRO3/INC/xsc1bd.h Windows CE.Net

Device Driver 개발실습 #1 (1) LED Device Driver 제작 Kernel에 Address 등록 Stream device driver 작성 fpga_led.def 파일 작성 sources 파일 작성 makefile 파일 작성 Platform.bib / platform.reg 수정 Application 작성 LED control Windows CE.Net

Device Driver 개발실습 #1 (2) Test Application 제작 디버깅 모드에서 디바이스를 테스트 할 수 있는 어플리케이션 제작 Platform Builder에서 작성 Windows CE.Net

LED 개요 Light Emitting Diode 순방향 전압시 다이오드 접합부 발광 D1 –D4 : Red D5 – D8 : Green D1~D8 주소에 0 : On, 1 : Off Bit 7 6 5 4 3 2 1 LED D8 D7 D6 D5 D4 D3 D2 D1 Windows CE.Net

LED 디바이스 드라이버 작성 (1) 디바이스 드라이버 작성 헤드파일 작성 Def 파일 작성 /wince420/platform/pxa255pro3/drivers/fpga_led/fpga_led.cpp 헤드파일 작성 /wince420/platform/pxa255pro3/drivers/fpga_led/fpga_led.h Def 파일 작성 /wince420/platform/pxa255pro3/drivers/fpga_led/fpga_led.def Windows CE.Net

LED 디바이스 드라이버 작성 (2) Sources 파일 작성 OS 이미지에 드라이버 추가 레지스트리 등록 /wince420/platform/pxa255pro3/drivers/fpga_led/sources OS 이미지에 드라이버 추가 /wince420/platform/pxa255pro3/cesysgen/files/platform.bib 레지스트리 등록 /wince420/platform/pxa255pro3/cesysgen/files/platform.reg Windows CE.Net

LED 디바이스 드라이버 작성 (3) 소스 빌드 OS이미지 생성 PB상에서 build – open build release directory fpga_led 디렉토리로 이동 커맨드라인에서 set WINCEREL = 1 입력 커맨드라인에서 build –cfs OS이미지 생성 커맨드라인에서 makeimg Windows CE.Net

LED 테스트 프로그램 작성 (1) 신규 작성 Platform Builder의 File 메뉴에서 New Project or File..을 실행 적절한 어플이케이션 이름을 Project name에 작성한다. A simple Windows CE application을 선택한다. 소스코드를 작성 Build 또는 Build(selection only)를 실행하여 빌드한다. Windows CE.Net

LED 테스트 프로그램 작성 (2) 기존의 프로젝트 추가 소스코드를 적절한 경로에 복사한다.(예, C:\WINCE420\PUBLIC\huinspro3_HH) Platform Builder의 File View 창에서 Insert Existing Project를 선택 *.pbp 파일을 선택한다.(제공된 소스를 카피한 디렉토리의 파일) 프로젝트가 추가되었다.(File View 창에서 확인) Build 또는 Build(selection only)를 실행하여 빌드한다. Windows CE.Net

다운로드 및 테스트 다운로드 테스트 테스트 프로그램 종료 PB 상에서 Target – Run programs Available program에서 led_test_app.exe 선택 테스트 프로그램 종료 PB상에서 Target – CE Target Control 타겟 컨트롤창에서 gi all 입력 타겟 컨트롤창에서 kp 프로세스번호 입력 Windows CE.Net