'Windows Embedded/Windows Embedded CE 6.0'에 해당되는 글 35건

  1. 2008.06.25 Windows CE 6.0 빌드 메뉴..
  2. 2008.05.28 DEBUGMSG를 release모드에서 출력하기
  3. 2008.05.22 CE에서의 디버깅 메시지 - RETAILMSG
  4. 2008.01.30 CEPC 해상도 조절
  5. 2008.01.29 펜티엄 3 기계에 Windows Embedded CE 6.0 설치
  6. 2008.01.25 제어판에 네트웍 설정 추가하기
  7. 2007.12.24 RDP를 이용한 Seamless환경..
  8. 2007.12.24 Windows CE해상도 수정..
  9. 2007.12.17 Windows CE BiosLoader에서 로고 바꾸기!
  10. 2007.12.10 Windows CE Screen Rotation
2008. 6. 25. 13:44

Windows CE 6.0 빌드 메뉴..



Windows Embedded CE 6.0을 가지고 이런 저런 작업들을 하곤 하지만.. 아무 생각없이 Build Solution을 클릭해서 빌드를 하곤 한다.

빌드 시간이야.. 뭐.. 일단 Build Solution 해 놓구선 다른 작업을 하다보면 빌드가 완료되어 있으므로.. 별 신경을 쓰지는 않고 있지만.. 사실 빌드 메뉴에 대한 내용을 알고 사용하는 것도 좋을 것 같다는 생각이 드는건.. ^^;

책이나 문서들을 보면 대충 빌드 메뉴에 대한 자료는 꽤 있는 듯하지만.. 나름 여기 저기 자료를 보구서 살짝 정리를 해보려 한다. 뭐 이 글을 보구서 이거 어디서 본거하고 같니 마니.. 이런 말들은 안해 주었으면.. 하는데.. ^^;

Windows Embedded CE 6.0의 Build menu에는 다음과 같은 것들이 있다.
사용자 삽입 이미지
Windows Embedded CE 6.0 Build Menu


Build Solution
Advanced Build Commands의 Sysgen과 동일한 명령으로 보면 된다.

Rebuild Solution
Advanced Build Commands의 Clean Sysgen과 동일한 명령으로 보면 된다.

Clean Solution
release 디렉토리의 모든 파일을 지운다.


Advanced Build Commands

Sysgen
SYSGEN -> BUILD -> BUILDREL -> MAKEIMG 의 작업을 진행한다.
  • SYSGEN : 현재 플랫폼의 구성요소들의 SYSGEN_XXX와 같은 환경변수를 생성한다. 이 환경변수를 기반으로 플랫폼 빌더가 제공하는 WinCE 를 위한 기본 구성요소들을 $(_PUBLICROOT)에서 개발자가 생성한 작업공간으로 복사를 한다.준비한다.
  • BUILD : 개발자가 생성하려는 플랫폼의 BPS를 빌드하는 과정이다. SYSGEN_XXX 과 같은 환경변수에 의한 선택적인 모듈들이 빌드되도록 작성된다.
  • BUILDREL : 위의 결과물들을 Release 폴더에 복사를 한다.
  • MAKEIMG : .reg, .bib 파일들을 통합하여 reginit.ini, ce.bib 파일을 만들고, 이 파일들의 내용을 기반으로 OS Image를 만든다.
Clean Sysgen
이전에 Sysgen의 결과물로 생성된 파일들을 Clean하고 다시 시스젠을 실행한다.

Build and Sysgen
플랫폼 빌더가 제공하는 Common 요소들을 빌드한다. 그리고 나서 SYSGEN 과정을 진행한다. 이는 Common요소(PUBLIC 폴더)를 수정하였을 경우에 사용한다.
참고로, SYSGEN이 먼저 일어나고, BUILD과정 중에 PUBLIC폴더의 빌드가 일어난다. SYSGEN이 선행되어야 BUILD 시 필요한 요소가 무엇인지 알수 있기때문이다.

Rebuild and Clean Sysgen
Build and Sysgen에 Clean 이 추가된 것으로 볼 수있다. 하지만... 안쓰는게 좋다는..

Build Current BSP and Subprojects
BSP와 subproject를 빌드한다.
하지만 일반적으로 Build Menu에서 Global Build Settings의 Copy Files to Release Directory After Build와 Make Run-Time Image After Build를 체크하기 때문에 빌드와 동시에 결과물을 Release 디렉토리로 복사하고 관련된 파일들을 묶어 OS Image를 만들어 준다.

Rebuild Current BSP and Subprojects
Build Current BSP and Subprojects와 동일한 작업을 한다. 기존의 object 파일을 삭제하고 다시 빌드한다.


2008. 5. 28. 11:51

DEBUGMSG를 release모드에서 출력하기



BSP의 소스 내용을 보면, 디버그 메시지를 뿌려주는 부분이 대부분 DEBUGMSG()로 되어있는 것을 볼 수있다.
이것은 커널을 디버그(debug)모드로 빌드를 했을 때 볼 수 있는 디버깅 메시지이다. 하지만, 보통 디버그 모드 보다는 릴리즈(release)모드로 빌드를 하기 때문에 이 디버깅 메시지를 확인 할 수 없다.

작업을 하다 보면 디버깅 메시지를 확인해야 할 필요가 많이 있다. 그렇다구 해서 일일이 DEBUGMSG()RETAILMSG()로 바꾸어 빌드하는 것두 곤욕이다.
이럴 때 다음과 같은 방법을 사용하면 될 듯 하다.
뭐.. 공공연하게 많이 사용되는 방법이긴 하지만.. 그래도 팁이라고 ... -_-;

디버깅 메시지를 보고자 하는 파일(.cpp, .c)에 다음을 선언해주자.
#undef DEBUGMSG
#define DEBUGMSG(a, b) RETAILMSG(1, b)

위의 두 줄을 선언하게 되면, 해당 파일의 DEBUGMSG()의 디버깅 메시지를 릴리즈모드에서도 확인할 수 있다.

참고로 헤더파일(.h)에 선언하는 것은 비추이다. 그 헤더파일을 include하는 모든 함수에 적용이 되어 이놈 저놈다 디버깅 메시지를 출력하기에... 상당히 디버깅하기에 복잡할 수 있다. 디버깅 하고자 하는 필요한 파일에만 선언을 할 수 있도록!!

추가로 RETAILMSG()에 관련된 내용은 http://todayis.tistory.com/108 에서 확인 할 수 있다.



2008. 5. 22. 17:12

CE에서의 디버깅 메시지 - RETAILMSG



플랫폼 빌더 내의 PUBLIC나 PLATFORM쪽의 소스들을 보게 되면 'DEGUBMSG()'라는 녀석을 자주 볼 수 있다. 이녀석은 디버깅 모드로 빌딩을 했을 때 디버깅 메시지를 볼 수 있도록 해주는 녀석이다. 하지만.. 디버깅 모드로 빌드를 하게되면.. 용량도 엄청(?)커지게 되고.. 느리지고.. 뭐 그래서 잘 하지 않을 것이다.

그렇다면.. 릴리즈 모드로 빌드를 해서 디버깅 메시지를 어떻게 확인을 할 수 있을까? -_-
그래서 'RETAILMSG()'라는 녀석이 존재한다.
'RETAILMSG()'라는 녀석은 릴리즈 모드로 빌드를 했을 때 디버깅 모드의 'DEBUGMSG()'와 마찬가지로 디버깅 메시지를 볼 수 있도록 해주는 녀석이다.

RETAILMSG()의 문법은 다음과 같다.
RETAILMSG( Expression, Message)
  - Expression : Boolean expression used to determine if the message would be output
  - Message   : Expression to be printed using printf format style.

Expression는 0 혹은 0이 아닌 다른 것으로써, 0이 아니면 Message의 내용을 출력하게 된다..
Message는 일반적인 printf와 같은 포맷으로 동작을하고, Message의 내용이 디버깅 메시지로 출력이 된다.

주의할 사항은 RETAILMSG는 2개의 인자(Expression, Message)만을 받기 때문에 두번째 인자를 주의해서 사용해야 한다.
예를 들면 다음과 같다.
예...
       RETAILMSG(1, (TEXT("This is Test Message...")));
       Expression : 1
       Message   : (TEXT("This is Test Message..."))
또 다른 예...
       RETAILMSG(1, (TEXT("This value is %x\r\n"), value));
       Expression : 1
       Message   : (TEXT("This value is %x\r\n"), value)

위의 예에서 보는 것처럼 Message에 들어갈 내용을 괄호로 묶어 하나의 인수처럼 사용을 해야한다. 괄호로 묶지 않고 일반 C에서 사용하는 printf처럼("xxx %d", value) 사용하면 에러가 발생한다. -_-


2008. 1. 30. 10:24

CEPC 해상도 조절



펜티엄 3에 CEPC를 올리는 작업을 하던 중.. 해상도 문제로 고민(800x600인지.. 600x480인지 모르겠지만.. 여튼 열라 낮은 해상도로 display되고 있음..)을 하고 있다가..

해결을 해버려서.. 즐거운 마음에 포스팅!! ㅋ

LX800같은 경우에는 디스플레이 관련 디바이스 드라이버가 있어서 해당하는 .reg파일 내에서 해상도를 수정해 주었던 것으로 기억한다.
하지만.. CEPC쪽에서는 그런 디스플레이 관련 디바이스 드라이버를 찾을 수 없었다. 있었는데.. 못찾았는지는 모르겠지만.. -_-;

여튼 처음 이미지를 올릴 때 해상도를 고정시킬 수 있는 방법이 있는것 같았다..
전에 loadcepc ~ 를 했을 때 해상도를 입력했던 기억이 있어서...

여기 저기 구글링, 네이버질... 을 하다가 대충 쓸만한 건데기를 건진듯..

WindowsForDevices.com 이라는 사이트인데.. 전에도 여기서 좋은 자료, 도움 되는 자료를 꽤 본 듯 하다.
이 문서에 따르면.. 'Boot.ini' 파일에서 'DisplayWidth', 'DisplayHeight', 'DisplayDepth'를 수정하여 쓸 수 있는 것 같다.

CEPC에서 제공되는 Boot.ini파일을 보니 기본적으로
DisplayWidth=600
DisplayHeight=480
DisplayDepth=16
으로 되어 있었다.

이 부분을 대략 자신이 원하는 해상도로 바꾸어 주면 된다.

본인의 경우는 아래와 같이 수정해 주었다.
# Display screen width
DisplayWidth=1024

# Display screen height
DisplayHeight=768

# Display screen depth
# Possible values: 8, 15, 16, 24, 32
DisplayDepth=16

이렇게 수정하고 이미지를 올리니 진정 원하던 1024x768의 해상도를 구경할 수 있었다!!! 기쁘다..

2008. 1. 29. 11:51

펜티엄 3 기계에 Windows Embedded CE 6.0 설치



이젠 별짓을 다해본다.. -_-

기존에 LX800에서 하던 작업을 동일한 클럭을 갖는 펜티엄 III (500MHz)에 올리는 작업을 하게 되었다.

일단 CPU가 Geode LX800이 아니므로.. 프로젝트를 CEPC용으로 다시 만들고...
대략의 설정은 기존의 LX800에 했던 작업과 동일하게 해주었다.

기존에는 usb메모리 스틱을 이용해 DOS 부팅을 해서 NK.bin을 올리는 형식으로 SSD(44핀)에 사용해 간단하게 이미지를 올렸는데.. 현재는 HDD(40핀)에 올리는 작업이라.. USB 젠더를 이용해 이미지를 올리는 약간 더 번거로운 작업을 하게 되었다.
참고로.. IDE로 바로 붙였을 경우는 CE 부팅이 잘 되던데.. USB로 부팅을 하니.. 이상하게 안되었음..
이유는 잘 모름.. -_-

이미지를 HDD에 올리고, 펜티엄 III로 CE를 띄우는 것은 일단 성공..
하지만.. network이 안됨.. 전에 LX800에서 사용하던 RTL8139를 그대로 사용하였는데.. 왜 안될까.. -_-

다른 데스크톱의 RTL8139를 떼어 테스트 하니 또 정상적으로 네트웍이 되는데... 아마도 볼티지 문제이지 않을까?
기존의 LX800에서 사용하던 RTL8139는 3.3V용이고, 정상적으로 인식한 녀석은 5V용이라는 거...

단지 이 이유 때문일까?? -_-

참 모를 세상이다...

남은 작업은 해상도(현재 800X600으로 잡히는 듯...)와 하이브 레지스트리 작업...

2008. 1. 25. 11:15

제어판에 네트웍 설정 추가하기



현재 ThinClient를 위한 Windows Embedded CE 6.0 이미지를 제작하고 있다.
디폴트로 이미지를 생성하니.. 아이피를 변경할 수 있는 부분이 없어서.. 한참을 고민했다... -_-

이미지를 생성할 때 이놈의 아이피를 .reg에 넣는 수밖에 없는가... ㅡㅡ; 라고..

이리 저리 ThinClient의 기능을 만지작 거리다 보니 제어판으로 들어갈 수 있는 부분(초기화면에서 F2키를 누름)이 있더군..
근데.. IP를 세팅할 수 있는 부분이 여기도 없다..
그래서 결론은 "이 제어판에 아이피 세팅하는 부분을 추가하자!" 이다.

아래 그림과 같이 OS Design을 할 때 Catalog Items View에서 "Network User Interface"라는 녀석을 추가해 주면 된다.
사용자 삽입 이미지

관련된 정보는 MSDN에서 찾아 확인 할 수 있다.

Network User Interface

Windows Embedded CE provides the Network User Interface (NetUI) that defines configuration settings for the Network and Dial-up Connections icon in Control Panel.

Network User Interface OS Design Development 
        Presents Network User Interface information that is helpful for designing and developing a Windows
        Embedded CE OS. This includes dependency information, the modules and components that
        implement Network User Interface, and implementation considerations.

Network User Interface Migration 
        Presents information that is important to know if you are migrating from one version of Windows
        Embedded CE to another.

Network User Interface Samples 
        Describes sample code that is available in the %_WINCEROOT%\Public\Common\Oak\Drivers
        \netui directory.

Network User Interface Reference 
        Provides language reference information for the Network User Interface functions and structures.

Network User Interface Reference
 
        Provides language reference information for the Network User Interface functions and structures.

Networking - Core 
        Provides conceptual and reference information about general networking technologies.
추가로.. 이녀석을 추가시키니.. 빌드가 되지 않고 자꾸 에러가 발생했다.
원인을 잘 모르겠고.. 사실 안될 구석이 없었기에..
결국 'Build -> Clean Solution'을 해주고나서 'Build -> Build Solution'을 해주니 정상적으로 빌드가 되는 것이다.

뭐 이런게 다있지?? 라는 생각도 있지만, 하나의 경험으로 생각하고 넘어감!! 나중에 이런 경우가 발생한다면 Clean Solution을 하고 다시 Build Solution을 해주면 정상적으로 빌드가 될 수도 있다는 '노하우'를 얻었으니..

2007. 12. 24. 17:44

RDP를 이용한 Seamless환경..



RDP를 이용해서 Seamless한 환경을 구축할 수 있다.
Seamless환경이라는 것은 쉽게 말해 원격에 있는 프로그램을 마치 자신의 기계에서 실행되는 듯한 느낌을 주는 환경이다. 원격의 워드 프로그램을 실행시키지만, 실행되는 환경은 사용자로 하여금 자신의 기계에서 실행되는 듯한 느낌을 주게 되는 것이다.

Windows XP에서는 아주 멋진 Seamless환경을 사용할 수 있는데.. WindowsCE에서는 뭔가 2%가 부족하다.
Windows CE의 경우는.. Seamless한 환경을 제공하는 프로그램을 실행시키게 되면, RDP와 같이 동작하게 된다. 사용자로 하여금 Seamless하다고 느끼지 못하게 한다.

Seamless를 구축한 환경은 Windows Server 2008을 서버로 사용하고 Client로는 Windows Embedded CE 6.0을 사용하였다. 일단 RDP 6을 제공하므로..

기본적으로 CE 이미지를 만들때 Catalog Items View에서 RDP관련된 내용을 추가시켜 주어야 한다.

Windows Server 2008의 제어판을 보게 되면, Administrative Tools라는 것이 있다. 이곳에서 Server Manager라는 곳에 들어가 Roles의 Terminal Services의 TS RemoteApp Manager를 클릭한다.
Control Panel > Administrative Tools > Server Manager > Roles > Terminal Services > TS RemoteApp Manager
이 곳에서 Remote로 동작시킬 프로그램들을 등록하고 .rdp라든지 .msi 형식의 파일을 생성해 낼 수 있다.
이렇게 해서 만들어지는 파일들은 Client에서 원격으로 Seamless한 환경으로 동작될 수 있는 파일들이다.

이 파일들을 Windows CE의 Windows폴더에 복사해 넣고 실행을 시키면, 멋지게 원격 프로그램을 실행시킬 수 있다!!!


2007. 12. 24. 11:32

Windows CE해상도 수정..



현재 개발중인 LX800은 800x480의 해상도를 가지는 LCD패널에 출력을 한다.
잠시 시연을 위해 1024x768의 해상도를 갖는 LCD모니터에 연결을 하여 출력을 하니.. 이거 너무 더럽게 나온다.. ㅡㅡ;

결론은 CE의 해상도를 1024x768로 수정..

Windows Embedded CE 6.0에서는 GeodeLX의 비디오 디바이스 드라이버 쪽에 .reg파일에 해상도에 관련된 부분이 있다. 그 부분을 수정해 주면 된다.

lxvideo.reg
; HIVE BOOT SECTION

;Use anti-aliased fonts ( if uncommented )
;[HKEY_LOCAL_MACHINE\SYSTEM\GDI\FONTSMOOTHING]

[HKEY_LOCAL_MACHINE\Software]
[HKEY_LOCAL_MACHINE\Software\AMD]
[HKEY_LOCAL_MACHINE\Software\AMD\Versions]
    "Graphics"=dword:00010103

[HKEY_LOCAL_MACHINE\Software\Geode]
;"Resolution"="800 480 60"                              ;기존의 해상도 주석..
"Resolution"="1024 768 60"                              ;새로운 해상도 적용..

;"FrameBufferDepth"=dword:20
"FrameBufferDepth"=dword:10

"EnableCompression"=dword:1
"ClearFrameBuffer"=dword:1
"BackBufferSupport"=dword:1
"SimultaneousCRT"=dword:1

"EnablePanel"=dword:1
"BiosInitPanel"=dword:0

;"PanelWidth"=dword:320                                 ; 기존의 해상도 주석처리
;"PanelHeight"=dword:1E0  
"PanelWidth"=dword:400                                 ; 새로운 해상도 적용
"PanelHeight"=dword:300

[HKEY_LOCAL_MACHINE\SYSTEM\GDI\ROTATION]
"Angle"=dword:0    ;0, 5A, B4, 10E;

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\lxvideo]
   "Prefix"="DDI"
   "Dll"="lxvideo.dll"
   "Order"=dword:0
   "Class"=dword:03
   "SubClass"=dword:00
   "ProgIF"=dword:00
   "VendorID"=multi_sz:"1022"
   "DeviceID"=multi_sz:"2081"

[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectX\DirectShow\Video Renderer]
"MaxBackBuffers"=dword:2

[HKEY_LOCAL_MACHINE\System\GDI\Drivers]
"Display"="lxvideo.dll"

; END HIVE BOOT SECTION

이렇게 수정한 후 빌드하면.. 간단히 적용이 된다는... ^^;

2007. 12. 17. 11:26

Windows CE BiosLoader에서 로고 바꾸기!



X86의 경우 Windows CE 부팅을 하기 위해서 Bios Loader라는 것을 사용을 한다.

BIOS LOADER를 이용해서 부팅을 해보면.. NK.bin의 로딩 중에 아래와 같이 검은 바탕화면에 Windows CE라는 로고가 나오는 것을 확인할 수가 있다.

사용자 삽입 이미지
X86의 BIOS LOADER

위  화면에서 WindowsCE라는 로고는 splash.bmx라는 파일 형식으로 되어 있고, BIOS LOADER동작시 .bmx파일을 읽어와서 화면에 뿌려주는 것이다.

C:\WINCE600\PLATFORM\CEPC\SRC\BOOTLOADER\BIOSLOADER\DISKIMAGES\BOOTDISK가 바로 splash.bmx라는 파일이 있는 위치이다.
다른 로고를 위해서는 splash.bmx 파일을 삭제하고, 변경하려는 로고를 splash.bmx라는 이름으로 첨부하면 된다. .bmp파일을 이용하여도 되지만... 용량의 압박이... ㅡㅡ;

.bmx라는 파일은 Platform Builder에서 제송하는 bincompress.exe라는 프로그램을 사용하면 된다.
bincompress.exe의 위치는 C:\WINCE600\PUBLIC\COMMON\OAK\BIN\I386이고, 사용법은 다음과 같다.
bincompress [옵션(/C, /D)] 원본파일 적용할 파일
/C : 원본파일(.bmp)를 적용할 파일(.bmx)로 압축한다.
/D : 원본파일(.bmx)를 적용할 파일(.bmp)로 압축을 해제한다.
ex)
C:\WINCE600\PUBLIC\COMMON\OAK\BIN\I386>bincompress /D
C:\WINCE600\PLATFORM\CEPC\SRC\BOOTLOADER\BIOSLOADER\DISKIMAGES\
BOOTDISK\splash.bmx todayis.bmp
Decompressing:100%
Input file size :4582 bytes
Output file size : 10678 bytes

C:\WINCE600\PUBLIC\COMMON\OAK\BIN\I386>

위의 예를 따라하게 되면 다음처럼 .bmx를 .bmp로 변경한 파일을 확인할 수 있다.
사용자 삽입 이미지

반대로 BIOS LOADER의 부팅시 화면을 바꾸려면, "/C"옵션을 사용해 원하는 .bmp이미지를 .bmx로 바꾸어주면 된다.

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.