본문 바로가기
ARM 프로세서에 WinCE 포팅을 위한 준비사항은?


뭘 알아야 이해를 하지

WinCE6.0 포팅하기 위해서 다음과 같은 단계가 있답니다.
호스트 피시에 Platform builder 설치 - 커널 이미지 생성 - 개발 보드의 플래시 메모리에 바이너리 넣기 - 어플리케이션 프로그램 개발 - 디버깅 - 개발 완료

다음과 같은 사항이 준비 되어야 한답니다.

우선 호스트 피시에 Windows가 설치 되어 있다면, 개발 보드를 확보해 주세요. 개발 보드는 구매하실 때 반드시 WinCE6.0이 지원되는지 체크해 보셔야 해요. WinCE6.0을 지원한다는 의미는 BSP가 있다는 것을 뜻하니깐요. WinCE는 Linux와 달리 크로스 컴파일러는 별도로 구매해야 한답니다. Platform Builder for CE 6.0과 Visual Studio 2005 구매 후 설치를 해 주시면 됩니다. 이 개발툴에는 많은 기능들이 있는데, 소스 만들기 위한 에디터, 디버깅을 위한 디버거, 컴파일을 위한 크로스 컴파일러 그리고 프로파일링 기능까지 다양하게 제공하고 있답니다. 개발 툴 설치가 끝났으면 BSP 설치하는 방법을 알아 보도록 하죠.

BSP 설치를 위해서 보드 BSP를 호스트 피시의 C:\WINCE600\PLATFORM 폴더에 복사를 한답니다.
그러면 C:\WINCE600\PLATFORM\ARM11 폴더에 BSP Catalog folder와 batch file이 존재하는 것을 알 수가 있지요. 설치가 아주 간단하죠. ^^;

이제 컴파일하는 방법을 알아 보죠. 컴파일을 하기 전에 WINCE6.0 커널 설정을 해야 하죠. WINCE6.0 커널은 개발자가 원하는만 기능을 넣어서 만들 수가 있답니다.
자~~! 이제 시작해 보죠.
Visual Studio 2005를 실행하고, Visual Studio의 메뉴에서 File -> New -> Project .. 선택을 해요. 이제 New Project dialog에서 Project type는 Platform Builder for CE 6.0 선택한답니다. Visual Studio installed templates 아래의 OS Design을 선택합니다.
Name field에 OSDesignARM11을 입력하고 Ok를 선택하면, Windows Embedded CE 6.0 OS Design Wizard가 실행된답니다. Available BSP 목록에서 Board BSP 이름을 선택하시고 Next를 선택하죠.
이제 단계부터는 어떤 제품을 만들것이냐에 따라 커널이 다르게 만들어 진답니다. 우선 저희들은 PDA와 같은 제품을 만든다고 가정을 하면, PDA Device를 선택하고 Available design variants 목록에서 Mobile handheld를 선택하고 Next 하면 Applications_Media configuration window가 나오고 Next를 선택합니다. Networking_Communications configuration windows에서 TCP/IPv6 Support 선택해제 하고, Wireless Local Area Network (802.11) 선택 해제한 후, Personal Area Newtork (PAN) 선택해제 하고 Next를 선택, Finish를 해서 Wizard를 종료합니다.
Wizard 완료되면 OS Design Project가 생성되며, Solution Explorer tab을 통해 OSDesignARM11 생성된 것을 확인해 볼 수가 있어요.
이제부터는 Catalog에서 Core OS, Device Drivers 등과 같은 곳을 선택해서 개발 보드에 맞게 선택을 하시면 됩니다. 어떤 것을 선택해야 될지 모르겠다 싶으면 그냥 놓아 두세요. 디폴트로 체크가 되어 있거든요..ㅋㅋ

이제 커널을 만들어 보죠.
Visual Studio 2005 메뉴의 Build -> BuildOSDesignARM11을 선택하면 컴파일이 됩니다. 컴파일 되는 시간은 처음일 경우에는 많이 걸린답니다. 컴파일 시 부트로더도 함께 컴파일이 됩니다.
컴파일이 끝나면
C:\WINCE600\OSDesignARM11\OSDesignARM11\RelDir\ARM11_ARMV4l_Release 폴더에 Eboot.bin, Eboot,nb0, Eboot.exe, NK.bin, NK.nb0, NK.exe 파일 및 기타 아주 많은 파일들이 생성된답니다. 컴파일된 파일들이 생성되는 폴더는 크게 Release와 Debug 폴더로 구별되고, Visual Studio 2005 메뉴의 Project -> Build -> Configuration Manager 를 선택해서 ARM11 ARMV4l Release 또는 Debug를 선택할 수가 있어요. WINCE600 컴파일러는 ARM용 C 컴파일러와 어셈블리 컴파일러가 있어요.
C:\WINCE600\SDK\BIN\I386\ARM 폴더에 있으며, cl.exe는 C 컴파일러이며, armasm.exe는 어셈블리 컴파일러랍니다.

컴파일이 끝났으니 타겟 보드 플래시 메모리에 부트로더(Eboot), 커널(NK:New Kernel)을 넣어 보기로 하죠. 우선 개발보드를 구매하시면 가장 기본적인 부트로더가 플래시 메모리에 들어 있답니다. 흔히 이것을 스탭로더(Stepload)라고 하고, 보드 BSP에 보시면 stepldr.bin 파일로 들어 있답니다. 만약 없다면, ARM11 ARMV4l Release 폴더에 보시면 stepldr.bin, stepldr.nb0 있답니다. stepldr는 호스트 피시와의 타겟을 연결시켜 주는 인터페이스을 하며, 주로 USB 또는 Ethernet으로 한답니다. Stepldr의 역할은 WINCE 부트로더인 Eboot으로 제어권을 넘겨 주거나 Eboot이 없다면 Eboot.nb0을 타겟 SDRAM에 올려 주고, Eboot 부트로더로 제어권을 넘겨 준답니다.
Eboot은 많은 일들을 하는데, 가장 많이 사용되는 용도는 stepldr.bin, eboot.bin, nk.bin을 플래시 메모리에 퓨징(Fusing)을 할 수 있도록 해 준답니다. Linux에서 사용하는 u-boot이랑 거의 비슷한 역할을 한다고 보시면 됩니다.

가끔 개발을 하다보면 한번씩 Stepload가 전혀 동작을 안 할때가 있답니다. 방금 설명 드린봐와 같이 stepldr 없다면 eboot과 nk가 플래시 메모리에 있어도 전혀 동작하지 않지 않지요. 이를 경우에는 stepldr 바이너리가 플래시 메모리에서 지워졌거나 깨진 경우인데, 하드웨어 디버거 장비를 사용해서 다시 플래시 메모리에다 stepldr.nb0 파일을 퓨징하시면 됩니다.


전체 그림을 살펴 봤어요. 그런데 뭔가 조금 이상하다는 느낌이 들지 않았나요?
글을 자세히 다시 읽어 보시면 똑 같은 파일 이름인데 확장자명이 어떤 것은 *.bin 이고 *.nb0 네요.
두 개의 확장자에는 차이점이 있지 않을까요? 물론 있지~~요...ㅋㅋ

임베디드 시스템에서 순수한 바이너리 파일은 대부분 *.bin 이라는 확장자를 가진답니다. 하지만 WINCE에서만은 예외랍니다. WINCE에서 순수한 바이너리는 *.nb0 라는 확장자를 가진답니다. 그럼 *.bin 이라는 확장자는 무엇일까요?
두 개의 차이점을 확인해 보도록 할게요.
Eboot.bin은 시작 주소에 헤드 정보를 비롯해서 여러 가지 섹션을 가지고 있는 반면 Eboot.nb0는 시작주소에 Instruction code가 있어요. 조금 더 자세히 살펴보면 Eboot.bin 파일에서 헤드 정보 이후에는 Start address, Instrction length, checksum, instruction code 로 구별되어 있어서, 실제 타겟 메모리에서 어느 Address에서 Instruction 수행될지 알 수가 있답니다. Eboot.nb0 파일은 Start address, Instrction length, checksum, instruction code 이러한 내용 없이 순수하게 실행하고자 하는 Instruction 만 있다고 보시면 됩니다. 아래의 그림을 보시면 조금 더 이해하기 쉬울 것 같네요.
Eboot.bin에서 ①은 Start address 나타내는데 Eboot.nb0 파일 첫 번째 주소가 바로 그 주소랍니다. ②는 Instruction이 몇 byte인지 나타내는데, 현재 4byte로 되어 있으니 Eboot.nb0 에서 4byte만큼이 Instruction code라는 것을 알 수가 있지요. ④은 바로 Instruction code랍니다. 이와 같은 패턴으로 계속 반복이 되지요. 그런데 Eboot.nb0에서 조금 이상한 부분은 '0'이라는 값이 많이 있다는 것입니다. 그 이유는 Eboot.bin에서 ⑤ 의 시작 주소가 0x80030040인데, 이곳은 두 번째 Instruction 있는 주소랍니다. 첫 번째 ①의 시작 주소인 0x80030000 와 두 번재 Instruction ⑤ 의 주소 0x80030040 사이에서 공백을 모두 '0' 으로 채우기 때문이랍니다.


그래서 NK.nb0 안에는 WINCE 커널인 OAL.DLL, KERNEL.DLL 등을 비롯하여 많은 어플리케이션이 함께 포함되어 있는 바이너리라고 보시면 됩니다. User Mode에서 동작하는 ServicesD.exe 프로세스는 여러 서비스들을 관리하며, Udevice.exe는 user Mode 드바이스 드라이버를 지원하지요. Kernel Mode에서는 OAL.DLL, KERNEL.DLL, FILESYS.DLL, DEVMGR.DLL, GWES.DLL, FSDMGR.DLL, Networking.DLLs, ServicesD.exe 순으로 실행됩니다.

WINCE600의 폴더 구조를 살펴보죠.
C:\WINCE600\OSDesigns
C:\WINCE600\PLATFORM
C:\WINCE600\PUBLIC
C:\WINCE600\SDK
C:\WINCE600\PRIVATE
C:\WINCE600\OTHERS

1. OSDesigns: 새로운 프로젝트를 생성시 만들어지는 폴더랍니다. Visual Studio의 메뉴에서 File -> New -> Project 선택하고 프로젝트 명으로 입력한 대로 이곳에 폴더가 생성된답니다. Name field에 OSDesignARM11이라고 입력을 했으니
C:\WINCE600\OSDesigns\OSDesignARM11\OSDesignARM11\RelDir\ARM11_ARMV4I_Release 폴더로 생성되고, 빌드가 끝나면 이곳에 각종 EXEs 와 DLLs 들이 만들어지게 되죠.

2. PLATFORM: 하드웨어 플랫폼(개발보드)에 대한 개발 보드에 BSP(Board Support Package)를 설치하는 곳이랍니다. 여기선 C:\WINCE600\PLATFORM\ARM11폴더로 만들어 지겠죠..ㅋㅋ BSP폴더인 ARM11폴더는 다시 CATALOG, CESYSGEN, FILES, LIB, SRC, TARGET 폴더로 나누어 진답니다.

3. PUBLIC: OS 관련된 컴포넌트인 CEBASE, DIRECTX, IE, SHELL, DCOM 등 있으며, 커널과 함께 서비스를 위한 기본 프로그램이 있는 폴더랍니다. 관련 소스코드 및 샘플 소스가 있으며, 컴포넌트를 의미하는 폴더명으로 구성되어 있지요.

4. SDK: 각 프로세서에 따른 컴파일러, 링커 및 개발툴 관련된 유틸리티들이 있답니다. ARM 프로세서의 경우는
C:\WINCE600\SDK\BIN\I386\ARM 폴더에 C 컴파일러(cl.exe)와 어셈블리 컴파일러(armasm.exe) 가 있답니다.

5. PRIVATE: OS 커널 관련된 폴더랍니다. 플랫폼 빌더 설치 시 Shared Source License terms에 동의를 하고, 선택을 하면 설치가 된답니다. Kernel, GWES, Filesys, Shell, Directx, Scheduler 등이 포함되어 있어요.

6. OTHERS: ATL8, DOTNETV2, EDB, SQLCE20, VISUALSTUDIO 폴더로 구성되어 있답니다.

이제 기본적인 시스템을 알았으니 본격적으로 포팅에 들어가보도록 하죠.

플래시 메모리 - "203" "204” 하드웨어 디버거 - "207” 크로스컴파일러 - "300"

Linked at 친절한 임베디드 시스템 개발자.. at 2011/02/21 00:16

... p; 406 Linux에서 라이브러리를 만드는 방법은? 407 ARM 프로세서에 WinCE 포팅을 위한 준비사항은? 408 WINCE 포팅 완료까지의 절차가 어떻게 되죠? ... more

Commented by ruring at 2011/03/18 16:19
+_+ 맨처음나온 책 +_+! 사염~~~~~~~~~~~~~~~~~~~~ㅋㅋㅋㅋㅋㅋㅋ
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.
친절한 임베디드 시스템 개발자 되기 강좌 글 전체 리스트 (링크) -



댓글





친절한 임베디드 개발자 되기 강좌 글 전체 리스트 (링크) -