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에서의 설정도 사용할려는 시리얼에 관련된 내용을 포함하고 있어야 한다.