您的位置:首页 > 编程语言 > Qt开发

Qt4.8.5在ARM9上的移植

2014-02-25 21:24 459 查看
                 Qt4.8.5在ARM9开发板上的移植

以前移植过qtopia-embedded-2.2.0,俗称Qt/E,在早期的Qt框架中是使用X11桌面服务器系统,无法应用于嵌入式平台,为此产生了qtopia,qtopia2.2.0就是一款针对嵌入式小资源平台的GUI系统,他是直接操作嵌入式系统显示设备的FramerBuffer,精简高效。但这是一款过时的产品,奇趣公司在Qt的4.5.0的时候,将Qt/E纳入了Qtopia,推出Qtopia4,可以使用在任何平台上,只需在编译时做相应的配置,这次我们就将移植Qt4.8.5到S3C2440开发板。

主机环境:Ubuntu12.04 LTS

编译器:arm-linux-gcc 4.4.3

开发板:JZ2440,Linux-2.6.32.12

一. 首先得搞定驱动的问题,主要是触屏的驱动和LCD的驱动,我是直接将两个驱动编译进内核了,针对不同的开发板,驱动是不同的,LCD驱动可以直接移植,但是触屏驱动需要自己写,具体的驱动可以参考友善之臂的触屏驱动。这里不再详细赘述。

二. 编译tslib库:

由于Qt的运行会调用tslib的库,所以先移植安装tslib,下载tslib-1.4的压缩文件,百度上到处都有下载的,下载后解压,如果你使用的是4.4.3的编译器的话,一定要注意配置。

解压后进入目录:

cd tslib

首先安装autoconfig工具:

sudo apt-get install autoconf

sudo apt-get install automake

sudo apt-get install libtool

然后依次执行:

sudo ./autogen.sh

mkdir tmp

sudo echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

sudo ./configure --host=arm-none-linux-gnueabi

--cache-file=arm-linux.cache --prefix=$(pwd)/tmp

CC=/usr/local/arm-tool/bin/arm-linux-gcc CXX=/usr/local/arm-tool/bin/arm-linux-g++

export CC=/usr/local/arm-tool/bin/arm-linux-gcc

export CXX=/usr/local/arm-tool/bin/arm-linux-g++

上面需要注意的就是一定要指定交叉编译器的绝对路径,我就是在这个地方弄了好长时间,编译后的文件总是X86的,指定成绝对路径就是交叉编译器了,而且host选项必须是和编译器名一致,而不是编译器的链接名。

接下来:sudo make;然后sudo make install

这时就能看到tmp目录下多了编译后的库文件。在开发板的根目录的opt目录中建立tslib,这个目录将是tslib目录的安装位置,最好使用先使用nfs挂载根文件系统,这样可以减少烧写flash的次数,有利于保护开发板,将刚才tmp目录下的所有文件全部拷贝过来,这里我选择全部拷贝。

三:编译移植Qt4.8.5

至此,tslib安装结束,下面编译Qt库,下载qt-everywhere-opensource-src-4.8.5.tar.gz,官网有下载,下载后解压进入目录,先要配置,最好写一个配置文件

vim autoconfig.sh

内容为:

#!/bin/sh

sudo ./configure \

-prefix /usr/local/qte-arm/ \

-force-pkg-config \

-opensource \

-confirm-license \

-release -shared \

-embedded arm \

-xplatform qws/linux-arm-gnueabi-g++ \

-depths 16,18,24 \

-fast \

-optimized-qmake \

-pch \

-qt-sql-sqlite \

-qt-libjpeg \

-qt-zlib \

-qt-libpng \

-qt-freetype \

-little-endian -host-little-endian \

-no-qt3support \

-no-libtiff -no-libmng \

-no-opengl \

-no-mmx -no-sse -no-sse2 \

-no-3dnow \

-no-openssl \

-no-webkit \

-no-qvfb \

其中的配置选项根据自己的需要添加或删减,选项说明直接./configure --help就出来了,当然上面的可以直接拷贝。

然后sudo chmod autoconfig.sh 777增加可执行权限,最后sudo ./autoconfig.sh

即可配置,这里说明一点,-force-pkg-config选项增加后会有警告,直接忽略,但是如果不加的话,则会出错,这个错误是谷歌了好长时间才解决的。

配置到一半的时候,肯定会弹出类似的错误,

The tslib functionality test failed!

You might need to modify the include and library search paths by editing QMAKE_INCDIR and QMAKE_LIBDIR in

/qt-embedded-linux-opensource-src-4.8.5-arm/mkspecs/qws/linux-arm-g++

没关系,这个错误有两个原因,一个是没加额外的tslib的链接库文件,还记得刚才编译tslib时用的tmp目录么,现在就要用了,还有一个就是编译器要使用绝对路径,这就是4.4.3版本坑爹的地方,我是试了好长时间才发现的,一开始以为是tslib编译错了,后来发现是编译器要使用绝对路径而不是环境变量。

打开mkspecs/qws/linux-arm-gnueabi-g++目录下的qmake.conf文件,修改编译器为绝对路径,并添加刚刚那个tmp目录中的库目录,也是绝对路径,我的设置是:



主要是QMAKE_INCDIR和QMAKE_LIBDIR,对应于你自己编译tslib的库目录。

然后重新sudo ./autoconfig.sh,

接下来,就是sudo make,这个过程是个很长的过程,make完了后,sudo make install,就会安装到你设置的目录下,就是-prefix /usr/local/qte-arm/配置选项的目录,但是不知道为什么,我的配置了,他给我安装到了usr的下的默认的目录下了,默认的是/usr/local/Trolltech,但最后的提示确实我配置的目录,显得有点坑爹。至此编译就结束了,一般是不会出错的。在开发板的根文件系统的opt目录下建立Qte目录,

再进入Qt安装目录下,将其中的四个目录:imports lib mkspecs plugins复制到,/opt/Qte下,也可将demos也复制过来,因为待会要测试,就使用他的程序了。

四. 测试:

将/opt/tslib/etc/下的ts.conf打开,将

# module_raw input一行前面的符号和空格去掉,注意空格也不能留。

配置环境变量:

export TSLIB_ROOT=/opt/tslib

export TSLIB_TSDEVICE=/dev/event0

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_PLUGINDIR=/opt/tslib/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CONFFILE=/opt/tslib/etc/ts.conf

export POINTERCAL_FILE=/etc/pointercal

export TSLIB_CALIBFILE=/etc/pointercal

export QWS_SIZE=480x272

export QWS_MOUSE_PROTO=Tslib:/dev/event0

export QTDIR=/opt/Qte

export QPEDIR=/opt/Qte

export PATH=$QTDIR/bin:$PATH

export QWS_DISPLAY=LinuxFb:/dev/fb0

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

export QT_QWS_FONTDIR=$QTDIR/lib/fonts

如果你的开发板刚刚的目录设置和我一样的话,可以直接使用,不同的话根据自己的设置配置,根据环境变量的名字应该能看出每个目录代表什么,主要就是tslib和Qt的安装目录,同时配置屏幕的大小,我的是480X272的,还有就是输入子系统的文件节点,基本都差不多的。OK,下面,将demos下的一个可执行文件随便拷贝一个过来,先进入tslib的bin目录,执行./ts_calibrate校准触屏,然后执行一个Qt程序,./textedit -qws就可以看到打开了一个文本编辑器,./mainwindow -qws就可以打开一个窗口界面,



这些程序在demos目录下需要拷贝到开发板上执行,执行成功则说明移植成功,接下来,编写一个脚本文件,将上述环境变量的设置写入脚本文件,开机执行,并且在/etc/init.d/rcS中写入开机启动Qt程序的命令,则开机即可看到优美的GUI界面了,OK。至此,移植完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: