QT 포팅

Mokwon Univ 2008. 8. 16. 17:07
http://blog.naver.com/swind1980/80027239724
 
 블로그 > zzang8713님의 블로그
 http://blog.naver.com/zzang8713/120023319720 
Qtopia-2.1.1 설치 매뉴얼 (2005 . 5 . 6)
이문서는 최민석(joy21c@gmail.com)님꼐서 쓰신글입니다 !

1. 범용 PC(x86)에 설치
범용 PC는 x86계열의 시스템이다.
1.1 설치 환경
- CPU : P-4 1.5GHz
- RAM : 384MB
- HDD : 40GB
- O/S : Redhat9(kernel version : 2.4.20-8)

1.2 필요한 라이브러리
- e2fsprogs
- jpeg
위 라이브러리들은 이미 설치되어 있으므로 현재로서는 다시 설치 할 필요가 없다.
그러나 임베디드 장치에 Qtopia를 설치하기 위해서는 장치에 맞게 컴파일해서 설치해 주어야 한다.

1.3 필요한 소스
- Tmake 1.13(또는 그 이상 버전)
- Qt/X11 3.3.x
- Qt/X11 2.3.2
- Qt/Embedded 2.3.10(또는 그 이상 버전, 반드시 2.3버전대의 소스가 필요)
- Qtopia 2.x
여기서 사용된 소스는 특정버전이 필요한 경우를 제외하고는 최신버전을 사용하였다.
사용된 버전은 아래와 같다.
- Tmake 1.13
- Qt/X11 3.3.4
- Qt/X11 2.3.2
- Qt/Embedded 2.3.10
- Qtopia 2.1.1

1.4 압축 풀기
압축을 풀고 알아보기 쉽게 디렉토리 명을 변경한다. Qt/Embedded와 Qtopia는 임베디드 장치에 포팅 시
다시 컴파일 해야하므로 범용 PC용과 임베디드 장치용으로 디렉토리를 분리시켜 놓는 것이 좋다.
디렉토리 명에 x86이란 접미어를 붙인다.
1) Tmake 1.13
# tar zxvf tmake-1.13.tar.gz
2) Qt/X11 3.3.4
# tar zxvf qt-x11-free-3.3.4.tar.gz
# mv qt-x11-free-3.3.4 qt-x11-3.3.4
3) Qt/X11 2.3.2
# tar zxvf qt-x11-2.3.2.tar.gz
# mv qt-2.3.2 qt-x11-2.3.2
4) Qt/Embedded 2.3.10
# tar zxvf qt-embedded-2.3.10.tar.gz
# mv qt-2.3.10 qt-embedded-2.3.10-x86
5) Qtopia 2.1.1
# tar qtopia-free-source-2.1.1.tar.gz
# mv qtopia-free-2.1.1 qtopia-2.1.1-x86

1.5 환경변수 설정
다음의 환경변수를 설정한다.
TMAKEDIR : TMake가 설치된 경로
DQTDIR : Qt/X11 3.3.4 소스 경로
QT2DIR : Qt/X11 2.3.2 소스 경로
QTEDIR : Qt/Embedded 2.3.10 소스 경로
QPEDIR : Qtopia 2.1.1 소스 경로
   여기서 작업디렉토리는 /Work/qt 이므로 다음과 같이 설정했다.
# export TMAKDIR=/Work/qt/tmake-1.13
# export DQTDIR=/Wrok/qt/qt-x11-3.3.4
# export QT2DIR=/root/Wrok/qt/qt-x11-2.3.2
# export QTEDIR=/root/Work/qt/qt-embedded-2.3.10-x86
# export QPEDIR=/root/Work/qt/qtopia-2.1.1-x86
이 환경변수들은 프로그램 컴파일 시 영향을 미치므로 정확히 설정해야 한다.

1.6 Build
configure 시 질문이 나오면 yes를 입력한다.
1) Qt/X11 3.3.4
# cd $DQTDIR
# export QTDIR=$DQTDIR
# export PATH=$QTDIR/bin:$PATH
# export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
# ./configure -fast -thread
# make sub-src
# cd tools/linguist/lrelease
# make
# cd ../lupdate
# make
# cd ../../designer/uilib
# make
# cd ../uic
# make

2) Qt/X11 2.3.2
# cd $QT2DIR
# export TMAKEPATH=$TMAKEDIR/lib/linux-g++
# export QTDIR=$QT2DIR
# export PATH=$QTDIR/bin:$PATH
# export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
# ./configure -no-xft
# make
# mkdir $QTEDIR/bin
# cp bin/uic $QTEDIR/bin/

3) QVfb
# cd $QTEDIR/tools/qvfb
# tmake -o Makefile qvfb.pro
# make
# mv qvfb $QTEDIR/bin/
4) Qt/Embedded

# cd $QTEDIR
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
# export QTDIR=$QTEDIR
# export PATH=$QTDIR/bin:$PATH
# export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
# cp $OPEDIR/src/qt/qconfig-qpe.h src/tools/
# ./configure -system-jpeg -no-xft -qconfig qpe -qvfb -depths 4,8,16,32
Phone Device용으로 Qtopia를 Build하기 위해서는 -keypad-mode 옵션을 줘야한다.
# make sub-src

5) Qtopia
# cd $QPEDIR
# export QTDIR=$QTEDIR
# export PATH=$QTDIR/bin:$PATH
# ./configure -edition pda -no-qtopiadesktop -prefix /Work/qt/opt-x86/Qtopia
# make
# make install
Install를 실행하면 /Work/qt/opt-x86/Qtopia 디렉토리에 빌드가 완료된 Qtopia가 설치된다.

1.7 실행
1) 환경변수를 설정
# export QT2DIR=/root/Work/qt/qt-x11-2.3.2
# export QPEDIR=/opt/Qtopia
# export QTDIR=$QPEDIR
# export PATH=$QTDIR/bin:$QTEDIR/bin:$PATH
# export LD_LIBRARY_PATH=$QTDIR/lib:$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH
QT2DIR과 QTEDIR의 패스와 라이브러리를 설정하는 이유는 qvfb의 실행 때문이다.
qvfb의 실행파일은 QTEDIR/bin에 있고 실행에 필요한 라이브러리는 QT2DIR/lib에 있다.
QTDIR를 설정하지 않으면 폰트를 찾지 못해 Qtopia가 실행되지 않는다.
LD_LIBRARY_PATH를 설정하지 않으면 Qtopia나 Applicaton이 실행되지 않는다.
만약, e2fsprogs 라이브러리와 jpeg 라이브러리가 패스가 설정된 다른 디렉토리에 있다면 Qtopia는
실행되지만 Application은 실행되지 않는다. 또는 e2fsprogs 라이브러리와 jpeg 라이브러리가 Qtopia/lib
디렉토리 내에 있다면 Qtopia 자체가 실행되지 않는다.
현재 Redhat9에서 설치 할 경우에는 e2fsprogs 라이브러리와 jpeg 라이브러리에 대해서 신경 쓰지
않아도 되지만 임베디드 장치에 포팅 할 경우에는 이 두 라이브러리가 중요하므로 주의를 기울여한다.

2) QVfb 및 Qtopia 실행
# qvfb -width 가로크기 -height 세로크기 &
qvfb가 실행이 안되면 qvfb 실행파일이 있는 디렉토리가 패스 설정이 되어있는지 확인한다.
정상적으로 qvfb가 실행되었으면 Ctrl+C를 누른 후
# qpe

2. 임베디드 장치(ARM)에 설치
임베디드 장치는 ARM계열의 시스템이다.

2.1 설치 장치
- 한백전자 EMPOS-II
- kernel version : 2.4.19-rmk4-pxa2-empx1

2.2 크로스 컴파일러 설치
크로스 컴파일러는 한백전자에서 제공되는 2.95.3버전을 사용했다.

1) /usr 디렉토리 밑에 압축을 푼다.
# tar zxvf cross-tools.tgz

2) cross-tools/arm-linux 디렉토리로 이동해서 Symbolic Link를 만든다.
# cd cross-tools/arm-linux
# mv include/* ../include
# rm -rf include
# ln -s ../include include
# mv lib/* ../lib
# rm -rf lib
# ln -s ../lib lib
# mv shared/* ../shared
# rm -rf shared
# ln -s ../shared shared
그리고 패스 설정을 한다.
# export PATH=/usr/cross-tools/bin:$PATH

2.3 필요한 라이브러리 Arm용으로 컴파일

1) e2fsprogs
e2fsprogs 라이브러리를 http://e2fsprogs.sourceforge.net/에서 다운받는다.
다운 받은 파일의 압축을 풀고 설치한다.
# tar zxvf e2fsprogs-1.36.tar.gz
# cd e2fsprogs-1/36
# CC=arm-linux-gcc ./configure --host=arm-linux --build=i686 --prefix=/usr/cross-tools
--enable-elf-shlibs
# make
# make install
# make install-libs

2) jpeg
jpeg 라이브러리를 http://www.ijg.org/에서 다운받는다.
다운 받은 파일의 압축을 풀고 설치한다.
# tar zxvf jpegsrc.v6b.tar.gz
# cd jpeg-6b
# CC=arm-linux-gcc ./configure --host=arm-linux --target=arm-linux --build=i686
--prefix=/usr/cross-tools --enable-shared
여기까지 한 후 Makefile를 확인 및 수정한다.
# vi Makefile
CC= arm-linux-gcc
AR= arm-linux-ar rc
AR2= arm-linux-ranlib
위 세 가지 항목이 위와 같이 설정되어 있는지 확인하고 안 되어 있다면 위와 같이 수정한 후 컴파일 한다.
# make
# make install
make 시 ./ld를 찾을 수 없다는 오류가 발생하면 위의 2.2에 따라 다시 크로스 컴파일러를 설치한 후
configure부터 다시 한다.

2.4 필요한 소스
- Qt/Embedded 2.3.10
- Qtopia 2.1.1
Tmake, Qt/X11 3.3.4, Qt/X11 2.3.2는 범용 PC에 설치된 것을 그대로 사용한다.

2.5 압축 풀기
디렉토리 명에 arm이란 접미어를 붙인다.

1) Qt/Embedded 2.3.10
# tar zxvf qt-embedded-2.3.10.tar.gz
# mv qt-2.3.10 qt-embedded-2.3.10-arm

2) Qtopia 2.1.1
# tar qtopia-free-source-2.1.1.tar.gz
# mv qtopia-free-2.1.1 qtopia-2.1.1-arm

2.6 환경변수 설정
다음의 환경변수를 설정한다.
TMAKEDIR : TMake가 설치된 경로
DQTDIR : Qt/X11 3.3.4 소스 경로
QT2DIR : Qt/X11 2.3.2 소스 경로
QTEDIR : Qt/Embedded 2.3.10 소스 경로
QPEDIR : Qtopia 2.1.1 소스 경로
   여기서 작업디렉토리는 /Work/qt 이므로 다음과 같이 설정했다.
# export TMAKDIR=/Work/qt/tmake-1.13
# export DQTDIR=/Wrok/qt/qt-x11-3.3.4
# export QT2DIR=/root/Wrok/qt/qt-x11-2.3.2
# export QTEDIR=/root/Work/qt/qt-embedded-2.3.10-arm
# export QPEDIR=/root/Work/qt/qtopia-2.1.1-arm
QTEDIR과 QPEDIR이 범용 PC에서 설치할 때와 달라진다.
이 환경변수들은 프로그램 컴파일 시 영향을 미치므로 정확히 설정해야 한다.

2.7 Build 전 해야 할 일
빌드하기전 몇 가지 해야 할 일이있다.
우선 $QPEDIR/src/libraries/qtopia 디렉토리에 보면 custom-linux로 시작하는 파일들이 있다.
그 파일들을 보면 다음과 같은 소스파일들이 있다.
custom-linux-cassiopeia-g++.cpp
custom-linux-generic-g++.cpp
custom-linux-innovator-g++.cpp
custom-linux-ipaq-g++.cpp
custom-linux-sharp-g++.cpp
custom-linux-x86-g++.cpp
Qtopia Configuration 시 custom-qtopia.cpp라는 Symbolic Link가 생성되는데 이 Symbolic Link는
위 파일들 중 하나와 연결된다.
범용 PC의 경우 custom-linux-generic.cpp와 연결된다.

2.8에 보면 Qtopia configure 옵션에 linux-arm-g++를 준다.
이 옵션을 주면 custom-qtopia.cpp는 custom-linux-arm-g++.cpp와 연결된다.
그런데 Qtopia 소스에는 custom-linux-arm-g++.cpp 라는 파일이 없다. 따라서 다음과 같이 직접
이 파일을 만들어 줘야한다.
# cp $QPEDIR/src/libraries/qtopia/custom-linux-generic-g++.h
QPEDIR/src/libraries/qtopia/custom-linux-arm-g++.h
# cp $QPEDIR/src/libraries/qtopia/custom-linux-generic-g++.cpp
QPEDIR/src/libraries/qtopia/custom-linux-arm-g++.cpp
그리고 $QPEDIR/etc 디렉토리를 보면 다음과 같은 파일들이 있다.
defaultbuttons-generic.conf
defaultbuttons-ipaq.conf
defaultbuttons-sharp.conf
여기에도 defaultbuttons.conf 이라는 Symbolic Link가 생성된다.
범용 PC의 경우 defaultbuttons-generic.conf와 연결된다.
마찬가지로 Qtopia configure 옵션에 linux-arm-g++을 주면 defaultbuttons-arm.conf와
연결되는데 여기에도 defaultbuttons-arm.conf 이라는 파일이 없으므로 다음과 같이 직접
만들어 줘야한다.
# cp $QPEDIR/etc/defaultbuttons-generic.conf $QPEDIR/etc/defaultbuttons-arm.conf
임베디드 장치에 맞게 소스를 수정할 사항이 있으면 수정한다. 여기서는 EMPOS-II의 Touch Screen사용
을 위해 업체에서 제공하는 정보를 참조하여 소스 코드를 수정했다.

2.8 Build

1) Qt/Embedded
# cp $QT2DIR/lib/libqt.so* $QTEDIR/lib/
# mkdir $QTEDIR/bin/
# cp $QT2DIR/bin/uic $QTEDIR/bin/
# cd $QTEDIR
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
# export QTDIR=$QTEDIR
# export PATH=$QTDIR/bin:$PATH
# export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
# cp $OPEDIR/src/qt/qconfig-qpe.h src/tools/
# ./configure -xplatform linux-arm-g++ -system-jpeg -no-xft -qconfig qpe -no-qvfb
-depths 4,8,16,32
Phone Device용으로 Qtopia를 Build하기 위해서는 -keypad-mode 옵션을 줘야한다.
# make sub-src

5) Qtopia
# cd $QPEDIR
# export QTDIR=$QTEDIR
# export PATH=$QTDIR/bin:$PATH
# ./configure -xplatform linux-arm-g++ -edition pda -no-qtopiadesktop
-prefix /Work/qt/opt-arm/Qtopia
# make
# make install
Install를 실행하면 /Work/qt/opt-arm/Qtopia 디렉토리에 빌드가 완료된 Qtopia가 설치된다.

2.9 Build 후 해야 할 일
Build가 완료되었으면 장치에 퓨징하기 전 e2fsprog 라이브러리와 jpeg 라이브러리를 Qtopia에 포함시켜야
한다.
퓨징할 장치에서 이 라이브러리들을 지원해준다면 이 과정은 생략해도 된다.
# cp /usr/cross-tools/lib/libuuid.* /Work/qt/opt-arm/Qtopia/lib/
# cp /usr/cross-tools/lib/libjpeg.* /Work/qt/opt-arm/Qtopia/lib/

2.10 실행
Qtopia를 장치에 포팅 후 다음과 같이 실행한다.

1) 환경변수를 설정
Empos-II에서는 Qtopia가 /jffs/Qtopia 디렉토리에 들어가게 된다.
# export QPEDIR=/jffs/Qtopia
# export QTDIR=$QPEDIR
# export PATH=$QTDIR/bin:$PATH
# export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

2) Qtopia 실행
# qpe &
Qtopia 최초 실행 시 환경설정을 하게 되는데 설정된 환경설정 파일들은 홈 디렉토리 내에 저장된다.
홈 디렉토리가 램 디스크 상에 존재한다면 재부팅 시 환경설정 파일들이 없어지므로 다시 환경설정을
해야만 한다.
따라서 홈 디렉토리에 환경설정 파일들을 저장하도록 램 디스크를 수정해야 한다.

3. QT/X11 3.3.x 설치
Qt/X11 2.3.2에 있는 Qt Designer는 Qtopia 2.1.1의 Application Project를 읽지 못한다. 따라서 Qt/X11 3.3.4
에 있는 Qt Designer를 설치해서 사용해야 한다.
이것은 이미 리눅스에 패키지로 설치되어 있을 수도 있다.

3.1 필요한 소스
- Qt/X11 3.3.x

3.2 압축 풀기
# tar zxvf qt-x11-free-3.3.4.tar.gz
# mv qt-x11-free-3.3.4 qt-x11-3.3.4

3.3 환경변수 설정
다음의 환경변수를 설정한다.
QTDIR : Qt/X11 3.3.4를 설치 할 디렉토리
PATH : Qt/X11 3.3.4 실행파일 디렉토리
MANPATH : Qt/X11 3.3.4 MAN Page 디렉토리
LD_LIBRARY_PATH : Qt/X11 3.3.4 Qt 라이브러리 디렉토리
다음과 같이 환경파일을 수정한다.
#vi ~/.bash_profile
QTDIR=/usr/local/qt
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH MANPATH LD_LIBRARY_PATH

3.3 빌드
# ./configuer
# make
Posted by 용학도리
,