이것저것/Windows CE

WinCE 5.0 과 Windows Embedded CE 6.0 의 차이점 (1)

우담바라 2007. 4. 10. 00:00

먼저...이하의 내용은 거짓일수도 있다는 사실을 먼저 밝혀둔다.
여기저기 자료들을 보며 나름 학습(?)을 한 후에 정리를 해 본것에 지나지 않는다.
만약 틀린 부분이 있다면 댓글을 달아주시길 바란다.
그리고, 중간중간 그림 삽입을 하면서 여기저기 웹에 떠돌아 다니는 자료 및 그림을
인용하였는데....출처가 기억이 나지 않아서 따로 기록하지 않았다.
혹여 이것이 문제가 된다면 바로 그림을 삭제하겠다.



[ 6.0의 주요 변경사항 ]
- process 주소공간이 32MB => 1GB로 증가
- process의 수가 32개 => 32K 로 증가
- 사용자 모드 및 커널 모드 장치 드라이버 가능
- Device.exe, filesys.exe, GWES.exe 파일이 커널 모드로 이동
- SetKMode 및 설정 process 허용이 불가능
- system 호출 성능 개선

cf)
SetKMode   : 다른 process에 접속 할 때 사용(5.0에서..)
커널 모드   : 레지스트리에 정의한 메모리만 공간에 따라 virtual cpoy를 이용하도록 제한
사용자 모드: 보안성/강인성 강화


[ 5.0과 6.0의 Kerne/OAL 구조 비교 ]

사용자 삽입 이미지
                                                   [5.0 Kerne / OAL 구조]

사용자 삽입 이미지
                                                   [6.0 Kerne / OAL 구조]

위의 그림은 각각 5.0과 6.0의 kernel과 oal의 구조를 도식화 한것이다.

하드웨어적인면은 둘다 동일하다.

그러나, 5.0과 6.0의 큰 차이점은  Kernel | OAL | KITL 의 분리이다.

   5.0                                                                   6.0
 OAL.LIB                                        ====>          OAL.EXE
 NK.LIB                                          ====>          KERNEL.DLL
 KITL.LIB                                        ====>          KITL.DLL
OAL.LIB + NK.LIB + KITL.LIB                            각각의 모듈이 각각 따로 존재.
= NK.EXE 생성

[cf]
Windows CE 5.0
- OAL + Kernel = kern.exe
- OAL + Kernel + KITL = kernkitl.exe
- OAL + Kernel + KITL + Profiler = kernkitlprof.exe

Windows CE 6.0
- OAL = oal.exe
- Kernel = kernel.dll
- KITL = kitl.dll
- Kernel 프로파일러는 제공하지 않음.


6.0에서 각 모듈들이 각각 존재하게 되다보니, 각 모듈간에 통신이 필요하게 된다.
그래서 새로이 생겨나게 된것이, NKGLOBAL, OEMGLOBAL, 그리고 ~sutb.lib 들 이다.

NKGLOBAL, OEMGLOBAL은 모두 전역 변수로서, 초기화시에 각각의 영역의
( NKGLOBAL => kernel , OEMGLOBAL => oal )
함수들의 포인터 주소를 저장하게 된다.

그래서, 각 모듈간에 통신을 하고자 할 경우 이들 주소를 이용하여, OAL은 KERNEL쪽 Stub라이브러리를,
kernel은 oal 쪽의 stub라이브러리를 사용하여 각 함수들에 접근을 하게된다.

cf)
[ stub 라이브러리]
- OEMMAIN.LIB
- NKSTUB.LIB
- NKLDR.LIB



 [ 5.0과 6.0의  PQOAL 구조 비교 ]

사용자 삽입 이미지
                                                          [5.0 PQOAL 구조]

사용자 삽입 이미지
                                                         [6.0 PQOAL 구조]
공통 코드 디렉토리는 변경이 없다.
다만...
BSP 코드 디렉토리는 다소 변경이 있다.
제일 윗부분에서 말했던 바와 같이, OAL과 KITL 등이 분리 되어 존재하게 되면서,
각각의 폴더도 따로 생겨나게 된다.

사용자 삽입 이미지
                                       < 5.0 Platform\BSP\ 하위 디렉토리 >

사용자 삽입 이미지
                                           < 6.0 Platform\BSP\ 하위 디렉토리 >



[ Sources 및 6.0 에서 필요한 LIB ]

각각의 모듈등에는 sources 파일이 존재한다.
이 파일에 설정에따라 각 lib, dll, 또는 exe로 빌드 되게 된다.
sources의 구성은 아래의 그림(oal.exe.의 sources)과 같다.

cf)sources 의 메크로는 여기 블러그에서 검색해보면 간단히 나온다.

사용자 삽입 이미지

그림을 보면 명확하게 이해가 될 것이다.

위의 약 10줄 가량은 이 파일의 형식등을 설정 해준다고 볼수있다.
그리고 targetlibs 링크가 주욱 나오는데...
6.0에서 첨 생겨난것이 요 stub 라이브러리이다.  이렇게 부르는게 맞는지는 잘 모르겠다.

[ stub 라이브러리]
- OEMMAIN.LIB
- NKSTUB.LIB
- NKLDR.LIB
그리고, 개발자가 직접 작성하여 빌드하게 되는 oal.lib가 존재하게 된다.

그리고, PQOAL 관련 라이브러리들....
PQOAL에는 'OAL의 공통적인 요소(대부분의 OEM함수들을 지원)'와 '각 OAL의 CSP(CPU의존적인 요소들을 지원)'로 이루어진다고 보면된다.

'이것저것 > Windows CE' 카테고리의 다른 글

WinCE booting process  (0) 2007.04.16
VisualStudio2005 Uninstall 순서 정리  (0) 2007.04.16
WinCE 5.0 과 Windows Embedded CE 6.0 의 차이점 (2)  (0) 2007.04.09
Windows CE5.0 BSP를 6.0 BSP로 포팅하기  (0) 2007.04.04
Tip  (0) 2007.04.04