FS210开发板上Qt4.7.0移植过程
作者:冯老师,华清远见嵌入式学院讲师。
1. 搭建Qt开发环境平台
1、开发环境:ubuntu 12.04
2、交叉编译链:arm-cortex_a8-linux-gnueabi
3、开发板:FS210
2. Qt移植所需的工具
首先,我们可以从官网下载Qt源码,
1) qt-everywhere-opensource-src-4.7.0.tar.gz QT的源码包(库)
2) qt-sdk-linux-x86-opensource-2010.05.bin QT-IDE开发软件
3) tslib-1.4.tar.gz QT触摸校验程序
这里我们项目文档中已经给出三个源码。源码位置:该光盘下:\移植相关\QT相关\。
下面介绍一下三个源码的用途:
1) qt-everywhere-opensource-src-4.6.3.tar.gz为Qt的源码包,用来编译各种Qt的库等,这里需要编译三次,分别为x11版本,embedded版本和arm版本(需要应用到不同的平台上);
a. 编译x11版只是为了得到qvfb工具,至于qvfb的用途后面自会说明;
b. embedded版本为Qt 的嵌入式版本,将来和qvfb配合使用;
c. arm版本很好理解,即要放到开发板上的东西。
2) qt-sdk-linux-x86-opensource-2010.04.bin是开发qt的IDE,这里我用的是linux版本,用它来开发自己的Qt应用。
3) tslib-1.4.tar.gz为触摸屏校正程序,编译qt的arm版本的时候需要tslib的库,tslib编译后会生成触摸屏校正程序(t”s_calibrate),用来给开发板的触摸屏进行校正。
3. tslib的移植
1) 拷贝“该光盘下:\移植相关\QT相关\”目录下的tslib-1.4.tar.gz到linux系统。
2)解压源码:
$ tar -zxvf tslib-1.4.tar.gz
$ cd tslib-1.4
3)执行autogen.sh脚本生产configure文件
这一步需要安装一些工具,如:在ubuntu系统下可以执行:
$ sudo apt-get install autotools-dev
$ ./autogen.sh
如果出现以下错误:则处理如下
./autogen.sh: 4: autoreconf: not found
是在不同版本的 tslib 下执行 autogen.sh 产生。它们产生的原因一样,是
因为没有安装automake 工具,(ubuntu 10.04)用下面的命令安装好就可以了。
$ sudo apt-get install autoconf automake libtool
4) 执行confugure生成Makefile文件
a. $ echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
b. $ vi tslib-1.4/plugins/input-raw.c
注释掉 static int check_fd函数中的部分代码,如下所示。
c. $./configure --host=arm-cortex_a8-linux-gnueabi --prefix=/home/linux/tslib --cache-file=arm-linux.cache
说明:
--host :是指你的交叉编译器的前缀;例如:
你的交叉编译器是arm-linux-gcc,则--host=arm-linux。
如果是arm-none-linux-gnueabi-gcc,则--host=arm-none-linux-gnueabi。
--prefix :是你执行make install 的时候编译后生成的可执行文件和库文件以及配置文所安装的目录,这个目录不能和tslib源码目录相同;
--enable-inputapi=no :看你的触摸屏驱动是否支持ioctl操作,如果支持就不用写上,不支持就要添上,如果不添加会有ts_open:Inappropriate ioctol for device configure文件下还有很多选项,你可以执行./configure --help 来进行选择其他项,不过在这里这些选项就够了。
5) 编译安装
$ 修改tests/ts_calibrate.c 修改226行和229行,加上0666
$ make
$ make install
6) 把指定安装目录下的tslib的文件都拷贝到你所挂载的根文件系统下
$ cp -a /home/linux/tslib /source/rootfs
7) 修改/source/rootfs/tslib下的etc目录中ts.conf文件
#vim ts.conf
将第二行的#module_raw input修改成module_raw input
注意一定要顶格写,否则程序执行时会发生读取ts.conf错误
每次重编译tslib并安装后,都要重新修改/etc/ts.conf.
8)导出环境变量
在/source/rootfs/etc/profile中添加如下代码:
export TSLIB_TSDEVICE=/dev/event4
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/tslib/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/tslib/etc/ts.conf
export set HOME=/root
export set QPEDIR=/qt-everywhere
export set QTDIR=/qt-everywhere
export set LD_LIBRARY_PATH=/qt-everywhere/lib:/tslib/lib:$LD_LIBRARY_PATH
export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"
export TSLIB_TSEVENTTYPE=H3600
export set QT_QWS_FONTDIR=/qt-everywhere/lib/fonts/
export set PLUGIN_PATH=$QTDIR/plugins
export set PATH=$QPEDIR/bin:$PATH
export PATH LD_LIBRARY_PATH
export TSLIB_ROOT=/tslib
export QWS_SIZE=800x480
说明:
TSLIB_TSDEVICE //触摸屏设备文件名。
TSLIB_CALIBFILE //校准的数据文件,由ts_calibrate校准程序生成。
SLIB_CONFFILE //配置文件名。
TSLIB_PLUGINDIR //插件目录
TSLIB_CONSOLEDEVICE //控制台设备文件名
TSLIB_FBDEVICE //设备名
以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发板上的/dev目录下的设备节点相对应。在以往项目中设备文件名有可能是/dev/event4
9)插上屏后,在开发板上运行/tslib/bin下的测试程序。
把交叉工具链中的库拷贝到/source/rootfs/lib下面
$ cp /home/linux/toolchain/arm-cortex_a8-linux-gnueabi/lib/* /source/rootfs/lib
开发板上执行:# /tslib/bin/ts_calibrate
4. 移植QT lib <4.7.0 for arm>
把该光盘下:\移植相关\QT相关\文件夹下的qt-everywhere-opensource-src-4.7.0-beta2.tar拷贝到linux环境下。不能/mnt/hgfs/挂载目录下执行。因为此文件里面有ln 连接文件。Window和linux的磁盘不一样,不支持ln。
1) 解压源码
$ tar xvf qt-everywhere-opensource-src-4.7.0-beta2.zip
2) 改配置文件,指明交叉编译工具链
$ cd qt-everywhere-opensource-src-4.7.0-beta2
$ vi mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf
3) 配置
$ ./configure -prefix /qt-everywhere -embedded arm -release -opensource -fast -no-accessibility -no-scripttools -no-mmx -no-multimedia -no-svg -no-webkit -no-3dnow -no-sse -no-sse2 -silent -qt-libpng -qt-libjpeg -no-libtiff -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-gnueabi-g++ -little-endian -qt-freetype -depths 4,8,12,16,24,32 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-tslib -I/home/linux/tslib/include -L/home/linux/tslib/lib
备注:红色的为连接TSLIB库的路径,一定要正确。
4) 编译并安装
$ make
$ sudo make install
5) 把prefix制定的安装目录全部拷贝到开发板上
$ cp -a /qt-everywhere /source/rootfs
5、在板子下配置环境变量:(该步骤已做)
1) 修改/source/rootfs/etc/profile添加如下内容:
export LD_LIBRARY_PATH=/qt-everywhere-/lib:$LD_LIBRARY_PATH
export QWS_SW_CURSOR
export QT_QWS_FONTDIR=/qt-everywhere/lib/fonts
(// fonts目录下放字体集,使qt支持中文。(删除其他字体,只留以下三个)
wenquanyi_130_75.qpf wenquanyi_150_50.qpf wenquanyi_150_75.qpf)
export set HOME=/root
export set QPEDIR=/qt-everywhere
文章来源:华清远见嵌入式学院,原文地址:http://www.embedu.org/Column/Column763.htm
FS210开发板上Qt4.7.0移植过程的更多相关文章
- 在TQ2440开发板上ping 127.0.0.1不通
问题:在TQ2440上ping 127.0.0.1,提示错误 ping: sendto: Network is unreachable 解决方法:ifconfig lo 127.0.0.1 up ...
- zedboard开发板上移植opencv代码(立体匹配)
前言 公司要做立体匹配相关的项目,已有matlab和c++版本,可是不能做到实时显示立体信息,想要硬件实现实时,无奈本渣也是个硬件的新手,先按照实验室lyq同学的思路在zedboard开发板的纯ARM ...
- iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板
本文转自迅为开发板:http://www.topeetboard.com 在前面实战教程中,移植了“串口文件传输工具”,整个移植过程是比较简单的,而且我 们没有做任何协议方面的了解,只是“配置”+“编 ...
- 物联网操作系统HelloX已成功移植到MinnowBoard MAX开发板上
在HelloX开发团队的努力下,以及Winzent Tech公司(总部在瑞典斯德哥尔摩)的支持下,HelloX最新版本V1.78已成功移植到MinnowBoard MAX开发板上.相关源代码已经发布到 ...
- 很带劲,Android9.0可以在i.MX8开发板上这样跑
米尔MYD-JX8MX开发板移植了Android9.0操作系统,现阶段最高版本的Android9.0操作系统将给您的产品在安全与稳定性方面带来更大的提升.可惜了,这里不能上传视频在i.MX8开发板跑A ...
- 【开发实录】在鸿蒙开发板上使用websocket(移植自librws库)
librws: Tiny, cross platform websocket client C library 相关代码可在下面下载,也可进入librws: 将librws移植到鸿蒙Hi_3861开发 ...
- 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南
昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...
- TQ210开发板NFS挂载android4.0.4的rootfs的方法
首先声明的是,我使用的u-boot是自己移植的u-boot2013.01.01而非天嵌官方的那个,至于使用官方的u-boot如何去实现nfs挂载rootfs我没怎么研究过,不过原理方法都是一致的. 主 ...
- 使用Xilinx SDSoc在Xilinx zcu102开发板上编程HelloWorld
关于Xilinx SDSoc的介绍我就不再复述了,我理解的也不一定准确,可以阅读官方文档了解SDSoc,你可以把它理解为一个集成开发环境 (IDE),通过SDSoc我们能够简单快速的对Xilinx的开 ...
随机推荐
- Linux环境下stl库使用(vector)
step1: #include <iostream> #include <vector> #include <string> using namespace std ...
- Java中的异或(转)
在java程序里面的异或用法: 相同输出0,不同输出1,例如: System.out.println(1^1); 输出0 System.out.println(1^2):输出3,因为最后2个低位都不一 ...
- Codeforces Testing Round #12 C. Subsequences 树状数组
C. Subsequences For the given sequence with n different elements find the number of increasing s ...
- MOB 短信验证
工具/原料 Android Studio mob SDK中的jar 和.so文件 方法/步骤 1 把3个jar 放入libs 并添加依赖 在项目的build.gradle里面 在你的项 ...
- windows下配置python库
安装easy_install: 下载ez_setup.py文件,命令行执行python ez_setup.py; 将python文件夹下的Scripts文件夹加入到系统path路径: 检查easy_i ...
- AngularJS开发之_指令
指令是什么? 指令是我们用来扩展浏览器能力的技术之一.在DOM编译期间,和HTML关联着的指令会被检测到,并且被执行.这使得指令可以为DOM指定行为,或者改变它. 1.指令的匹配模式 index ...
- Android拓展系列(9)--Android视频录制screenrecord命令
在Android4.4 Kitkat上集成了一个比较好用的视频录制功能.参考:http://forums.androidcentral.com/android-4-4-kitkat/329674-ho ...
- poj3186 Treats for the Cows(区间)
题目链接:http://poj.org/problem?id=3186 题意:第一个数是N,接下来N个数,每次只能从队列的首或者尾取出元素. ans=每次取出的值*出列的序号.求ans的最大值. 样例 ...
- hdu1160 LIS变形
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1160 题意:两个子序列 一个是升序,一个是降序,求最长的子序列是多长,并输出路径.(答案不 ...
- css3 -- 媒体查询
媒体查询: 1.媒体查询优点:基于设备的属性检测设备,这样一来就不需要使用浏览器探测脚本,之后允许直接安装设备的功能去设定目标样式表,也就是说检测用户使用小屏幕的设备,css规则就会调整以适应该屏幕的 ...