'Windows Embedded'에 해당되는 글 51건

  1. 2007.12.10 Windows CE Screen Rotation
  2. 2007.12.06 Debug port, UART, Serial, COM에 대한 간단한 정리..
  3. 2007.12.06 Windows CE에서 Debug Port 설정
  4. 2007.12.05 Windows CE Boot Loader의 흐름
  5. 2007.12.04 LDAP란.. 무엇일까요?
  6. 2007.11.30 Windows CE Ship Build
  7. 2007.11.28 부트로더(Bootloader)
  8. 2007.11.23 Hive 가반의 Registry..
  9. 2007.11.22 [MS e-seminar] 비휘발성 Object Store구현과 Hive based registry
  10. 2007.11.22 Windows Embedded CE 6.0에서 한글 폰트 설정 2
2007. 12. 10. 14:20

Windows CE Screen Rotation



Windows CE에서 화면을 회전(Screen Rotation)하는 방법에 대한 문서이다.

갑자기 해야할 일이 생겨서 여기 저기 문서를 뒤지다가.. MSDN에 있는 문서를 참고해서 대충 돌아가는 것만 확인했다.

하나의 응용프로그램을 만들어 실행(더블클릭) 시 90도씩 시계 반대방향으로 화면이 회전하는 것이다. 일반적으로 PDA같은 곳에 있는 기능이라고 하여 시도를 해본 것이다.
참고로 현재는 멀티 스크린은 적용되지 않고, 또 screen rotation 프로그램을 실행시키게 되면 커서나 마우스의 동작이 자동으로 바뀐 스크린에 맞게 동작을 하게 된다.
그리고, screen rotation은 display driver가 screen rotation을 지원할 경우에만 가능하다. 더 자세한 사항은 'Screen Rotation'를 참조하면 될 듯 하다.

참고한 'MSDN( How to Implement Screen Rotation)' 링크이다.

다음은 Screen Rotation APP를 만드는 절차이다.
Step Topic

1. Create an OS design. Make the following choices in the Windows Embedded CE 6.0 OS Design Wizard:

  • Name the OS design ScreenRotation.
  • From the Available BSPs list, choose CEPC: x86.
  • From the Available design templates list in the New Platform Wizard, choose the PDA Device design template. In the Variants step, choose Mobile Handheld.

Creating an OS Design

2. Make the registry changes.

Screen Rotation Registry Settings

3. Create a project for the screen rotation application.

Creating a Project for the Screen Rotation Application

4. Specify whether you are building a release or debug configuration of the OS design.

Choose the release build.

Levels of Debugging Support

5. Build the run-time image. The following list shows the choices to make:

  1. From the Build menu, select Global Build Settings. Ensure that the following are selected:
    Copy Files to Release Directory After Build
    Make Run-Time Image After Build
  2. From the Build menu, choose Build Solution.

Building a Run-Time Image

6. Download the run-time image.

Downloading a Run-Time Image to a CEPC

7. Run the application and verify the screen rotation.

To execute the sample application on the CEPC, right-click the Start button and choose Run. Type ScreenRotationProj and choose OK. Verify that the screen has rotated by 90 degrees.

Each time you run the ScreenRotationProj program, the screen will rotate by 90 degrees.

Not applicable.


2007. 12. 6. 20:53

Debug port, UART, Serial, COM에 대한 간단한 정리..



시리얼 관련해 흔히 혼동하는 부분('Debug Port', 'UART', 'Serial', 'COM')에 대해서 자료를 찾다가 좋은 문서가 있어서..

먼저 UART는 Universal Asynchronous Receiver/Transmitter로서 CPU에 붙어있는 interface이다.
URAT0, UART1, ...등으로 얘기를 많이 하고, Data 통신을 RS232와 같이 RX/TX serial하게 하기 때문에 보통 시리얼 포트라고 한다.
RS-232는 보통 컴퓨터에 붙어있는 connector이름이다.

시리얼(Serial)은 응용프로그램과 드라이버간의 인터페이스를 이야기하는 것으로, 시리얼 디바이스 드라이버라고 한다.  UART 포트를 사용할 수 있는 드라이버..
응용프로그램은 UART포트가 0인지 1인지2인지를 알 수가 없다. 그래서 *.reg파일에 index를 할당하여COM의 번호를 할당해 준다.

COM은 UART의 Driver가 OS로 올라갈 때 COM이라는 이름으로 올라가는 것이다.

디버그 포트(Debug Port)는 OS에서 Debug용도(개발 보드에서 디버깅을 하기 위한 용도)로 사용하기 위해 설정하는 것이다. 흔히 하이퍼 터미널과 같은 것으로 부팅이나 프로그램 실행시 메시지를 확인하는 것이 디버깅 포트이다.

디버그 포트는 디바이스 드라이버가 올라가기 전부터 통신을 해야한다. 그래서 디버그 포트와 관련된 구현은 EBOOT, KERNEL쪽에 구현이 되어있다.

중요한 점은 Debug port와 UART의 driver가 같은 포트를 사용하게 되면 충돌이 일어나게 된다.
Debug port로 사용할 경우 UART를 사용할 수 없다는 말이다.

네이버 'WEEG 카페'에서 참고한 글임!!


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. 12. 5. 14:11

Windows CE Boot Loader의 흐름



Windows CE에서의 'Boot Loader'라는 녀석의 흐름은 대충 이렇다.
$(_PUBLICROOT)\COMMON\OAK\DRIVER\ETHDBG\BLCOMMON
이라는 폴더를 살펴보게 되면, EBOOT(Ethernet Booterloader)의 작성을 도와주기 위한 라이브러리 소스가 있다.

MS에서 제공하는 것으로 개발자가 부트로더를 개발할 때 이 라이브러리들을 참고해 손쉽게 부트로더를 개발할 수 있도록 하는 것이라고 한다.

BLCOMMON(blcommon.c)라는 녀석의 함수중 크게 중요(?)한 것은 BootloaderMain()과 DownloadImage()이다.  대부분의 부트로더 관련 함수들은 이 두 함수에서 호출하여 사용하고 있다.
사용자 삽입 이미지
BLCOMMON에서의 흐름
StartUp()
대부분 어셈블러로 작성된 코드이다. CPU에 전원이 공급괴고, Reset되어 실행되는 최초의 코드이기 때문에 'StartUp'이라고 한다. 이 녀석은 CPU를 초기화 한다. MMU, 캐시 등을 초기화해 가상 메모리 사용을 가능하도록 한다.
일반적으로 StartUp()은 C 로 작성된 main()으로 점프한다.

BootLoadMain()
Boot Loader의 Main이다.
StartUp()에서 main()으로 점프한 뒤 바로 BootLoaderMain()으로 점프한다. 이 녀석은 OEMDebugInit(), OEMPlatformInit(), OEMPreDownLoader(), DownloadImage(), OEMLaunch()를 호출하여 BootLoader의 동작을 수행하게 된다.
이 후의 과정은 BootloaderMain()이 통제하게 된다.
각각의 OEM Function을 호출하기 전에 BootLoaderMain()은 KernelRelocate()를 먼저 실행하게 된다. 이는 BootLoader의 Global Variable을 DRAM에 롬기는 과정을 수행한다.
KernelRelocate()에서 사용하는 pTOC에서는 BootLoader와 Windows CE Kernel에 필요한 정보를 point하는데 Platfrom Builder에 포함된 tool인 'RomInage.exe'에 해당 값들이 고정되어 있어 Boot Loader 생성시 해당 값들이 넣어진다.
KernelRelocate()가 수행되기 전에는 Global Variable을 사용할 수 없다.

OEMDebugInit()
Boot Loader에서 사용하는 Message들을 Debug output port에 출력하기 위한 시리얼포트 초기화 함수이다.
일반적으로 Boot Loader는 Serial Port를 사용하여 Boot Loader의 Message나 status, menu등을 출력한다.
개발자가 준비해야 할 함수이다.

OEMPlatformInit()
OS를 Download받기 위해 필요한 device(Ethernet, Flash, Clock)를 초기화 하는 함수이다. 부트로더로서 역할을 수행하기 위해서 필요한 타겟 플랫폼을 초기화하라는 의미이며, 이더텟 포트를 초기화 하는 부을 포함하고 있다.
이 과정에서 사용자로부터 Boot option(설정)을 입력받기 위한 menu를 출력하고, 사용자로부터 입력받은 Boot option에 따라 Boot Loader를 동작시킨다.

OEMPreDownLoad()
OEMDebugInit()와 OEMPlatformInit()를 통해 디버그 포트와 다운로드 포트의 초기화가 이루어지면, 다운로드 포트를 통해 원격지에 있는 호스트들로부터 타겟 플랫폼과 연결될 호스트를 찾기 위해 BOOTME 패킷을 Broadcast형식으로 내보내는 작업(Target Device Name, IP Address, Mac Address를 이용)을 한다.
리턴값으로 이미 플래시 메모리에 다운로드돼있는 이미지를 사용해 바로 부팅할 것인지, 호스트로 부터 새로운 이미지를 다운로드를 할지를 결정한다.

DownLoadImage()
OEM이 제공하는 OEMReadData() 함수를 사용해 다운로드 포트로부터 운영체제 이미지를 원하는 양만큼 레코드 단위로 반복적인 읽기를 시도한다.
이 함수는 부트로더의 정책에 의해 플래시 메모리에 기록하는 작업을 시도하는데, 이때 플래시 기록작업을 도와주는 OEM의 플래시 관련 함수들을 호출하게 된다.

OEMLaunch()
다운로드가 완료된 OS Image를 launch하는 함수이다.

'jay_korea님의 블로그'와 노란책을 참조해서 작성한 문서이고, 부트로더(Boot Loader)에 대한 간략한 개념은 '여기'를 참조하면 될 듯 하다.

2007. 12. 4. 10:35

LDAP란.. 무엇일까요?



'LDAP(Lightweight Directory Access Protocol)'이란.. 무엇일까요?

[텀즈]에 있는 LDAP의 정의를 보면 다음과 같다.
'LDAP'는 조직이나, 개체, 그리고 인터넷이나 기업 내의 인트라넷 등 네트웍상에 있는 파일이나 장치들과 같은 자원 등의 위치를 찾을 수 있게 해주는 소프트웨어 프로토콜이다. LDAP는 DAP의 경량판(코드의 량이 적다)이며, 네트웍 내의 디렉토리 서비스 표준인 X.500의 일부이다.
네트웍에서 디렉토리란 어떤 자원이 네트웍상의 어디에 있는가를 알려준다. 인터넷을 포함한 TCP/IP 네트웍에서, DNS는 특정 네트웍 주소와 도메인 이름 사이의 관계를 나타내는 디렉토리 시스템이다. 그러나, 때로는 도메인 이름조차 모를 수 있는데, LDAP는 개체가 어디에 있는지 알지 못하더라도 그것을 검색할 수 있게 한다.

LDAP 디렉토리는 다음과 같은 계층으로 구성된 단순한 트리구조이다.
  • 루트 디렉토리(시작 위치 또는 트리 구조의 근원),
  • 국가들
  • 기관들
  • 기관별 단위
  • 개체들(사람, 파일 및 프린터 등과 같은 공유자원들)
LDAP 디렉토리는 많은 서버들 사이에 분포될 수 있고, 각 서버는 전체 디렉토리의 사본을 가질 수 있으며, 그 내용이 주기적으로 동기화된다. LDAP 서버는 DSAc(Directory System Agent)라고도 불린다. 사용자로부터 요청을 받은 LDAP 서버는 요청에 대한 책임을 지며, 필요하다면 그것을 다른 DSA들로 전달하지만, 사용자에게는 공동 작용을 통한 단일 응답을 보장한다.
마이크로소프트에서는 '액티브 디렉토리(Active Directory)'라고 부르는 제품의 일부로서 LDAP를 포함하고 있다.
현재 Windows Embedded CE 6.0에서는 LDAP ver.3.0을 지원하고 있다.

음.. 자세한 내용은 잘 모르겠지만.. 하다보면 알게 되겠지.. ㅡㅡ

'Windows Embedded > Windows Embedded CE 6.0' 카테고리의 다른 글

Windows CE에서 Debug Port 설정  (0) 2007.12.06
Windows CE Boot Loader의 흐름  (0) 2007.12.05
Windows CE Ship Build  (0) 2007.11.30
부트로더(Bootloader)  (0) 2007.11.28
Hive 가반의 Registry..  (0) 2007.11.23
2007. 11. 30. 20:03

Windows CE Ship Build



'Platform Builder'에는 'Ship Build'라는 옵션이 있다.

이 옵션은 Windows Embedded CE 6.0을 기반으로 했을 때
Project -> XXX Properties -> Configuration Properties -> Build Option -> Enable Ship Build (WINCESHIP=1)
에 있는 것으로, 개발이나 디버깅 단계가 아닌 '양산'단계에서 Debug Message를 출력하지 않도록 해주는 옵션이다.

사용자 삽입 이미지
Windows Embedded CE 6.0 의 Ship Build Option

이 옵션은 'PUBLIC\COMMON\OAK\MISC\makefile.def'에 정의되어 있다.
##<Variable PlatformBuilderSettingsPage="General" SettingsPageItemNumber="0">
##<VariableName>WINCESHIP</VariableName>
##<FriendlyName>Ship Build</FriendlyName>
##<Description>Specifies whether to remove debug messages and provide limited support for debugging. To enable a ship build, the environment variable WINCEDEBUG must also be set to RETAIL.</Description>
##<Settings>
##<Setting>
##<SettingValue Default="Y"></SettingValue>
##<FriendlyName>No</FriendlyName>
##</Setting>
##<Setting>
##<SettingValue>1</SettingValue>
##<FriendlyName>Yes</FriendlyName>
##</Setting>
##</Settings>
##</Variable>
!IF "$(WINCESHIP)" != ""
CDEBUG_DEFINES=$(CDEBUG_DEFINES) -DSHIP_BUILD
!ENDIF
makefile.def파일은 모든 파일에 적용된다.

이렇게 설정을 하게 되면, 컴파일단계에서 SHIP_BUILD라는 정의에 의해 조건부 컴파일을 하게되어, Debug Message가 출력되지 않게 되는 것이다.

Ship Build환경변수는 Release 모드에서만 설정할 수 가 있고, Debug 모드에서는 할 수 없다.

'지연아빠'님의 블로그와 'WEEG'에서 참고한 문서임!
2007. 11. 28. 19:08

부트로더(Bootloader)



부트로더는 데스크톱의 BIOS와 비슷한 역할을 한다. 처음 전원을 이가하거나 하드웨어적으로 리셋을 시키면 부트로더는 시스템을 시작하기 위해 필요한 최소한의 하드웨어를 초기화 한다. 그리고난 후 메모리에 담겨져 있는 커널 이미지와 루트파일 시스템을 찾아서 RAM으로 복사를 하고 커널이미지를 위치로 옮겨 부팅을 하게 한다.

Windows CE에서의 부트로더도 다르지 않다.
부트로더(Bootloader)는 호스트에서 타겟(혹은 타겟 내의 저장공간)에서 메모리로 OS Image를 읽어들이는 역할을 한다.
간단히 말하자면, 호스트(개발 PC)에서 타겟장치(개발하는 보드)로 부팅시키고자 하는 이미지를 올리는 작업을 하는 녀석이다. 추가로 부트로더는 타겟 플랫폼의 디바이스를 초기화한다.

일반적으로 부트로더의 역할은 다음 세가지로 요약할 수 있다.
1. 타겟 플랫폼 디바이스를 초기화한다.

CPU를 사용가능한 환경으로 초기화 한다. CPU내의 MMU(Memory Management Unit)와 캐시 등을 활성화 하고, 리얼타임 클럭, 다운로드 경로로 사용될 하드웨어를 초기화 한다.

2. 부팅 과정을 통제(부팅과정 중 옵션을 사용)한다.

다운로드 경로(USB, 패러럴, 이더넷 등)을 선택
호스트에서 RAM으로 직접 다운로드
다운로드 하기 전에 사용될 메모리 진단
다운로드될 장소를 결정

3. Windows CE 이미지를 다운로드 하고 실행시킨다.

패러럴 포트, USB, 이더넷과 같은 비교적 전송속도가 빠른 경로를 사용해서 호스트에서 타겟 플랫폼으로 OS Image를 다운로드 시킨다.
2007. 11. 23. 10:41

Hive 가반의 Registry..



'Windows CE'는 처음부터 Portable기기에 적합하도록 설계되었고, 'Object Store'의 수용공간으로  RAM을 이용하게 되었다.
Object Store란 OS가 사용하는 기본 저장장소로 File, DataBase, Registry가 담기는 저장소이며, Windows CE의 모든 File System의 Root Directory("/")로 사용된다. 쉽게 말해 일반 PC의 HDD정도로 생각하면 된다.

RAM을 기반으로 Object Store가 구현된 Windows CE기기들은 RAM의 특정상 전원공급이 중단되면, 저장되었던 모든 File과 Data 및 Registry가 사라지게 된다(휘발성).

이를 보안하고자 나온 대안이 'Hive Registry'이다

Hive 기반의 Registry는 System Registry를 File로 저장하여 사용하도록 설계된 것이다.
Ram 기반의 Registry와는 다르게 OAL에 구현해 주어야 하는 code가 요구되지 않고, Windows CE에서 인식한 어떠한 File System 저장장치에 Registry를 영구적으로 저장할 수 있는 기능을 제공한다.

"Boot.hv", "Default.hv", "User.hv" 등 세가지의 registry file을 사용한다.

Boot.hv
저장장치에 file로 저장 되어있는 "Default.hv"와 "User.hv"를 읽어오기 위해 필요한 Device Driver와 File System을 로드하기 위한 정보가 담겨있다. 또한 "Default.hv"와 "User.hv"의 위치정보도 포함되어 있다.
이 file은 절대 변경되지 않고, 항상 OS image(NK.bin)에 있는 것을 사용한다.

Default.hv
OS에 관련된 대부분의 System registry 정보를 담고 있다.
OS image에 포함되어 있는 registry에서 변경된 부분만 저장장치에 저장한다.
크게 아래 세 가지 root registry key안에 모든 registry 정보를 포함한다.
  • HKEY_LOCAL_MACHINE
  • HKEY_CLASS_ROOT
  • HKEY_USER
User.hv
사용자별 registry 정보를 포함한다.
HKEY_CURRENT_USER root key안의 각각의 사용자별 경로를 저장한다.

Hive 기반의 registry 환경에서의 System 초기화 과정은 아래와 같다.
사용자 삽입 이미지
Hive based registry system init process
  • NK.exe(Kernel)이 Filesys.exe를 실행.
  • Filesys.exe가 Boot.hv를 OS Image로부터 로드.
  • Filesys.exe가 Device.exe(Device Driver Manager)를 실행.
  • Device.exe는 Boot.hv의 registry설정에 따라 Driver들을 로드.
  • Block Device driver와 관련 File system로드.
  • Filesys.exe는 System.hv를 로드.
  • Filesys.exe는 대기상태이고, System.hv의 registry설정에 따라 Kernel 재 초기화.
  • Kernel이 Filesys.exe에 신호발생하여 Filesys.exe가 Device.exe를 실행.
  • Device.exe에 "BootPhase2" event를 보내 driver들을 로드, re-enunerate.

2007. 11. 22. 17:40

[MS e-seminar] 비휘발성 Object Store구현과 Hive based registry



'Hive based registry'관련 자료를 찾으려 웹 여기저기를 돌아다니다 발견한 사이트에서 일단 퍼왔다.
Microsoft에서 주관하는 Windows CE관련 'e-seminar'이라고 하는데 꽤 오래전(2년이 넘었으니...)자료인 듯 하나.. 어차피 개념을 알고자 하는 것이므로.. 일단 스크랩!!

e-seminar 주소는 '여기'를 클릭하시라!! ㅋ

이 세미나에서 담고 있는 내용은 다음과 같다.
  • Windows CE의 Object Store
  • 비 휘발성 저장 Solution의 장점
  • File System
  • Hive란?
  • 비 휘발성 Object Store 구현
사용자 삽입 이미지
Microsoft e-seminar

여튼 무슨 일이든.. 날고 뛰는 사람들이 너무 많은 것 같다..
아... 언제쯤.. ㅜ


2007. 11. 22. 13:31

Windows Embedded CE 6.0에서 한글 폰트 설정



Windows Embedded CE 6.0에서 언어관련 설정 부분이다.

디폴트로는 영어로 되어 있고, 한글은 포함되지 않아 이미지를 생성해 실제 보드에 올려보면.. 모든 언어가 영어로만 나오는 것을 볼 수 있다.

이것은... 대한민국 사람으로 참을 수 없다!!

당장에 한글을 CE에서 보도록 하자!!

먼저 한글 설정을 위한 환경을 만들어 주어야 한다.
메뉴의 Project->Properties를 클릭해 Property Page창을 연다.

사용자 삽입 이미지
메뉴 -> Project -> Properties...

Property Page창에서 Clear All을 한 뒤, 사용하고자 하는 언어를 선택한다.
본인의 경우 영어(미국), 한국어를 선택했다. Default locale는 한국어로 선택을 하자.
사용자 삽입 이미지
Property Page 창

다음으로 해줄 일은.. Catalog Item View에서 한국어 폰트를 추가하는 일이다.
굴림밖에 없는데... 여기 저기 검색을 하다보니.. .ttl로 된 파일들을 추가하고 registry를 세팅하면 다른 폰트도 사용 가능하다고 한다. 조만간 해보고.. ㅋ
사용자 삽입 이미지
Catalog Items View에서 폰트 추가

대충 이렇게 하고 Build를 해주면.. 기존에 보이던 온리 영어에서 벗어날 수가 있다.