qt移植
- 格式:pdf
- 大小:207.25 KB
- 文档页数:7
我们专注于嵌入式 qt移植 软硬件环境: 交叉编译工具链版本:4.2.2-eabi PC端操作系统:RHEL5 Qt源代码版本:4.8.0 tslib源代码版本:1.0 实验步骤: 1. 制作一个基于动态库的根文件系统: a. 参考Linux根文件系统制作.doc中的方法制作根文件系统,为了使busybox基于动态链接库,在busybox的配置菜单【Build Options】中,进行如下配置:
b. 将交叉编译工具中的动态库按如下方法拷贝到开发板根文件系统: #cp /usr/local/arm/4.2.2-eabi/lib/*.so* /nfs/rootfs/lib -d #cp /usr/local/arm/4.2.2-eabi/usr/lib/*.so* /nfs/rootfs/usr/lib -d #cp /usr/local/arm/4.2.2-eabi/usr/arm-unknown-linux-gnueabi/lib/*.so* /nfs/rootfs/usr/lib -d 我们专注于嵌入式 2. 移植tslib:将实验资源目录resouces下的tslib-1.0.tar.bz2拷贝至虚拟机中,解压并配置、编译和安装tslib,步骤如下: a. 解压tslib,并进入解压后tslib的路径: #tar xjf tslib-1.0.tar.bz2 #cd tslib-1.0 b. 配置、编译和安装tslib: 可编写以下脚本并运行。 #!/bin/sh PREFIX=/usr/tslib4arm ./autogen.sh echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache ./configure --host=arm-linux \ --prefix=${PREFIX} \ --cache-file=arm-linux.cache [ $? -eq 0 ] || exit 1 make [ $? -eq 0 ] || exit 1 make install
tslib安装成功,可在/usr/tslib4arm路径下看到bin、lib、include等目录。 c. 在开发板根文件系统的usr目录下创建tslib4arm目录,将/usr/tslib4arm目录下的bin、lib和etc目录拷贝到开发板根文件系统的该目录下: #cd /nfs/rootfs #mkdir usr/tslib4arm #cp /usr/tslib4arm/bin /usr/tslib4arm/etc /usr/tslib4arm/lib usr/tslib4arm -dr
d. 创建以下脚本,命名为ts_init: #!/bin/sh
export TSLIB_TSDEVICE=/dev/event0 export TSLIB_CALIBFILE=/usr/tslib4arm/etc/pointercal export TSLIB_CONFFILE=/usr/tslib4arm/etc/ts.conf export TSLIB_PLUGINDIR=/usr/tslib4arm/lib/ts export TSLIB_CONSOLEDEVICE=/dev/tty export TSLIB_FBDEVICE=/dev/fb0 我们专注于嵌入式 为了使系统在开机时能够加载这些环境变量以便tslib能够正常工作,在开发板根目录下/etc/profile中添加如下语句: . ts_init
注意ts_init前面有个点。 3. 移植qt: 实验资源目录resouces下的qt-everywhere-opensource-src-4.8.0.tar.gz拷贝至虚拟机中,解压并配置、编译和安装qt,步骤如下: a. 解压qt,并进入解压后qt的路径: #tar xzf qt-everywhere-opensource-src-4.8.0.tar.gz #cd qt-everywhere-opensource-src-4.8.0
注意: 4.7.0和4.7.1两个版本的qt编译的程序在arm9的板子上运行会产生段错误,这是qt自身的bug,请避免使用这两个版本的qt源代码。
b. 修改qt路径下的mkspecs/qws/linux-arm-g++/qmake.conf文件,添加如下内容,使编译qt时交叉编译工具链能够找到tslib的库和头文件: QMAKE_INCDIR = /usr/tslib4arm/include QMAKE_LIBDIR = /usr/tslib4arm/lib QMAKE_LFLAGS = -Wl,-rpath, /usr/tslib4arm/lib
c.可编写以下脚本并运行。 #!/bin/sh
echo yes | ./configure -prefix /opt/qt4arm \ -opensource -embedded arm \ -xplatform qws/linux-arm-g++ \ -no-webkit -qt-libtiff -qt-libmng \ -qt-mouse-tslib -qt-mouse-pc \ -no-mouse-linuxtp -no-neon \ -nomake examples \ -nomake docs \ -nomake demos \ -nomake tools make && make install 我们专注于嵌入式 qt安装成功,可在/opt/qt4arm路径下看到bin、lib、include等目录。 e. 在开发板根文件系统的opt目录下创建qt4arm目录,将/opt/qt4arm目录下的lib目录拷贝到开发板根文件系统的该目录下: #cd /nfs/rootfs #mkdir -p opt/qt4arm #cp /opt/qt4arm/lib opt/qt4arm/ -dr
f. 参考以下代码编写脚本,命名为setenv4qt: #!/bin/sh
export QWS_DISPLAY=:1 export QT_QWS_FONTDIR=/opt/qt4arm/lib/fonts export QWS_MOUSE_PROTO="Tslib MouseMan:/dev/event0" export QWS_KEYBOARD=TTY:/dev/tty1 export HOME=/root
将该脚本移动至开发板根文件系统的/usr/sbin目录,为了让系统能够在开机时加载这些环境变量以便tslib能正常工作,在开发板根目录下/etc/profile中添加如下语句: . setenv4qt
注意setenv4qt前面有个点。 4. 编写qt测试程序并拷贝到开发板运行: a. 参考如下代码编写测试程序,将源代码文件放在hqt目录下: hqt.cpp #include
#include "mydialog.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); MyDialog mdlg; mdlg.show(); 我们专注于嵌入式 return app.exec(); }
mydialog.cpp #include #include #include #include #include #include #include #include
#include "mydialog.h" MyDialog::MyDialog(QWidget *parent) : QDialog(parent) { QHBoxLayout *hboxTop = new QHBoxLayout; QWidget *widget = new QWidget(this); QPalette pal; QPixmap pixmap("logo.png"); pal.setBrush(QPalette::Window, QBrush(pixmap)); widget->setAutoFillBackground(true); widget->setPalette(pal); widget->setFixedSize(210, 80); hboxTop->addStretch(); hboxTop->addWidget(widget); hboxTop->addStretch();
QHBoxLayout *hboxBottom = new QHBoxLayout; QPushButton *quitBtn = new QPushButton(tr("Quit")); QPushButton *aboutBtn = new QPushButton(tr("about")); hboxBottom->addStretch(); hboxBottom->addWidget(aboutBtn); hboxBottom->addWidget(quitBtn);