QT4.3.2移植到FS2410
一、PC环境:
1.操作系统:Redhat5 ,主机编译器:gcc 4.1.2
2. 交叉编译器:cross-3.3.2.tar.bz2 (安装目录为:/usr/local/arm 交叉编译时出错)
注:可以使用网上下载的3.4.1交叉编译器。但最好使用与FS2410配套的3.3.2.
二、PC上QT开发环境编译
将安装文件复制到目录/opt下解压
# tar –zxvf qt-x11-opensource-src-4.3.2.tar.gz
进入到该目录中:
# cd qt-x11-opensource-src-4.3.2/
设置编译环境:
# export QTDIR=$PWD //将QTDIR设置到当前目录
# export PATH=$QTDIR/bin:$PATH
# export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
(在命令行下输入:env检查以上环境变量是否设置正确后再进行下一步)
进行编译,依次输入以下命令:
# ./configure
# yes
# gmake //编译时间大概一个半小时
# gmake install //默认安装到/usr/local/Trolltech
# cd tools/qvfb
# make
至此,QT4已安装完毕,其主要功能为提供虚拟帧缓冲(qvfb)
编译工程:
建立一个文件夹“lzg”,放入上面4个源代码文件。在该目录里,终端输入以下命令进行编译:
# qmake –project //生成工程文件
# qmake //生成Makefile文件
# make //编译程序
这时“lzg”文件夹内容如下图所示:
运行程序,在终端输入指令:./lzg
三、编译Qtopia
1.解压交叉编译器:cross-3.3.2.tar.bz2 到/usr/local/arm目录下
2.使交叉编译器生效:export PATH=/usr/local/arm/3.3.2/bin:$PATH
可使用以下命令查看:
注意:QT4要求的交叉编译器要3.2版本以上的。
3. 编译tslib-1.4.gz ,支持触摸屏功能
在/opt目录下解压tslib-1.4.gz
# tar zxvf tslib-1.4.gz
# cd tslib
# ./autogen.sh //生成config 文件
//避免检查ac_cv_func_malloc_0_nonnull
# echo "ac_cv_func_malloc_0_nonnull=yes" >arm-Linux.cache
//配置目标机、缓冲、安装路径
# make //编译
# make install //安装
# vi /home/tslib/etc/ts.conf
//修改文件,最终ts.conf内容如下(把所有的注释都删掉)
注意module_raw前不要有空格
4. 编译QT库
在/opt目录下解压qtopia-core-opensource-src-4.3.2.tar.gz
# cd qtopia-core-4.3.2
//修改源代码:mkspec/qws/linux-arm-g++/qmake.conf
# vim mkspec/qws/linux-arm-g++/qmake.conf
//分别包含触摸屏tslib的include,lib,目的是为配置的QT库支持触摸屏功能,修改如下:
# vim src/gui/embedded/qmouselinuxtp_qws.h
//加上对触摸屏支持的宏定义,添加下面红线代码,如下:
# vim src/gui/embedded/qmouselinuxtp_qws.cpp
//把“/dev/h3600_tsraw” 修改为了/dev/touchscreen/0。其中/dev/touchscreen/0为FS2410平台LCD触摸屏的驱动文件,修改如下:(只需要修改红线部分即可)
//设置编译QT库的参数
主要配置选项解说如下:
-embedded arm -xplatform qws/linux-arm-g++
目标平台编译配置文件使用qtopiacore/qt/mkspecs/qws/linux-arm-g++目录下的配置文件,嵌入式平台为arm。
-qt-sql-sqlite
数据库支持Sqlite。
-qt-kbd-usb
键盘支持usb协议。
-no-kbd-tty
不支持终端。
-no-mouse-linuxtp -qt-mouse-tslib
触摸屏协议不支持linuxtp,支持tslib, tslib的头文件和库已经在前面步骤加入QT库内。
# gmake
# gmake install
成功安装后,可以在/usr/local目录下,发现一个文件夹Trolltech。
# cd /usr/local/Trolltech/QtopiaCore-4.3.2-arm/
目录结构如下:
bin demos doc examples include lib mkspecs plugins translations
//添加如下环境变量,使刚才安装QT库的qmake指令生效
export PATH=/usr/local/Trolltech/QtopiaCore-4.3.2-arm/bin:$PATH
至此,我们可以把刚才在PC机上开发的程序源代码交叉编译,生成能在FS2410平台上运行的二进制代码。指令步骤如下:
# qmake –project
# qmake
# make
5. 编写下位机运行脚本
在/usr/local/Trolltech 新建一个set.sh脚本
# vim set.sh
//内容如下所示:(与挂载到下位机目录/mnt下有关)注,FS2410根目录没有mnt,所以下面要修改。
设置说明:
QTEDIR:QT在下位机的位置
T_ROOT:触摸屏在下位机的位置
PATH:QT库的编译指令qmake位置
TSLIB_CONSOLEDEVICE:控制台设备文件名
TSLIB_FBDEVICE:设备名
TSLIB_TSDEVICE:LCD触摸屏驱动文件(在数据测试中说明)
TSLIB_PLUGINDIR:插件目录
TSLIB_CONFFILE:配置文件名
TSLIB_CALIBFILE:校准的数据文件
QWS_MOUSE_PROTO:针对tslib协议的LCD触摸屏驱动文件
LD_LIBRARY_PATH:QT库和触摸屏库的位置
以上环境变量在实际开发中的实际配置可以根据实际情况决定
四 . nfs 配置
在PC机终端(Redhat5)运行如下指令:
1. /etc/exports设置
# vim /etc/exports
//添加如下内容(红线部分所示)
主要解说如下:
把PC机目录/usr/local/Trolltech挂载到目标机上。只能由IP地址是192.168.0.*的目标机访问,其中参数说明如下:
rw---读/写权限。
sync--数据同步写入内存和硬盘;
no_root_squash--此参数用来要求服务器允许远程系统以它自己的root特权存取该目录;就是说如果用户是root,那么他就对这个共享目录有root的权限。
//生效刚才的设置
# source /etc/exports
如果出错下面错误:
[root@localhost lzg]# source /etc/exports
bash: /etc/exports: line 1: syntax error near unexpected token `('
bash: /etc/exports: line 1: `/usr/local/Trolltech 192.168.176.*(rw,sync,no_root_squash)'
则在()前后加”,即"(rw,sync,no_root_squash)"就不会报错了.
//重启nfs服务
2. PC ping 目标机:测试网络是否连通.
使用ifconfig查看,使用ifconfig eth0设置IP.
PC机(redhat)和目标机前三段IP要一致.(不用管XP的IP,只需要比较redhat和目标机的IP)
3. 进行目标机终端:
mount -t nfs -o nolock 192.168.176.232:/usr/local/Trolltech /tmp
出现如下错误:
mount: RPC: Unable to receive; ernfs warning: mount version newer than kernel
NFS: mount program didn't pass remote address!
rno = No route to host
mount: nfsmount failed: Bad file descriptor
mount: Mounting 192.168.176.232:/usr/local/Trolltech on /tmp failed: Invalid arg
ument
确保PC的虚拟机能ping通目标机(第二步).如果还出现上面错误时,看是否已经关闭防火墙.