wince bootloader porting l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
WinCE Bootloader Porting PowerPoint Presentation
Download Presentation
WinCE Bootloader Porting

Loading in 2 Seconds...

play fullscreen
1 / 28

WinCE Bootloader Porting - PowerPoint PPT Presentation


  • 349 Views
  • Uploaded on

WinCE Bootloader Porting . 개요. WinCE 부트로더 개요 BIN 파일형식 이해 부트로더 동작 방식 부트로더 소스 분석 부트로더 생성. WinCE 부트로더 개요 (1). WinCE Bootloader 호스트 컴퓨터 또는 타겟 장치의 저장 공간에서 WinCE 이미지를 읽어드리고 실행시키는 역할을 수행 타겟 장치에서 전원이 인가된 후에 처음으로 실행 WinCE 운영체제가 구동할 수 있는 환경을 설정

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'WinCE Bootloader Porting' - rumer


Download Now An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
개요
  • WinCE 부트로더 개요
  • BIN 파일형식 이해
  • 부트로더 동작 방식
  • 부트로더 소스 분석
  • 부트로더 생성

Windows CE.NET

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

Windows CE.NET

wince 2
WinCE 부트로더 개요 (2)
  • WinCE Bootloader 동작

Windows CE.NET

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

Windows CE.NET

bin 2
BIN 파일 형식 (2)
  • BIN 파일 형식 (계속)
    • BIN 파일 구조

Windows CE.NET

bin 3
BIN 파일 형식 (3)
  • BIN 파일 형식(계속)
    • BIN 헤더 부분

(1) 식별자(7 bytes) – “B000FF” + 0x0A / “X000FF” + 0x0A

(2) 이미지 상주 시작 주소(4 bytes)

(3) 이미지 크기 (4 bytes)

Windows CE.NET

bin 4
BIN 파일 형식 (4)
  • BIN 파일 형식(계속)
    • 레코드 부분

(1) 레코드 상주 시작 주소(4 bytes)

(2) 레코드 크기 (4 bytes)

(3) 체크섬(Checksum)(4 bytes)

(4) 레코드 데이터

Windows CE.NET

bin 5
BIN 파일 형식 (5)
  • BIN 파일 형식(계속)
    • 마지막 레코드 부분

(1) 종료 레코드 ID(4 bytes) – 0x00000000

(2) 분기 주소 (4 bytes)

(3) 종료 레코드 ID(4 bytes) – 0x00000000

Windows CE.NET

slide10

플랫폼 빌더 제공 요소

타겟 장치 포팅 부분(개발 부분)

부트로더 실행 과정
  • 부트로더 실행 과정

Windows CE.NET

slide11
부트로더 소스 분석 (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.NET

slide12
부트로더 소스 분석 (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.NET

slide13
부트로더 소스 분석 (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

// fall through

default:

// ERROR! spin forever

HALT (BLERR_INVALIDCMD);

}

}

Windows CE.NET

slide14
부트로더 소스 분석 (4)
  • 플랫폼 빌더 지원 함수 (BLCOMMON.lib)
    • DownloadImage() 함수
      • 호스트 컴퓨터로부터 Ethernet I/F를 통해 WinCE 이미지를 레코드 단위로 다운로드하여 메모리에 적재하는 역할을 수행
      • 다음의 과정을 반복하여 실행

OEMReadData() // 레코드 헤드 정보 읽기

OEMMapMemAddr() // 레코드 적재 주소 mapping

OEMReadData(); // 레코드 데이터 읽어 적재하기

VerifyChecksum(); // 레코드 읽기 오류 검사

OEMShowProgress() // 다운로드 진행 표시

      • 다운로드 옵션에 따라 다운로드된 WinCE 이미지를 flash memory에 fusing

Windows CE.NET

slide15
부트로더 소스 분석 (5)
  • OEM 개발자 제공 지원 함수
    • StartUp() 함수
      • CPU 초기화(Exception vector 설정 등)
      • MMU & Cache 초기화를 통해 가상메모리 기능 활성화
      • main() 함수로 분기

void main(void)

{

OEMWriteDebugLED(0, 0xF);

BootloaderMain();

SpinForever();

}

Windows CE.NET

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

Windows CE.NET

slide17
부트로더 소스 분석 (7)
  • OEM 개발자 제공 지원 함수
    • OEMPreDownload() 함수
      • WinCE 이미지를 전송할 호스트 컴퓨터를 찾는 역할을 수행
      • BOOTME 패킷을 생성하여 broadcating
      • 호스트 컴퓨터로부터 전송된 메시지를 바탕으로 두 가지 값(BL_JUMP / BL_DOWNLOAD) 중에 하나를 반환함
      • BootloadMain() 함수는 반환되는 값을 이용하여 아래의 두 가지 동작 중에 하나를 선택

(1) DownloadImage() 함수를 호출한 뒤에 OEMLaunch() 함수 호출

- 호스트로부터 WinCE 이미지를 다운로드한 후에 부팅을 수행

(2) OEMLaunch() 함수만 호출

- 타겟 장치의 저장 장소에서 WinCE 이미지를 적재한 후에 부팅을 수행

Windows CE.NET

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

Windows CE.NET

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

Windows CE.NET

slide20
부트로더 소스 분석 (10)
  • OEM 개발자 제공 지원 함수
    • OEMMapMemAddr() 함수

Windows CE.NET

slide21
부트로더 소스 분석 (11)
  • OEM 개발자 제공 지원 함수
    • Flash Memory 관련 함수
      • 사용자 설정 정보 및 다운로드 이미지을 flash memory에 쓰기 위한 함수를 제공
      • OEMIsFlashAddr() 함수
      • OEMStartEraseFlash() 함수
      • OEMContinueEraseFlash() 함수
      • OEMFinishEraseFlash() 함수
      • OEMWriteFlash() 함수

Windows CE.NET

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

Windows CE.NET

slide23
부트로더 생성 (1)
  • 부트로더 생성 방법
    • “Build OS / Sysgen”메뉴을 이용한 생성
      • 처음 타겟 플랫폼 이미지를 생성할 때에 사용
      • 부트로더 및 WinCE 이미지 등 모든 이미지를 생성
    • 명령 프롬프트 창을 이용한 수동 생성
      • 처음 이미지 생성 후에 개별 이미지를 생성할 때에 사용
      • “Build OS/open Release Directory”메뉴를 이용하여 명령 프롬프트 창을 생성하여 사용
        • 플랫폼 빌더에서 이미지 빌딩에 필요한 모든 환경 변수가 설정된 상태에서 명령 프롬프트 창이 생성됨
      • 추가 환경 변수 선언 필요

C:\...>set WINCEREL=1

      • 이미지 생성 명령

C:\...>build -c

Windows CE.NET

slide24
부트로더 생성 (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

!ENDIF

Windows CE.NET

slide25
부트로더 생성 (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.NET

slide26
부트로더 생성 (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.NET

slide27
부트로더 생성 (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.NET

slide28
부트로더 생성 (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.NET