레이블이 Tip인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Tip인 게시물을 표시합니다. 모든 게시물 표시

2008년 12월 24일 수요일

NetForce2 기종에 Qt 포팅 예제

얼마전 PMP를 구매했는데 OS가 Windows CE 입니다. :-< 그래도 요즘 관심있게 보고 있는 Qt를 한번 포팅해보기로 했는데 성공했습니다. 아래는 간략 설명입니다. Intro ----- I-STATION 의 NetForce2 기종에 Qt를 포팅한 예제입니다. 포팅하기위해서 사용된 환경은 다음과 같습니다. - OS: Windows XP - Windows CE 5.0: Standard Software Development Kit (SDK) - Qt: embedded Version 4.4.3 - Compiler: Visual Studio 2005 컴파일하는데 한시간 정도 걸리는데요, 어떻게 돌아가는지 맛배기로 보실분들을 위해서 필요한 파일들을 압축해 보았습니다. 이것을 만든 이유이기도 합니다. 설치는 압축된 파일을 NetForce2의 적당한 디렉토리(예: 하드디스크)에 풀면 다음과 같은 디렉토리가 있습니다. - demos, examples - qtlib-4.4.3 - wce50-MIPSII, wce50-MIPSII-FP - doc - util 우선 util/ystempath.cpl 을 기기의 Windows 디렉토리에 복사합니다. 그런다음 시작->제어판->System Path 를 실행합니다.
여기에 qtlib-4.4.3, wce50-MIPSII-FP 경로를 선택합니다. OK 를 누르면 재시작하라는 메시지창이 나타나는데요, 이때 OK 버튼을
누르지 말고 X 버튼을 눌러주세요. 프로그램의 버그인지 OK 를 누르면 기기가 먹통이 되더라구요. 설정이 끝나면 재시작을 합니다.

준비는 끝났고 demos 디렉토리에 있는 exe 파일을 실행하면 됩니다. fluidlauncher.exe 를 한번 실행해 보세요.

Enjoy & Fun!

- jypak (date in 2008.12.25)


short directory description
---------------------------

o From http://trolltech.com/downloads/opensource/appdev/win-ce-cpp

- demos <- C:\qt-embedded-wince-opensource-src-4.4.3\demos
(PreView: http://dist.trolltech.com/video/qtembedded44video.mov)

- examples <- C:\qt-embedded-wince-opensource-src-4.4.3\examples

- qtlib-4.4.3 <- C:\qt-embedded-wince-opensource-src-4.4.3\lib
(Ref: http://doc.trolltech.com/4.4/install-wince.html)

o From Windows CE 5.0: Standard Software Development Kit (SDK)
(http://www.microsoft.com/downloads/details.aspx?FamilyID=fa1a3d66-3f61-4ddc-9510-ae450e2318c3&DisplayLang=en)

- wce50-MIPSII <- C:\Program Files\Windows CE Tools\wce500\STANDARDSDK_500\Lib\MIPSII

- wce50-MIPSII_FP <- C:\Program Files\Windows CE Tools\wce500\STANDARDSDK_500\Lib\MIPSII_FP

NOTE. Both of two works, but I am not sure which is fast.

o From http://www.razamicroelectronics.com/products/Au1250.htm

- doc/Au1250 (remove for compressed file size :-)

o From http://www.geocities.co.jp/SiliconValley-Cupertino/2039/systempath.zip

- util/systempath.cpl

NOTE. Setup the Environment Variables on Pocket PC
INSTALL. just copy to "Windows" directory in Windows CE.


Other Useful program
--------------------
o Active Sync
http://www.microsoft.com/downloads/details.aspx?familyid=9FEC2CA0-A503-4F9C-8228-E424480EC807&displaylang=ko


Reference Site
--------------
o RMI Alchemy Au1250 CPU
http://www.razamicroelectronics.com/products/Au1250.htm

o Another Qt Porting blog
http://punbear.tistory.com/category/Programming/Qt

o Qt Documentation
http://doc.trolltech.com/4.4/index.html

o Another Qt Instruction
http://www.digitalfanatics.org/projects/qt_tutorial/index.html


Build Tip
-------
o Qt Porting

1. start in Visual Studio 2005 command window

2. cd $(qt-embedded source)

3. configure -platform win32-msvc2005 -xplatform wince50standard-mipsii-msvc2005

4. cd bin

5. setcepaths wince50standard-mipsii-msvc2005

6. cd ..

7. nmake

8. lib 디렉토리에 결과물들이 생김. demos 도 마찬가지...

9. Windows CE를 위한 Qt 실행환경 만들기
C:\Program Files\Windows CE Tools\wce500\STANDARDSDK_500\Lib\MIPSII_FP
$(qt-embedded source)/lib

10. 9번 결과물을 기기로 전송(Active Sync or USB)


o qmake
Command: C:\qt-embedded-wince-opensource-src-4.4.3\bin\qmake.exe -spec ..\..\..\mkspecs\wince50standard-mipsii-msvc2005 -win32 -o Makefile hellogl.pro

VS.

Command: C:\qt-embedded-wince-opensource-src-4.4.3\bin\qmake.exe -win32 -o Makefile calendar.pro

매번 -spec을 명령어 상에 실행하기 귀찮으면 QMAKESPEC 환경변수에 등록

이후는

1. start in Visual Studio 2005 command window

2. QMAKESPEC 환경변수 등록

3. qmake

4. nmake

5. nmake release

6. 실행 파일을 기기로 전송

enjoy & fun!

2007년 9월 3일 월요일

Setting up a CVS repository - the pragmatic way

소 잃고 외양간 고친다는 속담이 이 경우에 딱 들어맞는 경우인것 같습니다. cvs repository로 사용하는 linux(WowLinux Paran2)의 filesystem이 완전히 엉망이 되어서(fsck 명령어를 잘못 수행하는 바람에 -_-) 복구 불능이 되어버렸습니다. 복구해도 lost+found 디렉토리에 숫자로된 엄청난 양의 파일들만 뱉어내는 바람에 한숨을 쉬고 나니 지난 2년동안 모아 둔 저장소가 복구가 불가능 한 것을 알고 포기했습니다. 실은 VMWare로 동작하는 거라서 5개월 전 즈음해서 snapshot을 받은 것이 있어서 5개월 전으로 linux 전체 시스템을 복구하는 것은 가능했지만 문제는 CVS 를 백업해
두지 못해서 복구를 할수가 없었습니다. 불행중 다행인 것은 작업하기 전에 CVS를 모두 Checkout 을 해둔 터라 최종 소스는 모두 가지고 있었지만... 솔직히 나 자신이 멍청하다고 생각한 것이 checkout을 한 것을 가지고 CVS 저장소를 복구할 수 있을거란 생각을 여태 가지고 있었다는 사실이었습니다.

CVS is not backup tool!

마지 GNU is not UNIX! 란 슬로건이 생각이 나네요. 어찌되었든 CVS는 자체적인 백업툴을 가지고 있지않습니다. subversion은 이러한 CVS의 단점을 보완해서 백업툴과 같은 것을 가지고 있어서 이번에 다시 저장소를 꾸밀때 svn을 쓸까 cvs를 쓸까 주말내내 두가지 툴을 비교해보았는데 결론은 cvs를 쓰기로 했습니다. 이유는

1. file 단위로 비교하는 version control에 익숙해서
2. webcvs, cvsgraph 가 없으면 허전해서(svn은 websvn을 사용합니다.)
3. svn 사용법을 다른 사람에게 가르쳐주기 귀찮아서
4. svn 설치하기 귀찮아서

그런데 그냥 예전처럼 CVS를 사용하면 외양간 고치는 것 치고는 너무 부실한 것으로 보여서 약간은 BSD style 스럽게 사용해 보고자 하고 꾸며 보았습니다. webcvs가 없는 cvs는 상상도 하기 싫어하기 때문에 bsd 웹 사이트를 보면서 아마 이렇게 꾸미지 않았을까 상상하면서 저장소를 예쁘게(?) 꾸며봤습니다.

-. cvsweb.freebsd.org
-. cvsweb.netbsd.org

그리고 이번 기회에 cvs 저장소는 NetBSD 환경으로 완전히 이전해 버릴 작정입니다. 워낙 기존에 사용하던 linux를 관리하지 않아서 너무 난잡해져 ugly한 모습으로 변해 버려서 이 녀석은 Oracle DB 서버로만 그 기능을 할수 있게끔 할 계획입니다.


NetBSD 설치
-----------
현재 stable 버전인 3.1로 설치했습니다. 모두 선택해서 설치해도 300MB가 조금 넘는 컴팩트한 사이즈로 설치되고 X system도 사용이 가능하니 설치 만큼은 NetBSD가 현 UNIX계열중에는 최고인 것 같습니다. 추가로 설치는 사실상 VMWare로 설치를 한 것이라 설치 끝나고 snapshot 한번 해놓으면 끝.


CVS repository 설정
-------------------
1. cvs 관리 계정 생성
# groupadd -g 2401 cvs
# useradd -s /bin/csh -d /home/cvs -m -g cvs -u 2401 cvs

NOTE. pserver 서비스 포트가 2401이다 보니 전 이렇게 구성을 했습니다. 개인적으로 csh을 좋아하는 편이라 cvs 관리 계정은 이렇게 생성합니다.

2. 카테고리별 저장소 생성
# mkdir /var/cvs
# chown -R cvs:cvs /var/cvs
# chmod ug+rwx /var/cvs
# su - cvs
% cd /var/cvs
% mkdir ${projectcategory}-cvsroot
% chmod ug+rwx ${projectcategory}-cvsroot
% cd ${projectcategory}-cvsroot
% cvs -d /var/cvs/${projectcategory}-cvsroot init
(/var/cvs/${projectcategory}-cvsroot/CVSROOT가 생성됨)

USAGE. ${projectcategory} 는 원하는 프로젝트 카테고리 이름

NOTE. 전에는 가장 일반적인 다음 방법을 사용했었습니다.

# su - cvs
% cvs -d /home/cvs init
(/home/cvs/CVSROOT가 생성됨)

그런 다음 /home/cvs 밑에 모든 프로젝트가 위치하는 식으로 관리를 했었는데 쓰다보니 몇가지 불편한 점이 있었습니다. 가장 큰 사항은 접근 관리(access control)였는데 사내의 다른 인원(trusted user)에게는 저장소에 유저를 추가하는 방법으로 사용해도 큰 문제는 없었는데 저장소에 외부 인원(untrusted user)에게 공개할 때가 가장 짜증나면서도 번거롭기 그지 없었습니다. 저장소를 하나만 쓰다보니 write권한을 주면 해당 프로젝트 뿐 아니라 다른 프로젝트에 까지 write권한이 주어져서 아주 골치가 아프더군요. 제가 알기로 처음에는 cvs 저장소에 어떤 프로젝트 리스트가 있는지 알기가 상당히 어려워졌는데 요즘은 명령어 하나로 프로젝트 리스트를 얻어오는 방법이 있습니다. 어찌되었는 접근 관리로 인해서 프로젝트별로 저장소를 별개로 가져가는 것이 가장 좋은 방법으로 보이고 실제로 BSD 계열의 CVS를 보아도 현재 그렇게 사용하고 있습니다.
가장 단적으로 보여줄수 있는 것은 FreeBSD진영의 cvsweb.freebsd.org로 web으로 보면 다음처럼 꾸며져 있는 것을 알수 있습니다.

cvsweb.freebsd.org
-. CVSROOT/
-. CVSROOT-doc/
-. CVSROOT-ports/
-. CVSROOT-projects/
-. CVSROOT-src/
-. distrib/
-. doc/
-. ports/
-. projects/
-. src/
-. www/

대충 짐작을 하더라도 doc, ports, projects, src 프로젝트는 별개의 저장소를 가지고 있음을 알수 있습니다. 이에 반해 NetBSD 진영의 cvsweb.netbsd.org는 다음처럼 꾸며져 있습니다.

cvsweb.netbsd.org
-. htdocs/
-. othersrc/
-. pkgsrc/
-. src/
-. xsrc/

FreeBSD 진영과는 다르게 CVSROOT/ 가 보이질 않습니다. 이러한 구성은 cvsweb과 관련이 있는데 약간의 trick을 이용하면 원하는 프로젝트만 보이게끔 할수가 있습니다. 사실 이것 역시 조금의 삽질을 통해서 알아내었는데 어찌되었든 결론은 프로젝트 성격별로 CVS 저장소를 마련하는 것이 가장 좋은 방법입니다. 그리고 개별 저장소에 대해서 관리 계정을 다르게 가져가는 것도 가능하지만 제가 관리하는 CVS 저장소는 그렇게까지 복잡하지는 않아서 관리계정은 앞에서 언급한 cvs 유저 계정만으로 충분하다고 판단됩니다.

3. pserver 설정

Don't use pserver. use ssh instead.
ssh 사용을 위해서 /etc/rc.conf에 ssh=YES를 추가합니다.

# /etc/rc.d/sshd start


webcvs 설정
-----------
1. webcvs 설치
앞에서 살펴본 cvs 설정만으로 cvs 사용하는데는 아무런 지장이 없지만 cvs 파일에 대한 기록 내용이나 이전 파일과의 diff를 볼때 webcvs를 주로 사용하므로 전 무조건 설치합니다. 그리고 cvsgraph없는 webcvs는 김빠진 콜라와 같으므로 이것 역시 설치합니다. 따라서 webcvs를 설정하기 위해서는 다음으로 요약할수 있습니다.

apache + webcvs + cvsgraph

각 패캐지마다 의존하는 패키지가 있으므로 실제로는 이것보다 많습니다. 가장 손쉬운 방법은 의외로 소스를 통해 build하는 방법이므로 우선 pkgsrc를 checkout해서 make해서 모두 설치합니다.

2. webcvs 설정
linux에 webcvs를 설정할때는 손이 많이 갔었는데 NetBSD에 설치할때는 apache 패키지의 기본 설정 디렉토리에 cgi 및 설정 파일이 위치하게끔 webcvs 패키지가 꾸며져 있어서 별로 할 일이 없습니다.

-. /usr/pkg/etc/httpd/httpd.conf
손 봐야야 할 부분 없음

-. webcvs icons 파일 복사
# cd /usr/pkg/share/httpd/htdocs
(apache Document Root)
# mkdir icons
# cd icons
# cp /usr/pkg/share/examples/cvsweb/icons/* .

-. cvsweb.css 파일 복사
# cd /usr/pkg/share/httpd/htdocs
(apache Document Root)
# mkdir css
# cd css
# cp /usr/pkg/share/examples/cvsweb/css/cvsweb.css .

-. /usr/pkg/libexec/cgi-bin/cvsweb.cgi
손 봐야야 할 부분 없음

-. /usr/pkg/etc/cvsweb/cvsweb.conf
# vi /usr/pkg/etc/cvsweb/cvsweb.conf

@CVSrepositories 에 경로 추가
'local' => ['Local Repository', '/home/cvs'],

-. /usr/pkg/etc/cvsgraph.conf
손 봐야야 할 부분 없음



프로젝트 추가
-------------
프로젝트 추가는 항상 CVS 저장소의 cvs 관리 계정으로 수행하고, 프로젝트는 원하는 프로젝트 카테고리 하위에 추가하는 것으로 하였습니다.

# mkdir /var/cvswork
# chown -R cvs:cvs /var/cvswork
(cvs 관리 계정에 대한 work 디렉토리 생성)
# su - cvs
% cd /var/cvswork/
% mkdir ${project}
% cd ${project}
% ... add source files...
% cvs -d /var/cvs/${projectcategory}-cvsroot import -m " " ${project} ${project} initial
% ...import 확인...
% cd /var/cvswork
% rm -rf ${project}
% cd
% ln -s /var/cvs/${projectcategory}-cvsroot/${project} ${project}

USAGE. ${projectcategory} 는 원하는 프로젝트 카테고리 이름
${project} 는 원하는 프로젝트 이름


CVS test
--------
위의 단계까지 하였으면 우선 cvs 관련한 설정은 모두 끝난 것으로 보이는데 이제는 test하는 것만 남았습니다. 카테고리명은 test-cvsroot로 하고 프로젝트명은 test로 하였습니다.

1. test 카테고리 저장소 생성
# su - cvs
% cd /var/cvs
% mkdir test-cvsroot
% chmod ug+rwx test-cvsroot
% cd test-cvsroot
% cvs -d /var/cvs/test-cvsroot init
(/var/cvs/test-cvsroot/CVSROOT 생성 확인)

2. test 프로젝트 생성
# su - cvs
% cd /var/cvswork
% mkdir test
% cd test
% cvs -d /var/cvs/test-cvsroot import -m " " test test initial

No conflicts created by this import

% cd /var/cvswork
% rm -rf test

3. test 프로젝트를 webcvs에 등록
# su - cvs
% cd
% ln -s /var/cvs/test-cvsroot/CVSROOT CVSROOT-test
% ln -s /var/cvs/test-cvsroot/test test

4. cvs 사용 계정으로 checkout 및 commit 테스트
% ... cvs 사용 계정으로 로그온 ...
% cd
% mkdir work
% cd work
% setenv CVSROOT /var/cvs/test-cvsroot
% cvs co test
% vi hello.c
#include

int main(void)
{
printf("Hello, World!\n");
return 0;
}
%
% cvs add hello.c
cvs add: scheduling file `hello.c' for addition
cvs add: use 'cvs commit' to add this file permanently
% cvs commit -m "add hello.c file" hello.c
RCS file: /var/cvs/test-cvsroot/test/hello.c,v
done
Checking in hello.c;
/var/cvs/test-cvsroot/test/hello.c,v <-- hello.c initial revision: 1.1 done % 5. remote machine에서 ssh를 통한 접근 테스트 % setenv CVSROOT :ext:${username}@${cvsserverip}:/var/cvs/test-cvsroot % setenv CVS_RSH ssh % cd work % cvs co test The authenticity of host 'xxx.xxx.xxx.xxx' can't be established. RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'xxx.xxx.xxx.xxx' (RSA) to the list of known hosts. Password: <...Input Password...>
cvs checkout: Updating test
U test/hello.c
%

USAGE. ${username}은 cvs 사용자 ID, ${cvsserverip}는 CVS Server IP


CSS 적용전


CSS 적용후

프로젝트 등록후


cvsgraph



요약
----
CVS 저장소를 프로젝트 성격별로 하나씩 만들어서 카테고리를 만들고 그 하위에 프로젝트를 추가하는 방식을 사용하였습니다. 그리고 /home/cvs는 단지 해당하는 저장소의 링크를 추가하는 방식으로 웹을 통하여 사용자가 볼수 있도록 허용하였습니다. 즉, 보여주고 싶은 프로젝트만 골라서 보여주는 방식을 사용했습니다. 아마 netbsd의 webcvs가 CVSROOT는 보이지 않고 단지 프로젝트(htdocs, othersrc, pkgsrc, src, xsrc) 만 보이는 것은 이런 방법을 쓰지 않았나 추측해봅니다. 추측을 더욱 가능하게 한 것은 freebsd의 webcvs를 보면 더욱 확신이 드는데 CVSROOT를 CVSROOT-doc 등으로 이름을 바꾸게 되면 cvs 저장소가 제대로 인식을 하지 않는 것으로 알고 있고 또 저렇게 한 화면에 여러 cvs 저장소를 보이게 할려면 dummy directory에 저장소를 symbolic link시키는 방식으로 해야지만 가능합니다.

이렇게 했을때 딱 하나가 불가능한데 cvspserver가 그것입니다. cvspserver 설정시 --allow-root
옵션에서 CVSROOT를 설정하게 되어있는데 이와같이 여러개의 CVS 저장소를 쓰는 경우에는 하나만 사용이 가능합니다.

CVS 백업은 저장소 단위로 가능할 것으로 보이고 저장소별로 remote machine에 sync하는 방식도
가능 할 것으로 보입니다.


Reference
---------
-. Setting up a CVS repository - the FreeBSD way
(http://www.freebsd.org/doc/en_US.ISO8859-1/articles/cvs-freebsd/index.html)
-. cvsweb.freebsd.org
-. cvsweb.netbsd.org