QT2.3.7嵌入式环境搭建
时间:2025-07-14
时间:2025-07-14
嵌入式Qt2.3.7环境搭建详细过程。
1.首先准备好所需要的软件和交叉编译工具:
arm-linux-gcc-3.4.1
gcc-3.4.5
交叉编译工具链 用于编译生成libuuid 生成makefile Qt/Embedded Qt/X11 Qtopia 触摸屏校准可生成potential文件 jpeg库文件 解决找不到-ljpeg的问题 e2fsprogs-1.35.tar.gz tmake-1.13.tar.gz qt-embedded-2.3.7.tar.gz qt-x11-2.3.2.tar.gz tslib-1.3.tar.gz jpegsrc.v6b.tar.gz qtopia-free-1.7.0.tar.gz
2.安装交叉编译工具
编译安装gcc3.4.5版本(高版本在编译时会出更多的兼容性错误)
在根目录下解压arm-linux-gcc,并在/etc/bashrc添加相应路径
注销后再次登陆,然后以以下方式判断安装是否成功
# arm-linux-gcc –v
# gcc -v
3.安装tmake工具
tmake用于交叉编译生成qt应用程序的makefile,也可用于生成qt的本地makefile,区别在于设置TMAKEPATH路径的不同,一个用于arm,一个用于x86。
# tar zxvf tmake-1.13.tar.gz
# vim tmake-1.13/lib/qws/linux-arm-g++/tmake.conf
做如下的修改
TMAKE_LINK=arm-linux-g++ //将原来的arm-linux-gcc改成arm-linux-g++
TMAKE_LINK_SHLIBS=arm-linux-g++
# mv tmake-1.13 /usr/local/
# vim ~/.bash_profile 添加以下一些信息
PATH=/usr/local/tmake-1.13/bin:$PATH
TMAKEPATH=/usr/local/tmake-1.13/lib/qws/linux-arm-g++
export PATH
export TMAKEPATH
# source ~/.bash_profile使环境变量生效
4.安装e2fsprogs
E2fsprogs为arm编译libuuid库
修改/usr/local/arm/3.4.1/arm-linux/sys-include/linux/fd.h
添加#include <linux/compiler.h>
# cd /home/qt
# tar zxvf e2fsprogs-1.35.tar.gz
# cd e2fsprogs-1.35
# mkdir build
嵌入式Qt2.3.7环境搭建详细过程。
# cd build
# ../configure --enable-elf-shlibs --build=i386-linux --host=arm-linux
--with-cc=arm-linux-gcc --with-linker=arm-linux-ld(交叉编译器地址)
# make
其中lib/libuuid.so.1.2 libuuid.so.1 libuuid.so即是我们需要编译的库
5.解压qtopia
# cd /home/qt
# tar –zxvf qtopia-free-1.7.0.tar.gz
# cd qtopia-free-1.7.0
# export QPEDIR=$PWD
下面要用到QPEDIR这个环境变量,也可以放在bashrc中
6.安装Qt/Embedded
# cd /home/qt
# tar zxvf qt-embedded-2.3.7.tar.gz
# cd qt-2.3.7
此处修改添加对触摸屏的支持:
#vim /home/qt/qtopia-free-1.7.0/src/qt/qconfig-qpe.h
在末尾添加#define QWS_CUSTOMTOUCHPANEL
因为触摸屏驱动已经带在开发板中,所以我选择自定义方式来使用它,触摸屏驱动位置为/dev/input/ts0 其中/dev/input/mice为usb鼠标驱动
将qconfig-qpe.h复制到qt-2.3.7/src/tools/下
再修改相关源码
# vim src/kernel/qwsmouse_qws.cpp
=============================================================
class QCustomTPanelHandlerPrivate : public QWSMouseHandler {
Q_OBJECT
public:
QCustomTPanelHandlerPrivate(MouseProtocol, QString dev);
~QCustomTPanelHandlerPrivate();
private:
unsigned char prevstate; //加上这行
int mouseFD;
private slots:
void readMouseData();
};
=================================================================================== QCustomTPanelHandlerPrivate::QCustomTPanelHandlerPrivate( MouseProtocol, QString )
{
嵌入式Qt2.3.7环境搭建详细过程。
#ifdef QWS_CUSTOMTOUCHPANEL
if ((mouseFD = open( "/dev/input/ts0", O_RDONLY)) < 0) { //驱动位置修正
qWarning( "Cannot open /dev/input/ts0 (%s)", strerror(errno));
return;
} else {
sleep(1);
}
prevstate=0; //添加
QSocketNotifier *mouseNotifier;
mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read,
this );
connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData()));
#endif
}
=================================================================================== void QCustomTPanelHandlerPrivate::readMouseData()
{
#ifdef QWS_CUSTOMTOUCHPANEL
if(!qt_screen)
return;
CustomTPdata data;
short data2[4]={0};
int ret;
ret=read(mouseFD,data2,sizeof(data2));
if(ret) {
data.status=data2[0]&&0xff; //根据当前触摸屏获取的数据结构存入data中此处为状态位 data.xpos=data2[1];
data.ypos=data2[2];
QPoint q;
q.setX(data.xpos);
q.setY(data.ypos);
mousePos=q;
if(data.status == 0x01 && !prevstate) { //此处判断按下状态
emit mouseChanged(mousePos,Qt::LeftButton);
} else if(!data.status && prevstate){
emit mouseChanged(mousePos,0);
}
prevstate=data.status;
}
if(ret<0) {
qDebug("Error %s",strerror(errno));
}
#endif
}
嵌入式Qt2.3.7环境搭建详细过程。
保存退出
# vim include/qstring.h
第166行改为
uchar& cell() {uchar *t = &cl;return *t; }
uchar& row() {uchar *t = &rw;return *t; }
qsortedlist.h中51行clear()函数出错
在其前面加this->
qgfxvfb_qws.cpp 中is_screen_gfx,xoffs,yoffs,clipbounds,未声明
打开此文件,在所有未声明变量前加this->
qgfxtransformed_qws.cpp中
xoffs,yoffs,width,height,srcbits,buffer,srcwidgetoffs,srcwidth,srcheight,srcwidgetoffs等未声明
打开此文件,在所有未声明变量前加this->
建立shell文件set_env安装QTE
#!bin/bash
export QTDIR=$PWD
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
…… 此处隐藏:5078字,全部文档内容请下载后查看。喜欢就下载吧 ……上一篇:歌颂党的丰功伟绩演讲稿