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。至此,移植完成。

Qt4.8.5在ARM9上的移植的更多相关文章

  1. 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题4---共享库中嵌套库带路径【已解决】

    [Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题4-共享库中嵌套库带路径[已解决] 标签:[Linux开发] 紧接着上一篇,我居然又尝试了一下编译opencv,主要是因为由于交 ...

  2. OpenCV在ARM上的移植

    OpenCV在ARM上的移植 与X86 Linux类似,请参考:Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且方 ...

  3. KEIL MDK环境下uCOS-II在LPC17xx上的移植实例

    1. 知识准备 要想对ucos-ii的移植有较深的理解,需要两方面知识: (1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的ucos-ii移 ...

  4. UCOSII在STM32F1上的移植

    UCOSII在STM32F1上的移植 首先准备好一份STM32F1的工程.UCOSII源码. 在准备好的工程中新建一个"UCOSII"文件夹(或者取其它名字也行): UCOSII文 ...

  5. SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)

    由于工作的原因,对SPI的理解最为深刻,也和SPI最有感情了,之前工作都是基于OSEK操作系统上进行实现,也在US/OS3上实现过SPI驱动的实现和测试,但是都是基于基本的寄存器操作,没有一个系统软件 ...

  6. opus在arm的嵌入式平台上的移植和开发

    最近产品中要用到opus,圣上一声令下,把opus移植到我们平台上,什么?opus?opus是什么?在一脸 茫然中,我这特种兵码农就赤手空拳上战场了. 废话少说,赶紧在网站:https://opus- ...

  7. μC/OS-II在Microblaze上的移植与使用专题--“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛参赛作品

    reference:http://xilinx.eetrend.com/d6-xilinx/blog/2010-05/682.html   随着集成电路设计与制造技术的发展,FPGA芯片的容量越来越大 ...

  8. PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植

    PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植 一:前言 这段时间有个朋友加微信请求帮忙调试一块PCIe采集卡.该采集卡使用xilinx xc ...

  9. μC/OS-Ⅱ在C8051F060上的移植及其应用

    嵌入式操作系统是嵌入式应用的基础和核心.随着应用系统的不断复杂化和系统实时性需求的不断提高,对相应软件的逻辑结构.稳定性.实时性也提出了更高的要求,以传统的前后台编程模式编制软件将更加困难,而且容易出 ...

随机推荐

  1. Excel大批量导入数据到SQLServer数据库-万条只用1秒

    private string ExcelToStudent() { /*---*/ var preStr = DateTime.Now.ToString("yyyyMMddHHmmssfff ...

  2. 【DP】HDU 1114

    HDU 1144 Piggy-Bank 题意:有这么个存钱罐,给你空的时候重量和满的时候的重量,再给你N中类型的硬币(给出N种硬币总数量和总重量,可多次使用),问你怎样恰好填满存钱罐,而让填入的硬币数 ...

  3. iOS常用技术

    1.判断系统 #define UMSYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersi ...

  4. SpringMVC介绍之Validation

    对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证.SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提 ...

  5. H TC並沒有成為下一個摩托羅拉或諾基亞。

    關於2014年第四季度,H T C在三季度財報說明中提到,“年度旗艦H T CO ne(M 8)與中端機型H T C D esire系列在競爭日趨激烈的智能手機市場保持穩定的銷售,市占率有所提升,延續 ...

  6. gradle添加依赖

    gradle添加jar,moudle依赖 dependencies { compile fileTree(include: '*.jar', dir: 'libs') compile project( ...

  7. Java 枚举7常见种用法

    DK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是:  ...

  8. CSP -- 运营商内容劫持(广告)的终结者

    缘由 我们公司最近手机端H5 经常受到商户和用户的投诉,说有广告并且导致不能正常进行操作,我们商户自己当然不会加广告了,但是商户和用户可不管这些了,就认为是我们的问题 探索发现根本 目前我们用的很多浏 ...

  9. openstack中eventlet使用

    openstack中使用eventlet的协程来实现并发. 第一种,使用eventlet.GreenPool来管理绿色线程 如l3-agent在开启了8个绿色线程来处理router消息 def _pr ...

  10. 使用 JDBC 和 JavaTemplate 查询SQL语句返回 List<Map<String,Object>>

    使用JDBC执行sql语句返回List 类型: public class JdbcUtil { private static Log log = LogFactory.getLog(JdbcUtil. ...