Qt4.8.5在ARM9上的移植
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上的移植的更多相关文章
- 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题4---共享库中嵌套库带路径【已解决】
[Linux开发]OpenCV在ARM-linux上的移植过程遇到的问题4-共享库中嵌套库带路径[已解决] 标签:[Linux开发] 紧接着上一篇,我居然又尝试了一下编译opencv,主要是因为由于交 ...
- OpenCV在ARM上的移植
OpenCV在ARM上的移植 与X86 Linux类似,请参考:Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且方 ...
- KEIL MDK环境下uCOS-II在LPC17xx上的移植实例
1. 知识准备 要想对ucos-ii的移植有较深的理解,需要两方面知识: (1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的ucos-ii移 ...
- UCOSII在STM32F1上的移植
UCOSII在STM32F1上的移植 首先准备好一份STM32F1的工程.UCOSII源码. 在准备好的工程中新建一个"UCOSII"文件夹(或者取其它名字也行): UCOSII文 ...
- SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)
由于工作的原因,对SPI的理解最为深刻,也和SPI最有感情了,之前工作都是基于OSEK操作系统上进行实现,也在US/OS3上实现过SPI驱动的实现和测试,但是都是基于基本的寄存器操作,没有一个系统软件 ...
- opus在arm的嵌入式平台上的移植和开发
最近产品中要用到opus,圣上一声令下,把opus移植到我们平台上,什么?opus?opus是什么?在一脸 茫然中,我这特种兵码农就赤手空拳上战场了. 废话少说,赶紧在网站:https://opus- ...
- μC/OS-II在Microblaze上的移植与使用专题--“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛参赛作品
reference:http://xilinx.eetrend.com/d6-xilinx/blog/2010-05/682.html 随着集成电路设计与制造技术的发展,FPGA芯片的容量越来越大 ...
- PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植
PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植 一:前言 这段时间有个朋友加微信请求帮忙调试一块PCIe采集卡.该采集卡使用xilinx xc ...
- μC/OS-Ⅱ在C8051F060上的移植及其应用
嵌入式操作系统是嵌入式应用的基础和核心.随着应用系统的不断复杂化和系统实时性需求的不断提高,对相应软件的逻辑结构.稳定性.实时性也提出了更高的要求,以传统的前后台编程模式编制软件将更加困难,而且容易出 ...
随机推荐
- tornado 学习笔记8 模板以及UI
Tornado 包含一个简单.快速而且灵活的模板语言. Tornado同样可以使用任何其他的python模板语言,虽然没有集成这些模板语言进RequestHandler.ren ...
- Redis 数据类型总结—String
1.1 数据类型 Redis常用五种数据类型:string, hash, list, set, zset(sorted set). Redis内部使用一个redisObject对象来 ...
- GridView的七种数据绑定列的类型
1.BoundField 用于显示普通文本,是默认的数据绑定列的类型,一般自动生成的列就是该类型,需要注意是DataFormatString属性,该属性可以设置显示的格式,常见格式有:{0:C} 设置 ...
- data Binding
在WEEX中,我们使用{{}}双括号来对数据进行绑定,一旦我们对数据进行了绑定,当数据发生改变时,模板中的内容也会发生相应的改变. 如果绑定的数据是一个对象,里面有很多的内容,我们可以使用 . ...
- Jquery_类选择器笔记
$("[id^=percent]").size() ^=:表示以什么开头 $=:表示以什么结尾 ~=:表示包含什么 id:表示按id选择
- CSS清除浮动八种方法
在各种浏览器中显示效果也有可能不相同,这样让清除浮动更难了,下面总结8种清除浮动的方法,测试已通过 ie chrome firefox opera,需要的朋友可以参考下 清除浮动是每一个 web前台设 ...
- HTML当中特殊字符的表示
(回车换行) <br> (空格符) &(AND符号) & <(左尖括号.小于号) < >(右尖括号.大于号) > °(度) ° •(间隔符) ...
- ZK listbox 两种分页使用及比较
参考:http://tsinglongwu.iteye.com/blog/849923 以下代码模拟数据量大时情况,采用“<paging>”组件方式 前台Listbox.zul : < ...
- <meta>指定浏览器模式(browser mode)或文档模式(document mode)无效
这是前两天解决的一个故障,准确的说它不是一个SharePoint的问题,而是IE8浏览器或者说是HTML代码的问题,但我感觉还是挺有意思的,所以贴上来分享一下. 基础知识 简单的讲,就是IE浏览器中有 ...
- 【5集iCore3_ADP演示视频】5-3 iCore3应用开发平台摸校准
iCore3双核心应用开发平台基于iCore3双核心板,包含ARM.FPGA.7寸液晶屏.双通道数字示波器.任意波发生器.电压表等模块,是一款专为电子爱好者设计的综合性电子学习系统. [视频简介]本视 ...