tq2440怎么移植qt应用程序

tq2440怎么移植qt应用程序,第1张

您好,cd qt-4.6.3-x11

sourc qt_x11_setenv.sh

打开qtcreator,建立一个工程假设为form,完成后可以在虚拟机看下做的界面.

进入刚才建立的工程目录,

qmake -project

qmake

make

./form

就可以看到界面了

----------------------------------------------------------------------------------------------------

接下去是移植到开发板.

1. 把刚才做的界面源码复制到qt-4.6.3-arm

cd opt/qt-4.6.3-arm

source qt_arm_setenv.sh //因为要用到arm版的qmake, 环境变量要重新设置

qmake -project

qmake

make

./form

此时会提示错误打不开,是正常的,这是在arm板上运行的

2. 启动开发板,在根目录下建立tq2440和tslib 2个文件

//这里貌似QTDIR的路径要与电脑上一致,不然移植字体不识别,就是要把fedora10 系统的usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib 复制到ARM的usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib

mkdir tq2440

mkdr tslib

把fedora10 系统里的usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib 整个lb文件夹拷到开发板/tq2440下

把tslib1.4.tar.gz 安装生成的tslib文件夹内容拷到开发板上/tslib

//tslib1.4的安装这里不赘述了,网上找个都没什么问题

现在,我们可以在开发板根目录看到tq2440和tslib这2个文件夹.

tq2440下有lib文件夹,tslib文件夹下有bin include etc lib 4个文件夹.

网上拷贝这些文件多是搭建nfs服务器做的,我是在虚拟机直接把这些文件夹打包(tar zcvf xx.tar.gz xx),共享传给我我的主机,然后主机通过secureCRT下载到开发板,就免去了搭nfs.

3. 在开发板的 /etc/profile中追加:

export QTDIR=/tq2440

export T_ROOT=/tslib

export PATH=$QTDIR/bin:$PATH

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/event0

export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_MOUSE_PROTO=tslib:/dev/event0

export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib

这里需要注意3句代码:

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/event0

export QWS_MOUSE_PROTO=tslib:/dev/event0

有的开发板fb0 event0是在/dev/input/目录下的

所以要改为

export TSLIB_FBDEVICE=/dev/input/fb0

export TSLIB_TSDEVICE=/dev/input/event0

export QWS_MOUSE_PROTO=tslib:/dev/input/event0

再执行一下:source /etc/profile 使系统更新一遍刚设置的系统环境变量.

验证变量设置是否成功,在开发板终端下执行

echo $QTDIR

如果显示/tq2440,则说明设置成功了

4 接下来我们还得设置一下触摸屏的配置文件ts.conf.

它在哪里呢?前面我们已经拷到开发板/tslib/下,那么tslib一共就有bin etc include lib 4个目录,而ts.conf就在etc目录下,开发板下用

vi /tslib/etc/ts.conf

把# module_raw input

前面的“#”号去掉,然后把该行移至行首

现在差不多移植完成了,可以把自己用qtcreator写的程序下载到板子运行.

我是在板子目录下新建mkdir test文件夹

上文已经说到已经把qtcreator做的界面编译成arm版的了,现在把这个可执行文件form下载到开发板/test目录下

在开发板执行:

cd /test

chmod a+x form //提示权限错误就加这句,没有提示加不加无所谓

./form -qws

会出现“relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference”错误

我的解决办法是进入主机/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib目录下找到libstdc++.so.6链接的文件(通过右键属性——〉基本,可以看到链接的文件)libstdc++.so.6.0.8,重命名为libstdc++.so.6复制下载到开发板/tq2440/lib/目录下,之前别忘了将该文件夹下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。

*重命名其实是比较野蛮的方法,可以用ln命令的,参照下面这篇文章……

http://hi.baidu.com/a263238386/blog/item/362f01ce7b11a10a93457eae.html

然后再运行./form –qws,看问题是不是解决了!

现在可以看到开发板界面出现自己qt写的界面了

5. 不过触摸屏还没有校准,进入开发板根目录/tslib

cd bin

./ts_calibrate //触摸屏校准程序

运行该程序,屏幕出现5点校准画面,依次点击,将生成触摸屏校准数据文件/etc/pointercal

./ts_test//触摸屏拖曳测试程序

可以用这个来测试校准的怎么样

6. 开机自动启动qt 程序

如果想在开机后直接运行自己编的qt程序,而不想出现qt自带的那个界面只需把/etc/init.d/rcS中的

/bin/qtopia &注释掉,前面加个#号就行:

#/bin/qtopia &

并在下面加上自己的启动程序

/tq2440/run.sh &

//添加一个执行脚本行,这个脚本因为在/etc/init.d/rcS中,所以会被自动运行(注意后面最好有个&,使他在后台执行,否则无法通过串口 *** 作控制台)

修改echo "Starting Qtopia, please waiting..." >/dev/tty1

为echo "Starting myapps, please waiting..." >/dev/tty1

然后在/tq2440/目录下建立一个run.sh文件,内容如下:

#! /bin/sh

export QTDIR=/tq2440

export T_ROOT=/tslib

export PATH=$QTDIR/bin:$PATH

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/event0//这边可能有的开发板是export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_MOUSE_PROTO=tslib:/dev/event0//同上,可能在/dev/input/event0

export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib

/test/form -qws

重启之后,就可以看见自己添加的qt程序开机自动运行,并且我们可以正常使用触屏。原理就是qt程序依赖很多的动态共享库,在运行的时候必须找到这个共享库,所以在运行qt程序之前必须显式地指明这些共享库的所在位置。

一、准备

busybox 1.14.1

qt-embedded-linux-opensource-src-4.5.1

tslib 1.4

gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)

构建一个新的根文件系统目录,路径为

/root/rootfs

二、具体步骤:

1、编译安装busybox

在官网下载最新版。可以参考如下几处要修改的地方:

Busybox Settings --->Build Options --->(arm-linux-)Cross Compiler prefix

Busybox Settings --->Installation Options --->[]Dont't use /usr

Busybox Settings --->Installation Options --->(/root/rootfs) BusyBox installation prefix

Busybox Settings --->Busybox Library Tuning --->[*] Fancy Shell prompts

输入如下命令,编译并安装。

# makemake install

2、编译安装tslib

# ./autogen.sh

# ./configure -prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/ -host=arm-linux ac_cv_func_malloc_0_nonnull=yes

# makemake install

安装目录指明为 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/

主要是为了在编译QTE时,不用指定tslib的头文件和库文件,方便以后程序开发。

注意:在做这一步前,需要做一个目录链接

在/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/目录下

# ln -s ../../usr/include ./

3、编译安装QTE

1)、最基本的配置

# ./configure -prefix /usr -embedded arm -xplatform qws/linux-arm-g++ -depths 16 -qt-mouse-tslib

-prefix /usr 使用这个配置,编译后的QTE库文件即可放在目标文件系统的/usr/lib下,而不是默认/usr/local/Trolltech/QtEmbedded-4.5.1 这个很深的目录

2)、编译

# make

# cp lib/* /root/rootfs/usr/lib -rd 将QTE库文件拷贝到根文件系统的目录

# cp plugins /root/rootfs/usr -rd 将QTE插件目录拷贝到根文件系统的目录

4、根文件系统的设置

1)、这时/root/rootfs/usr下应该有 bin etc include lib sbin目录

tslib生成的etc目录,包含一个tslib的配置文件 nf,编辑此文件,去掉module_raw input前的注释

# mv etc ../ 移动到rootfs的根目录

2)、进行一次清理 *** 作

#arm-linux-strip lib/*.so

#arm-linux-strip usr/lib/*.so

3)、编辑etc/profile,添加以下内容

export QWS_MOUSE_PROTO=Tslib:/dev/event0

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/event0

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=/etc/nf

export TSLIB_PLUGINDIR=/usr/lib/ts

最后,通过mkyaffs2image 制作镜像,烧写镜像,启动ts_calibrate校验触屏即可。

安装完成后,把tslib目录下的所有内容拷贝到根文件系统的/usr/local/tslib目录下,修改tslib/etc/ts.conf文件,将第二行module_raw input的注释去掉。将tslib/bin/ts_calibrate拷贝到/usr/bin下,这个就是触摸屏校正程序

然后设置tslib的环境变量,内容为

#!/bin/sh

export TSLIB_ROOT=/usr/local/tslib //指定tslib的主目录

export TSLIB_TSDEVICE=/dev/event0 //指定触摸屏设备

export TSLIT_CALIBFILE=/etc/pointercal //指定触摸屏校准文件pointercal存放位置

export TSLIB_CONFILE=$TSLIB_ROOT/etc/ts.conf // 指定TSLIB配置文件的位置

export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts //指定触摸屏插件所在路径

export TSLIB_CONSOLEDEVICE=none //设定控制台设备为

export TSLIB_FBDEVICE=/dev/fb0 //指定帧缓冲设备

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib:$QTLIB //指定TSLIB的库文件路径

export QWS_SIZE=320*240

export QWS_MOUSE_PROTO=Tslib:dev/event0

export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0"

ts_calibrate //运行触摸屏矫正程序

fi

新建qtconfig文件编写以上环境变量内容,保存并拷贝到根文件系统的usr/bin目录下使它的权限最高#chmod 777 qtconfig,在根文件系统的etc/init.d/rcS文件中添加qtconfig&是程序在执行时在后台自动运行qtconfig

但是用以上方法将制作好的文件系统烧写到开发板上提示/etc/init.d/rcS line17 :qtconfig not found 无法运行tslib程序


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11515122.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存