본문 바로가기

Programming/임베디드

QT Embedded 설치하기

1. 개요
 
이 문서는 QT 설치에 대한 전반적인 내용을 포함한다.

configuration 및 환경 설정은 위의 명시된 환경에 특성화되어 있다.
 
qt 설치 문서는 크게 세가지 환경을 구축하는 것을 설명한다.


QT/X11을 설치하여 qvfb를 생성한다.
QT/Embedded를 x86용으로 컴파일하여 실제 타겟에 올라갈 애플리케이션을 호스트에서 테스트 할 수 있게 한다.
QT/Embedded를 ARM용으로 컴파일하여 코드를 타깃용으로 크로스 컴파일 한다.

따라서 먼저 2개의 파일이 필요하다.
- qt-x11-free-3.3.5.tar.gz
    (
ftp://ftp.trolltech.com/qt/source/qt-x11-free-3.3.5.tar.gz)
- qt-embedded-free-3.3.5.tar.gz
    (
ftp://ftp.trolltech.com/qt/source/qt-embedded-free-3.3.5.tar.gz)

다운받은 파일을 설치할 위치는 /root/qt로 하겠다. 즉 /root/qt 디렉토리 내에 다운받은 두개의 파일을 옮겨 놓는다.

 

2. QT/X11 설치

사실상 QT/X11을 설치하는 이유는 단지 qvfb를 설치하기 위해서이다.
QVFB(Qt Virtual Frame Buffer)는 호스트 환경에서 프레임 버퍼를 사용할 수 있게 하는 가상 툴이다. QT/Embedded는 X 환경이 아닌 프레임 버퍼를 사용하므로 이를 X상에서 실행하기 위해서는 가상 프레임 버퍼 툴이 필요한 데, 이것이 QVFB이다.

따라서 QT/X11의 설치는 비교적 간단하다.
QT는 specific한 설치 위치는 정해진 것이 아니고, 컴파일한 위치에 설치가 되며 추후 profile에 path를 설정해주어야 한다.

- 압축을 푼다.

# cd /root/qt
# tar xvzf qt-x11-free-3.3.5.tar.gz

- 생성된 디렉토리의 이름을 바꾸어준다(정해진 것은 아니다).
# mv qt-x11-free-3.3.5 qtx-3.3.5

- 환경 설정을 해준다.
/root/.bash_profile을 열어서 다음과 같은 부분을 추가한다.

# vi .bash_profile

# for using QT
QTDIR=/root/qt/qtx-3.3.5
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/doc/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export QTDIR PATH MANPATH LD_LIBRARY_PATH

- 현재 설정을 적용한다.
# source .bash_profile

- 설정한 패스가 적용되었는지 echo 명령어로 테스트한다.

# echo $QTDIR

# echo $ LD_LIBRARY_PATH

 

- 환경 설정이 다 되었으면 configure를 실행한다.

# cd qt/qtx-3.3.5
# ./configure
라이센스를 물어볼 때 'yes'라고 입력하면 Makefile을 생성한다.

- 컴파일한다. 이때 컴파일 시간이 오래 걸릴 수가 있으므로 필요한 것만 컴파일한다.
Makefile : 14 line 수정한다.
all: symlinks src-qmake src-moc sub-src sub-tools (뒤의 것은 삭제)
# make

컴파일이 끝나고 Enjoy Qt 어쩌고 나오면 정상적으로 설치가 된 것이다.


-----------------------------------------------------------------------
# 오류 발생에 대해서...
-----------------------------------------------------------------------
make 과정 중 오류가 2개 뜨며 종료되면 메시지를 확인한다. 메시지를 확인하면  g++ 프로그램이 설치되어 있지 않아서 발생하는 오류일 수도 있고, freetype.h를 찾을 수 없다고 오류가 뜰 수도 있다. g++이 없다면 설치해 주어야 하며, freetype.h 파일을 찾을 수 없다면 다음과 같은 과정으로 해결한다. /usr/include 폴더에 freetype1, freetype2의 폴더는 존재하는 데 freetype 폴더는 존재하지 않을 것이다. 이때 freetype2/freetype 폴더를 소프트 링크시킨다.
# ln -s /usr/include/freetype2/freetype /usr/include/freetype

 

3. QT Virtual Framebuffer(qvfb) 설치
   
<주의사항>
다음 단계에서 설치할 QT/Embedded 소스에도 같은 qvfb가 존재하지만 이 qvfb는 올바르게 동작하지 않는다. 그래서 반드시 QT/X11용으로 컴파일된 것을 사용해야 한다.


- qvfb는 따로 설치 프로그램이 존재하는 것이 아니라 qt-x11을 설치하면 자동으로 설치된다. 그럼 qvfb가 설치되어 있는 디렉토리로 이동하여 메이크시킨다.

# cd /root/qt/qtx-3.3.5/tools/qvfb/
# make


- 설치가 모두 되었다면 실행시켜 본다. 실행 옵션은 640*480 크기에 컬러 수는 32 비트이다.

# ./qvfb -width 640 -height 480 -depth 32 &

이렇게 했을 때 자그마한 화면이 출력되면 정상적으로 설치가 된 것이다.


- 이제 qvfb 프로그램의 위치를 PATH에 저장한다.

# cp /root/qt/qtx-3.3.5/tools/qvfb /usr/local/bin (qvfb를 어디에서나 실행할 수 있도록 /usr/bin에 복사한다)


-----------------------------------------------------------------------
# 알아두기
-----------------------------------------------------------------------
 * Framebuffer
Framebuffer는 원래 VESA라고 하는 비디오 장치를 생산하는 업체들의 표준 협의회라 할 수 있는 단체에서 정한 표준이다. 대략 97년도 정도 이후로 나오는 모든 비디오 장치들은 이 Framebuffer 장치 사용이 가능하다. Framebuffer 장치는 그래픽 하드웨어를 위해 분리된 것이다. 그것은 어떤 비디오 하드웨어의 Framebuffer를 말하기도 하고, 그래픽 하드웨어에 접근하기 위해 허락된 응용 프로그램을 말하기도 한다. 소프트웨어는 저 수준 장치에 대해 어떤 것도 알 필요가 없고, 그러므로 소프트웨어 개발시에 각각의 다른 비디오 하드웨어에 따라서 다르게 개발할 필요가 없다.

* qvfb 프로그램
임베디드 기기에서는 X를 지원하지 못한다. X를 지원하기에는 기기의 성능이 부족하기 때문이다. 그래서 기기에서는 비디오 출력을 위해서 비디오 카드의 정보와는 독립적인 프레임 버퍼를 사용한다. 그래서 우리가 개발 HOST에서 QT를 이용해서 임베디드 기기용 애플리케이션을 개발할 때에는 이 애플리케이션을 Framebuffer상에서 실행시켜 봐야 한다. 이때 쓰이는 것이 바로 qvfb 프로그램이다. qvfb는 X상에서 Framebuffer를 구현해 주는 역할을 한다.


- frame buffer 설정
리눅스 부팅시 frame buffer를 사용할 수 있도록 설정해준다.
대부분의 배포판(redhat, fedora)에서는 기본 설정으로 프레임 버퍼를 사용할 수 있으므로 재 컴파일할 필요는 없다.

[root@localhost qte-3.3.3]# vi /etc/grub.conf
title Fedora Core (2.6.13-1.1532_FC4)
    root (hd0,1)
    kernel /vmlinuz-2.6.13-1.1532_FC4 ro root=/dev/VolGroup00/LogVol00 vga=0x317 rhgb quiet
    initrd /initrd-2.6.13-1.1532_FC4.img

위와 같이 현재의 설정에 vga=0x317을 추가해주고 재부팅한다. 재부팅시 펭귄 로고가 나오면 정상적으로 동작하는 것이다.


4. QT/Embedded (x86) 설치

QT 임베디드를 host용으로 설치한다.

- /root/qt/에 압축을 푼다.
# tar zxvf qt-embedded-free-3.3.5.tar.gz


- 디렉토리 이름을 변경한다
#  mv qt-embedded-free-3.3.3 qte-3.3.5

- 환경 설정을 변경한다.

/root/.bash_profile을 열어서 QTDIR만을 수정한다.
# vi .bash_profile

QTDIR=/root/qt/qte-3.3.5

- 환경 설정이 다 되었으면 configure를 실행한다.
이부분은 호스트에 따라서 다르지만, Fedora Core 4에서는 이렇게 하면 실행된다.
# cd qte-3.3.5
# ./configure -shared -thread -no-cups -qvfb -no-ipv6 -qt-mouse-linuxtp
실행 뒤에 라이센스 동의를 물어올 때 'yes'라고 답하고, depth를 물으면 32 bits를 선택하여 Makefile을 생성한다.

- 컴파일한다.
# make

- 테스트
# qvfb -width 640 -height 480 -depth 32 &
Using display 0

다른 터미널을 띄워서
# cd $QTDIR/examples/hello
# ./hello -qws

qvfb에 창이 뜨고 hello, world가 움직이면 정상적으로 동작하는 것이다. examples/hello가 없다고 나오면 make로 컴파일 해준다. qvfb를 실행시킨 터미널에서
Semop unlock failure 식별자 제거됨
Semop lock failure 식별자 제거됨
Semop unlock failure 식별자 제거됨
Semop lock failure 식별자 제거됨
메세지가 반복해서 나오면 /etc/에서 qt로 시작하는 모든 파일들을 지워준다.
# rm -rf /etc/qt*
다시 실행한다.

 

-----------------------------------------------------------------------
# 알아두기
-----------------------------------------------------------------------
* Feature란
    Minmal(630KB)
    Small(960kB)
    Medium(1.5MB)
    Large(3MB)
    Everything(5MB)
    Your own local configuration
이렇게 6개를 지원한다. 그래서 각 임베디드 기기의 용량에 맞는 컴파일 모델을 선택할 수 있다. 6번은 $QTDIR/src/tools/qconfig-local.h파일에서 자신의 작업 환경에 맞도록 customaize할 수 있다. 실제 작업을 할 때에는 필요한 최소한 용량만을 사용해야 하기 때문에 6번으로 하는 것이 일반적이다.


5. QT/Embedded (ARM) 설치

QT/Embedded를 ARM용으로 설치하기 위해서는 cross-compiler(혹은 toolchain)가 있어야 한다. 툴 체인의 설치에 대해서는 생략 하겠다. 툴 체인의 위치는 /usr/arm-linux로 지정했다.

-압축을 푼다
# tar xvzf qt-embedded-free-3.3.5.tar.gz

- 디렉토리 이름을 변경한다
#  mv qt-embedded-free-3.3.5 qta-3.3.5
다시 한번 말하지만 디렉토리 이름은 상관이 없다. 이번 경우는 qt/embedded의 arm용 이라서 그냥 qta-3.3.3이라고 한 것이다.

- 환경 설정을 변경한다.

/root/.bash_profile을 열어서 QTDIR만을 수정한다.
# vi .bash_profile

QTDIR=/root/qt/qta-3.3.5

QT/X11 사용:                       # export QTDIR=/root/qt/qtx-3.3.5
QT/Embedded(x86)사용:       # export QTDIR=/root/qt/qte-3.3.5
QT/Embedded(ARM)사용:     # export QTDIR=/root/qt/qta-3.3.5

이렇게 해주면 된다.

- configure를 실행한다.
옵션은 다양할 것이다. 아래는 하이버스의 XHYPER255B 보드에서 동작한다.
# cd /root/qt/qta-3.3.5

# ./configure -embedded ipaq -shared -depths 16 -no-cups -qt-libjpeg -qt-mouse-linuxtp
라이센스는 'yes'를 하고 depth는 32를 선택한다.

- 컴파일한다.
# make

끝나면 설치가 성공한 것이다. 간단한가..

- 보드에 포팅
보드에 보팅하는 방법은 각각 보드마다 다르므로 해당 보드 제조사에 가면 자세한 자료가 있다.

하이버스:    
www.hybus.net
메리테크:     www.meritech.co.kr (여긴 잘 없다)
휴인스:       
www.huins.com
한백전자:    www.hanback.co.kr
FALINUX:    www.falinux.com

 

6. tmake 설치
 
- tmake-1.13.tar.gz 파일을 설치할 디렉토리로 옮기고 압축을 푼다.

# mv tmake-1.13.tar.gz /usr/local

# tar tmake-1.13.tar.gz


- 이제 tmake-1.13 디렉토리가 생겼을 것이다. 설치에서 컴파일은 필요없고, 환경 설정만 해주면 된다.
/root/.bash_profile 파일에 아래 내용을 추가한 뒤 적용시킨다.


TMAKEPATH=/usr/local/tmake-1.8/lib/qws/linux-x86-g++
PATH=$PATH:/usr/local/tmake-1.8/bin

export TMAKEPATH PATH


# source ./.bash_profile  // 사용자 계정의 폴더


이로써 tmake의 설치를 끝낸다