이것저것/Windows CE

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

우담바라 2007. 4. 9. 23:59
[CE 6.0의 OAL의 구성]


6.0에서 크게 바뀐 점 중에 하나가 이전에도 언급했었지만,
Kernel | OAL | KITL 의 분리가 아닌가 한다.

그에 따른 OAL의 변화된 부분 및 각각의 호출 관계를 소스를 이용하여 알아보겠다.

흠....어디부터 해야할지...난감하다 ㅋ

Kernel | OAL | KITL 이 분리가 되면서,
이들간의 통신을 위해서 stub라이브러리와, NKGlobal, OEMGlobal  등 이 사용되며,
OAL 생성 시, stub 라이브러리만 링크 시켜두면,
5.0 에서와 각 모듈에서 다른 모듈의 함수들을 그냥 사용 할 수 있다.

예를 들면, 1.OEMInit()등의 함수들은 KERNEL이 제공하는 함수호출을 위해서 과거
처럼 커널함수들을 사용할 수 있다. 단, OEM.LIB에 NKSTUB.LIB이 반드시 존재해야 한다.


Bootloader로 부터 제어를 받거나, 전원이 인가 되었을 경우,
첫 실행 되는 과정으로 부터 OAL과 Kernel 간의 관계를 보겠다.

크게 보면 흐름은 다음과 같다.
                                                 __
OAL.LIB                                      ↑
     ↓                                 
NKLDR.LIB                            OAL.EXE        
     ↓                                           ↓
KERNEL.DLL                               ↑                    
     ↓                                                  
OEMMAIN.LIB                      KERNEL.DLL                    
     ↓                                 
KERNEL.DLL                               ↓                
     ↓                                           ↑                  
OAL.LIB                                      ↓OAL.EXE
                                                  --                                                    

[1] OAL.LIB

bootloader로 부터 제어를 받거나, 전원이 인가되었을 경우 최초로 수행 되는 소스가,
OAL의 Startup() 함수 이다.

경로 C:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\OAL\OALLIB\startup.s
이 함수를 Edit창에서 오픈해서, 'startup' 함수를 찾아보자.


이 함수의 주된 역활은 메모리등의 초기화 및 커널 호출이다.

함수의 마지막 부분을 보자.

; Execute KernelStart
        add     r0, pc, #g_oalAddressTable - (. + 8)  ;가상 주소와 물리주소간의 변환 정보를 담음
        bl      KernelStart                                           ; KernelStart => NKLDR 호출
        ENTRY_END
 
        LTORG

※ g_oalAddressTable
    : KernleStart를 호출하기 전에, 가상 주소와 물리주소간의 변환 정보를 담음.

                                 


[2] NKLDR.LIB



OAL로부터 제어를 받는 커널의 시작함수(KernelStart)를 가지고 있다.
MMU 초기화 => 가상메모리사용이 가능하게 CPU를 바꿈
KERNEL.DLL을 찾아서, 시작엔트리를 호출


경로 : C:\WINCE600\PRIVATE\WINCEOS\COREOS\NK\LDR\ARM\armstart.s
          C:\WINCE600\PRIVATE\WINCEOS\COREOS\NK\LDR\ARM\arminit.c
            ( LDR 폴더에서 선택된 소스가 빌드되면, NKLDR.LIB가 생성
                                                              => OAL.exe를 만드는데 꼭 필요한 LIB )




OAL.LIB('startup' ) 에서 호출 된 'KernelStart', KernelStart 는 armstart.s


잠시 휴식을...취해야겠다....덜덜덜 압박이 심해~!!!!!



 

 
여기까지가 OAL.EXE 모드.




 Startup함수는 g_OalAddressTable의 주소를 파라미터로 정한뒤,
커널라이브러리(NKLDR.LIB)가 가진 KernelStart함수를 호출한다

                          

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

VisualStudio2005 Uninstall 순서 정리  (0) 2007.04.16
WinCE 5.0 과 Windows Embedded CE 6.0 의 차이점 (1)  (1) 2007.04.10
Windows CE5.0 BSP를 6.0 BSP로 포팅하기  (0) 2007.04.04
Tip  (0) 2007.04.04
Booting 환경  (0) 2007.04.04