해당 경우에는 다음과 같은 Tip을 사용하면, 일반 적인 standard I/O를 사용하는 Application을 제작할 수 있다.
mac {
CONFIG -= app_bundle
}
# qmake -project
# qmake -spec macx-g++
# make
git clone git://gitorious.org/qt/qt.git qt cd qt
git remote add qt git://gitorious.org/qt/qt.git git fetch qt git checkout -b my-local-tracking-branch qt/4.8
T | qFromBigEndian ( const uchar * src ) |
| T | qFromBigEndian ( T src ) |
| T | qFromLittleEndian ( const uchar * src ) |
| T | qFromLittleEndian ( T src ) |
| void | qToBigEndian ( T src, uchar * dest ) |
| T | qToBigEndian ( T src ) |
| void | qToLittleEndian ( T src, uchar * dest ) |
| T | qToLittleEndian ( T src ) |
Embedded 환경 구축을 위한 Cross-compiling은 누가 뭐래도 지루하고 따분한 일에는 틀림 없다.
특히 Qt와 같이 다양한 기능을 제공하는 Platform Cross-compile에는 더 많은 정성과 신경이 쓰인다.
게다가 Hardware 가속기능이나 멀티미디어 라이브러리를(DirectFB, D-Bus, GStreamer, OpenGL ES)
지원하기 위해서는 Optimization도 많고, Testing까지 생각한다면 Cross-compiling Tool의 사용은
선택이 아니라 필수의 항목일 수 있다.
( 하드웨어 가속기나 멀티미디어 항목은 귀찮치만 신경을 쓰면 쓸수록 Application의 성능과 연관성도 높다)
따라서 Scratchbox2를 반복적으로 쓰면서 나름 편리하다고 느껴진 방법을 정리해 보았다.
1) Scratchbox2를 Host 에 설치한다.
2) 제공된 Board SDK 를 이용하여 root image를 만든다.
3) Target rootfs 루트폴더로 이동한다.
Scratchbox2 의 sb2-init 은 반드시 targetfs 의 root에서 실행 시켜줄 것을 권장한다.
예) cd ~/Tegra2Arm/vibrante-devlite-p1138/targetfs
4) scratchbox 2 env 를 만들어 준다.
예 ) sb2-init Tegra2Qt ~/toolchains/tegra2-x.x.x/bin/arm-none-linux-gnueabi-gcc
sb2-init -c qemu-arm Tegra2QPA ~/toolchains/tegra2-x.x.x/bin/arm-none-linux-gnueabi-gcc
sb2-init [option].... [Target Name] [Compiler:specs] [secondary_compiler]
5) Scratchbox2 가상환경으로 들어 간다.
예) sb2 -t Tegra2QPA
sb2 -t [Target Name]
6) Qt Configuration
- makespec set to use host-g++ and friends (builds tools for host)
- xmakespec set to linux-g++
예) configure -platform linux-tegra2-g++ -arch arm -xplatform linux-g++ -no-neon -graphicssystem raster -opengl es2 -confirm-license -force-pkg-config
여기서 가장 중요한 요소는 -force-pkg-config 인데, opengl es2나 dbus driver들이 제대로 맞물릴 수 있도록
해당 Target pkgconfig 위치가 $PKG_CONFIG_PATH를 정확히 지정 할 수 있도록 한다.
# # qmake configuration for linux-g++ #
MAKEFILE_GENERATOR = UNIX
TEMPLATE = app
CONFIG += qt warn_on release incremental link_prl
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
include(../../common/g++.conf)
include(../../common/linux.conf)
# modifications to g++.conf
QMAKE_CC = sb2 gcc
QMAKE_CXX = sb2 g++
QMAKE_LINK = sb2 g++
QMAKE_LINK_SHLIB = sb2 g++
# modifications to linux.conf
QMAKE_AR = sb2 ar cqs
QMAKE_OBJCOPY = sb2 objcopy
QMAKE_STRIP = sb2 strip
load(qt_config)
기본적으로 vibrante는 두가지 Graphic Output모드를 지원합니다.
하나는 X11을 기본으로 하는 모드고 다른 하나는 OpenKODE를 기본으로 하는 모드입니다.
vibrante-devlite-p1138-15.0105-nv-minimal-sdk.run 를 설치하실 때 유의 하셔야 하는 사항은 "X11"의 설치인데, 현재까지는 Qt의 모든 기능을 문제 없이 사용하시고자 할때는 X11을 설치 하셔야 합니다.
하지만 이번 연재는 Qt Lighthouse를 사용하는 것이 목적이므로 OpenKODE를 설치하는 것을 기본으로 전제합니다.
참고로 Lighthouse는 qws와 달리 X를 거치지 않고 /dev/fb0로 바로 출력 할 수도 있습니다. (platform설정에 따라...)
위 패키지 설치 중 아래와 같은 메시지를 볼 수 있습니다.
Note that X11 is required for Qt and GStreamer. Enter [X] to install X11-enabled drivers and a minimal X server, any other key to skip X11 and use non-X11 (OpenKODE) drivers: