WinCE Bootloader Porting

Slides:



Advertisements
Similar presentations
㈜다산씨앤씨 The next generation Windows-based Terminal1 교육 정보화를 위한 W B T 제안서.
Advertisements

Page 1 Android Programming November 04 / 2009 S/W Junhyuk Jang.
컴퓨터의 기본 개념. 목 차목 차 컴퓨터의 정의 컴퓨터의 세대별 분류 컴퓨터의 분류 컴퓨터의 종류 컴퓨터의 구성 컴퓨터의 동작원리 컴퓨터의 외양 컴퓨터의 내부 구조 단위.
Efl을 이용한 타이젠 네이티브 웨어러블 앱 만들기
조교: 컴퓨터 응용 실험 컴퓨터공학 연구실 2005년 11월 10일
* 07/16/96 처음으로 배우는 C 프로그래밍 제1부 기초 제1장 시작하기 *.
Linux Debugging issues
Chapter 7 ARP and RARP.
Introduction to Django
임베디드 SW 시스템 소개 - 임베디드 운영체제 - 임베디드 리눅스 - 임베디드 인터넷
GTK+ 프로그래밍 (2) SNSLAB 발표 : 문동규.
Windows CE 시스템 개발 환경 구축.
제6장 FUSING.
Windows CE 메모리 아키텍처 및 관리 서진호
IT R&D Global Leader [첨부 제4호] 모바일 센서게이트웨이 및 OGC호환 센서데이터 전달 플랫폼 ETRI
크로스 컴파일 환경 구축.
이번 시간에는... 지난 시간에는 VM 기반 모바일 플랫폼 기술의 첫번째 시간으로, 모바일 플랫폼 및 그 현황과, GVM, XVM, WITOP, Brew 및 JavaStation 모바일 플랫폼의 특징과 구성에 대해 알아 보았습니다. 이번 시간에는 모바일 플랫폼 기술 그.
사업계획서.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Kernel Porting Lecture #7.
System Call Linux Kernel 수업 3번째.
제4장 Cross Compiler 설치.
제 1 장 마이크로프로세서의 기본동작.
Minicom,tftp,nfs설정,vnc설정
Bootloader Porting Lecture #6.
FUSING.
Linux를 이용한 Embedded 장비 개발
리눅스 커널의 이해 중에서 1장. 소개 이원구 네트워크 실험실.
임베디드 리눅스 시스템의 기본 개념 강의 목표 내용 임베디드 리눅스 시스템의 기본 개념과 주제 제시 1. 임베디드 시스템
목차 커널의 개념 및 기능 커널 포팅 램디스크.
3장. 라우터와 스위치의 기본설정 2012년 2학기 중부대학교 정보보호학과 이병천 교수.
TinyOS 사용법 및 nesC Programming
MicroC/OS-II Lab. 경희대학교 컴퓨터공학과 조 진 성.
The next generation Windows-based Terminal
AFC-1500 FASTENING SYSTEM.
4장. 컴퓨터 시스템의 구성과 기능 다루는 내용 컴퓨터 분해를 통한 본체 살펴보기 컴퓨터 구성요소 컴퓨터의 기능
가상플랫폼을 사용한 임베디드SW 개발 (CoWare CoWare Virtual Platform Designer 사용)
PLC를 이용한 제어로직에 관한 연구 김 재 은.
임베디드 시스템 개론 3주차 Embedded System..
Embedded System Porting (2)
Introduction Open Platform nodes H/W modules Technical Issues.
UNIT 02 Microprocessor 로봇 SW 교육원 조용수.
Software Engineering Project
1. Embedded System의 이해.
Computer Architecture
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
임베디드 소프트웨어 동향. 임베디드 소프트웨어 동향 임베디드 S/W 시장분류 솔루션 측면 시스템 측면 운영체제 개발도구 설계도구 테스트도구 유선통신 무선통신 정보가전 자동차제어 산업자동화 사무자동화 군사/항공우주 의료장비 솔루션 공급 업체 임베디드 S/W시장 임베디드.
임베디드 소프트웨어 설계.
Computer System Architecture
Platform Builder 기본 사용법
adopted from KNK C Programming : A Modern Approach
TinyOS Tutorial Network lab. 김인태
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
SYSMAC GATEWAY 간이 매뉴얼.
Ch 6. Initialization and Cleanup Routines
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
3장. 라우터와 스위치의 기본설정 2012년 2학기 중부대학교 정보보호학과 이병천 교수.
강의 소개, 자료구조의 개념, SW 개발과 자료구조
cafe.naver.com/embeddedcrazyboys
운영체제 (Operating Systems) (Memory Management Strategies)
Introduction to Programming Language
1. 컴퓨터 시스템 구성요소 메모리(Memory) 캐시메모리 개념 캐시메모리의 특징 적중률(hit ratio)
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
WinCE Device Driver 실습 #2
제 7장 이벤트.
3. LAN의 주소지정과 프레임 (3장. LAN: Local Area Network)
WinCE Device Driver 실습 #2
WinCE Bootloader Porting
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
Lecture 7 7-Segment LED controller using u-controller
Presentation transcript:

WinCE Bootloader Porting

개요 Windows CE BSP 개요 WinCE 부트로더 개요 BIN 파일형식 이해 부트로더 동작 방식 부트로더 소스 분석 부트로더 생성 모바일운영체제 - Windows CE

BSP(Board Support Package) (1) Board-dependent Bootloader (Eboot) BSP(Board Support Package) 모바일운영체제 - Windows CE

BSP(Board Support Package) (2) 특정 디바이스(Device or Board)를 지원하기 위해 포팅된 소스 코드의 묶음 BSP 구성 Bootloader – 디바이스에서의 Windows CE 부팅을 담당 OAL(OEM Adaptation Layer) – Windows CE 운영체제가 특정 디바이스를 제어할 수 있도록 운영체제와 하드웨어의 연결을 담당 Device Drivers – 특정 디바이스에서 지원하는 주변 장치의 제어를 담당 Customer Applications – GWES 위에서 동작하는 응용 프로그램 모바일운영체제 - Windows CE

BSP(Board Support Package) (3) BSP와 Windows CE 아키텍처 Application Source Codes Device Driver Source Codes OAL Source Codes Bootloader Source Codes BSP Application Source Codes H/W Windows CE OS EBOOT Device Drivers OAL Target Device Application Engineer System Engineer Hardware Engineer 모바일운영체제 - Windows CE

WinCE 부트로더 개요 (1) WinCE Bootloader 타겟 장치에서 전원이 인가된 후에 처음으로 실행 WinCE 운영체제가 구동할 수 있는 환경을 설정 CPU 내의 MMU 및 Cache 활성화, 디버깅 및 통신 채널 초기화 등 WinCE 이미지를 로딩하여 실행 대개의 경우 ROM 장치(Flash Memory 등)에 보관 Eboot(Ethernet Bootloader) Window CE 운영체제의 부트로더 주요 기능 타켓 플랫폼 장치를 초기화 부팅 과정을 제어 WinCE 이미지 다운로드 및 실행 모바일운영체제 - Windows CE

WinCE 부트로더 개요 (2) WinCE Bootloader 동작 모바일운영체제 - Windows CE

BIN 파일 형식 (1) BIN 파일 형식 플랫폼 빌더에서 생성하는 WinCE 이미지 파일 형식 e.g) NK.bin 특별한 레코드 형식을 가짐(그림 참조) 여러 개의 파일을 모아 하나의 파일을 구성한 일종의 archive 파일 형식 부트로더에서 WinCE 이미지를 로딩할 때에 bin 파일을 해석하여 적절한 메모리 장소에 이미지를 적재한다 BINFS.dll과 같은 파일시스템 드라이브를 사용하여 부팅 후에 bin 형식의 파일을 접근할 수 있다 모바일운영체제 - Windows CE

BIN 파일 형식 (2) BIN 파일 형식 (계속) BIN 파일 구조 모바일운영체제 - Windows CE

BIN 파일 형식 (3) BIN 파일 형식 (계속) BIN 헤더 부분 (1) 식별자(7 bytes) – “B000FF” + 0x0A / “X000FF” + 0x0A (2) 이미지 상주 시작 주소(4 bytes) (3) 이미지 크기 (4 bytes) 모바일운영체제 - Windows CE

BIN 파일 형식 (4) BIN 파일 형식 (계속) 레코드 부분 (1) 레코드 상주 시작 주소(4 bytes) (3) 체크섬(Checksum)(4 bytes) (4) 레코드 데이터 모바일운영체제 - Windows CE

BIN 파일 형식 (5) BIN 파일 형식 (계속) 마지막 레코드 부분 (1) 종료 레코드 ID(4 bytes) – 0x00000000 (2) 분기 주소 (4 bytes) (3) 종료 레코드 ID(4 bytes) – 0x00000000 모바일운영체제 - Windows CE

부트로더 실행 과정 부트로더 실행 과정 플랫폼 빌더 제공 요소 타겟 장치 포팅 부분(개발 부분) 모바일운영체제 - Windows CE

부트로더 소스 분석 (1) 플랫폼 빌더 지원 함수 (BLCOMMON.lib) BootloaderMain() 함수 부트로더의 전체적인 동작을 제어 타겟 보드에 맞게 포팅된 OEM 함수를 호출 소스 : void BootloaderMain (void) { DWORD dwAction; DWORD dwpToc = 0; DWORD dwImageStart = 0, dwImageLength = 0, dwLaunchAddr = 0; BOOL bDownloaded = FALSE; … 중략 … // (1) Init debug support. We can use OEMWriteDebugString afterward. if (!OEMDebugInit ()) // spin forever HALT (BLERR_DBGINIT); } // output banner EdbgOutputDebugString (NKSignon, CURRENT_VERSION_MAJOR, CURRENT_VERSION_MINOR); 모바일운영체제 - Windows CE

부트로더 소스 분석 (2) // (3) initialize platform (clock, drivers, transports, etc) if (!OEMPlatformInit ()) { // spin forever HALT (BLERR_PLATINIT); } // system ready, preparing for download EdbgOutputDebugString ("System ready!\r\nPreparing for download...\r\n"); // (4) call OEM specific pre-download function switch (dwAction = OEMPreDownload ()) case BL_DOWNLOAD: // (5) download image if (!DownloadImage (&dwImageStart, &dwImageLength, &dwLaunchAddr)) // error already reported in DownloadImage SPIN_FOREVER; bDownloaded = TRUE; // Check for pTOC signature ("CECE") here, after image in place if (*(LPDWORD) OEMMapMemAddr (dwImageStart, dwImageStart + ROM_SIGNATURE_OFFSET) == ROM_SIGNATURE) dwpToc = *(LPDWORD) OEMMapMemAddr (dwImageStart, dwImageStart + ROM_SIGNATURE_OFFSET + sizeof(ULONG)); // need to map the content again since the pointer is going to be in a fixup address dwpToc = (DWORD) OEMMapMemAddr (dwImageStart, dwpToc + g_dwROMOffset); EdbgOutputDebugString ("ROMHDR at Address %Xh\r\n", dwImageStart + ROM_SIGNATURE_OFFSET + sizeof (DWORD)); // right after signature 모바일운영체제 - Windows CE

부트로더 소스 분석 (3) // fall through case BL_JUMP: // Before jumping to the image, optionally check the image signature. // NOTE: if we haven't downloaded the image by now, we assume that it'll be loaded from local storage in OEMLaunch (or it // already resides in RAM from an earlier download), and in this case, the image start address might be 0. This means // that the image signature routine will need to find the image in storage or in RAM to validate it. Since the OEM"s // OEMLaunch function will need to do this anyways, we trust that it's within their abilities to do it here. // if (g_bBINDownload && g_pOEMCheckSignature) { if (!g_pOEMCheckSignature(dwImageStart, g_dwROMOffset, dwLaunchAddr, bDownloaded)) HALT(BLERR_CAT_SIGNATURE); } // (5) final call to launch the image. never returned OEMLaunch (dwImageStart, dwImageLength, dwLaunchAddr, (const ROMHDR *)dwpToc); // should never return default: // ERROR! spin forever HALT (BLERR_INVALIDCMD); 모바일운영체제 - Windows CE

부트로더 소스 분석 (4) 플랫폼 빌더 지원 함수 (BLCOMMON.lib) DownloadImage() 함수 호스트 컴퓨터로부터 Ethernet I/F를 통해 WinCE 이미지를 레코드 단위로 다운로드하여 메모리에 적재하는 역할을 수행 다음의 과정을 반복하여 실행 OEMReadData() // 레코드 헤드 정보 읽기 OEMMapMemAddr() // 레코드 적재 주소 mapping OEMReadData(); // 레코드 데이터 읽어 적재하기 VerifyChecksum(); // 레코드 읽기 오류 검사 OEMShowProgress() // 다운로드 진행 표시 … 다운로드 옵션에 따라 다운로드된 WinCE 이미지를 flash memory에 fusing 모바일운영체제 - Windows CE

부트로더 소스 분석 (5) OEM 개발자 제공 지원 함수 StartUp() 함수 CPU 초기화(Exception vector 설정 등) MMU & Cache 초기화를 통해 가상메모리 기능 활성화 main() 함수로 분기 void main(void) { OEMWriteDebugLED(0, 0xF); BootloaderMain(); SpinForever(); } 모바일운영체제 - Windows CE

부트로더 소스 분석 (6) OEM 개발자 제공 지원 함수 OEMDebugInit() 함수 OEMPlatformInit() 함수 디버그 포트(Console device) 초기화 대개의 경우 UART를 디버거 포트로 사용 OAL에서 지원하는 디버거 포트 초기화 함수 OEMInitDebugSerial() 함수를 호출 OEMPlatformInit() 함수 다운로드 포트 초기화를 수행 다운로드 포트 설정 및 다운로드 모드 선택 등과 관련된 사용자 입력 수행 사용자 설정 정보(TOC 정보)를 flash memory에 저장 모바일운영체제 - Windows CE

부트로더 소스 분석 (7) OEM 개발자 제공 지원 함수 OEMPreDownload() 함수 WinCE 이미지를 전송할 호스트 컴퓨터를 찾는 역할을 수행 BOOTME 패킷을 생성하여 broadcating 호스트 컴퓨터로부터 전송된 메시지를 바탕으로 두 가지 값(BL_JUMP / BL_DOWNLOAD) 중에 하나를 반환함 BootloadMain() 함수는 반환되는 값을 이용하여 아래의 두 가지 동작 중에 하나를 선택 (1) DownloadImage() 함수를 호출한 뒤에 OEMLaunch() 함수 호출 - 호스트로부터 WinCE 이미지를 다운로드한 후에 부팅을 수행 (2) OEMLaunch() 함수만 호출 - 타겟 장치의 저장 장소에서 WinCE 이미지를 적재한 후에 부팅을 수행 모바일운영체제 - Windows CE

부트로더 소스 분석 (8) OEM 개발자 제공 지원 함수 OEMReadData() 함수 OEMShowProgress() 함수 다운로드 포트를 통해 호스트로부터 지정된 크기만큼의 데이터를 읽어오는 역할을 수행 OEMShowProgress() 함수 다운로드 진행 사항을 사용자에게 나타냄 OEM 개발자는 별도의 기능을 지원하지 않음 플랫폼 빌더에서 진행 과정을 표시함 모바일운영체제 - Windows CE

부트로더 소스 분석 (9) OEM 개발자 제공 지원 함수 OEMMapMemAddr() 함수 다운로드할 이미지 레코드를 저장할 저장 공간의 주소를 반환 레코드 다운로드 주소가 RAM 주소인지 ROM 주소인지를 판별 ROM 주소의 경우, 다운로드 및 flash memory 쓰기 동작의 반복을 피하기 위해 다운로드할 RAM 버퍼를 할당하고 그 주소를 반환 RAM 버퍼에 다운로드된 이미지 레코드를 다운로드 동작이 완료된 후에 flash memory에 기록 모바일운영체제 - Windows CE

부트로더 소스 분석 (10) OEM 개발자 제공 지원 함수 OEMMapMemAddr() 함수 모바일운영체제 - Windows CE

부트로더 소스 분석 (11) OEM 개발자 제공 지원 함수 Flash Memory 관련 함수 OEMIsFlashAddr() 함수 OEMStartEraseFlash() 함수 OEMContinueEraseFlash() 함수 OEMFinishEraseFlash() 함수 OEMWriteFlash() 함수 모바일운영체제 - Windows CE

부트로더 소스 분석 (12) OEM 개발자 제공 지원 함수 OEMLaunch() 함수 다운로드되거나 저장장소로부터 읽어진 운영체제 이미지로 제어를 이행시키는 역할을 수행 사용자의 요청에 따라 다운로드된 WinCE 이미지를 flash memory에 fusing하는 작업을 수행 디버거 환경을 사용하는 경우, 운영체제 이미지로 제어를 이행하기 전에 호스트 컴퓨터에서 전송하는 디버거 옵션 정보를 읽어 설정한다 모바일운영체제 - Windows CE

부트로더 생성 (1) 부트로더 생성 방법 “Build OS / Sysgen” 메뉴을 이용한 생성 처음 타겟 플랫폼 이미지를 생성할 때에 사용 부트로더 및 WinCE 이미지 등 모든 이미지를 생성 명령 프롬프트 창을 이용한 수동 생성 처음 이미지 생성 후에 개별 이미지를 생성할 때에 사용 “Build OS/open Release Directory” 메뉴를 이용하여 명령 프롬프트 창을 생성하여 사용 플랫폼 빌더에서 이미지 빌딩에 필요한 모든 환경 변수가 설정된 상태에서 명령 프롬프트 창이 생성됨 추가 환경 변수 선언 필요 C:\...>set WINCEREL=1 이미지 생성 명령 C:\...>build -c 모바일운영체제 - Windows CE

부트로더 생성 (2) 부트로더 생성 관련 파일 Makefile / Makefile.inc BootImage: !IF "$(NOLINK)" == "" romimage $(ROMIMAGE_FLAGS) boot.bib !IF "$(WINCEREL)"=="1" copy $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot.nb0 $(_FLATRELEASEDIR) copy $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot.bin $(_FLATRELEASEDIR) copy $(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot.sre $(_FLATRELEASEDIR) !ENDIF 모바일운영체제 - Windows CE

부트로더 생성 (3) 부트로더 생성 관련 파일 Sources TARGETNAME=EBOOT TARGETTYPE=PROGRAM RELEASETYPE=PLATFORM EXEENTRY=StartUp NOMIPS16CODE=1 INCLUDES= \ $(INCLUDES); \ $(_PUBLICROOT)\common\oak\drivers\block\msflashfmd\inc \ ADEFINES=-pd "ALLOCATE_TABLE SETS \"FALSE\"" -pd "_TGTCPU SETS \"$(_TGTCPU)\"" $(ADEFINES) LDEFINES=-subsystem:native /DEBUG /DEBUGTYPE:CV /FIXED:NO /NODEFAULTLIB:corelibc CDEFINES=$(CDEFINES) -DPPSH_PROTOCOL_NOTIMEOUT -DCOREDLL SOURCELIBS= \ $(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\drvlib.lib \ TARGETLIBS= \ $(_PLATCOMMONLIB)\$(_CPUINDPATH)\oal_blcommon.lib \ $(_PLATCOMMONLIB)\$(_CPUINDPATH)\oal_blnk.lib \ 모바일운영체제 - Windows CE

부트로더 생성 (4) 부트로더 생성 관련 파일 Sources (계속) $(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\eboot.lib \ $(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\ne2kdbg.lib \ $(_TARGETPLATROOT)\lib\$(_CPUDEPPATH)\lan91c111dbg.lib \ $(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\traverse.lib \ $(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\mincrypt.lib \ $(_TARGETPLATROOT)\lib\$(_CPUDEPPATH)\stratak.lib \ $(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\bootpart.lib \ $(_COMMONOAKROOT)\lib\$(_CPUDEPPATH)\loadauth.lib \ $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\fulllibc.lib \ $(_TARGETPLATROOT)\lib\$(_CPUDEPPATH)\pxa255_io.lib \ SOURCES= \ fwxsc1.s \ main.c \ flash.c \ EdeviceInit.c \ timerXSC1.c \ debug.c \ WINCETARGETFILES= \ BootImage \ 모바일운영체제 - Windows CE

부트로더 생성 (5) 부트로더 생성 관련 파일 BOOT.bib ;****************************************************************************** ; TITLE: BOOT.BIB ; ; Ethernet Boot Loader Source Module MEMORY ; Name Start Size Type ; ------- -------- -------- ---- EBOOT 80078000 00040000 RAMIMAGE ; 256 KB for code RAM 80068000 00008000 RAM STACK 80000000 00068000 RESERVED SECTBUFF 80077C00 00000400 RESERVED DRV_GLB 83CC3000 00001000 RESERVED BLOCK_BUF 83E30000 00080000 RESERVED ; Total reserved area, which equals offset of the NK region in RAM g_dwRamImageStart 00000000 800B8000 FIXUPVAR 모바일운영체제 - Windows CE

부트로더 생성 (6) 부트로더 생성 관련 파일 BOOT.bib (계속) CONFIG COMPRESSION=ON PROFILE=OFF KERNELFIXUPS=ON SRE=ON ROMSTART=80078000 ROMWIDTH=32 ROMSIZE=00040000 MODULES ; Name Path Memory Type ; -------------- ---------------------------------------------- ----------- nk.exe $(_TARGETPLATROOT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot.exe EBOOT 모바일운영체제 - Windows CE