'OAL'에 해당되는 글 2건

  1. 2007.12.06 Windows CE에서 Debug Port 설정
  2. 2007.10.17 Windos CE 5.0 vs. Windows Embedded CE 6.0 ch.2
2007. 12. 6. 15:13

Windows CE에서 Debug Port 설정



Windows CE에서 부팅 시 어떠한 일들이 벌어지는지 혹은 부팅 이후에 어떤 작업을 할 시에 무슨 일이 일어나는지에 대한 내용을 호스트 PC에서 '하이퍼터미널'과 같은 콘솔을 이용하여 확인할 수 있다.

이러한 것들을 확인하기 위해서는 'Debug Port'가 활성화 되어 있어야 한다.
일반적으로 이러한 내용들은 'OAL의 함수들'이 처리를 하게 된다.

디버깅 포트에 관련된 부분들은 'Debug.c'라는 파일을 참고하면 된다.
이 파일에서 'Debug Port'를 초기화 하는 함수를 볼 수 있다.
void OEMInitDebugSerial(void)
{
    InitBootInfo ((BOOT_ARGS *) ((ULONG)(*(PBYTE *)BOOT_ARG_PTR_LOCATION) | 0x80000000));

    switch ( g_pX86Info->ucComPort ) {
    case 1:
        IoPortBase = (PUCHAR)COM1_BASE;
        break;
    case 2:
        IoPortBase = (PUCHAR)COM2_BASE;
        break;
    case 3:
        IoPortBase = (PUCHAR)COM3_BASE;
        break;
    case 4:
        IoPortBase = (PUCHAR)COM4_BASE;
        break;

    default:
        IoPortBase = 0;
        break;
    }
   
    if ( IoPortBase ) {
        WRITE_PORT_UCHAR(IoPortBase+comLineControl, 0x80);
        WRITE_PORT_UCHAR(IoPortBase+comDivisorLow, g_pX86Info->ucBaudDivisor);
        WRITE_PORT_UCHAR(IoPortBase+comDivisorHigh, 0x00);
        WRITE_PORT_UCHAR(IoPortBase+comFIFOControl, 0x01);
        WRITE_PORT_UCHAR(IoPortBase+comLineControl, 0x03);
        WRITE_PORT_UCHAR(IoPortBase+comIntEnable, 0x00);  
        WRITE_PORT_UCHAR(IoPortBase+comModemControl, 0x03);
    }
    OEMWriteDebugString(TEXT("Debug Serial Init\r\n"));

}
Debug.c파일의 OEMInitDebugSerial()함수

시리얼로 사용될 수 있는 4개의 포트 중 하나의 포트를 선택하여 디버깅 포트로 사용한다는 내용이다.
현재 COM1을 디버깅 포트로 사용하고 있는데 이를 COM2로 수정하고자 한다면,
...
}

IoPortBase = (PUCHAR)COM2_BASE;

if(IoPortBase) {
...
와 같이 Port를 수정하여 설정을 바꾸어 주면 된다.

디버깅 포트를 막고자 한다면.. IOPortBase = 0으로 세팅해 주면 된다.
...
}

IoPortBase = 0;

if(IoPortBase) {
...

물론 registry에서의 설정도 사용할려는 시리얼에 관련된 내용을 포함하고 있어야 한다.

2007. 10. 17. 17:08

Windos CE 5.0 vs. Windows Embedded CE 6.0 ch.2


Windows CE 5.0에서 Windows Embedded CE 6.0으로 넘어오면서 OAL에서 바뀐 점은 다음과 같다.

1. 커널과 OAL의 분리했다.
   -  NKLoader에 의해 합체
   -  독립적으로 업데이트 가틍
2. 전체적인 OAL구조는 같다.
  - OEM함수
  - 커널 접근은 커널 인터페이스를 통해서 가능
3. 새로운 메모리 모델을 OAL에 적용했다.

* OAL(OEM Adapted Layer) - 각 OEM의 platform에 맞게 작성된 사용자가 만든 소스 부분이라 생각하면 된다.

사용자 삽입 이미지
Windows CE 5.0과 달리 Windows Embedded CE 6.0은 커널과 OAL을 분리했다.

Windows Embedded CE 6.0 BSP의 특징.
1. 새로운 커널을 지원
2. 쉬운 BSP개발 및 포팅
3. PQOAL 지원
4. OAL, Kernel 그리고 KITL 독립성 지원

다음 그림을 보면서 디렉토리 구조가 어떻게 바뀌었는지 살펴보자.
사용자 삽입 이미지 사용자 삽입 이미지
Windows CE 5.0과 Windows Embedded CE 6.0의 디렉토리 변경점

Kernel의 변경된 점
1. Windows CE 5.0
  - OAL + Kernel = Kern.exe
  - OAL + Kernel + KITL = kernKitl.exe
  - OAL + Kernel + KITL + Profiler = kernkitlprof.exe
2. Windows Embedded CE 6.0
  - OAL = oal.exe
  - Kernel = kernel.dll
  - KITL = kitl.dll

아래 그림에서 보는것처럼 6.0에서는 커널과 OAL을 분리했고, 서로 통신하기 위한 수단으로 NKGLOBAL과 OEMGLOBAL이라는 구조를 두었다.
사용자 삽입 이미지
Windows Embedded CE 6.0 PQOAL 디자인

이처럼 구조가 Windows CE 5.0과는 다르기 때문에 6.0으로 bsp를 migration하기 위해서는 구조를 파악하는것이 우선이다.

음...

참고 : 웹캐스트 및 웹 자료