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