Qtopia4.2.4手机平台移植手册
- 格式:pdf
- 大小:130.65 KB
- 文档页数:6
QT4移植到FL2440开发板的详细过程(转载并加以修改)不知道是大家的系统环境不同还是网友们打错字了,我在网上找了不下十篇有关QT移植的文档。
文档大部分相同,但有一些不一样,但我全都试了,都有一些小问题!后来我一篇文档为主,其他文档为辅,对比错误,修改文档,得出这个适合我自己移植QT的完整版,这供大家参考!因为我的板子是飞凌的2440开发板。
网上关于qt4移植到飞凌2440的文章并不是很多,其中移植这部分我也走了很多弯路,遇到很多问题,但最后还是搞出来了,其实这过去也有快一个月了,那个时候也没时间写文章,但为了跟大家一同学习,今天特花了点时间把前面的经验写下来,希望能帮到各位,好了下面就开始我们的移植之旅吧!一、系统环境(蓝色是我的配置)宿主机:window xp sp3虚拟机linux centOS 或者fedora9,10linux编译器(交叉编译器):arm-linux-gcc 3.4.1开发板:飞凌2440--LCD 3.5寸系统linux-2.6.24(2.6.28也可以)2.6.12文件系统为yaffs系统所需软件包:arm-linux-gcc-3.4.1.tar.bz2 下载地址:/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2qt-embedded-linux-opensource-src-4.5.3.tar.gz下载地址大家到网上搜一下就出来了。
tslib-1.4.tar.gz(用于触摸验证)说明:说明一下这里为什么选择这些软件,首先fl2440板子需要编译器可以是2.95.3也可以使3.4.1这里我只是试了这两个,可能其他的也可以。
而qt/embeded则是我随便下了一个。
补充:这里为了说的完整些,我把qt的各版本也给大家说一下,关于Qt,Qt/E,Qtopia Core, Qtopia。
Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。
Android平台Qt开发⼊门教程很多⼈会问,Android平台可以不使⽤Java开发应⽤程序??我做Android平台native开发之前,也有这么想过,但是我⼜想,底层系统全是c/c++代码,⽤c/c++开发Android平台程序是可能的,只是需要使⽤系统⾮公开的API(就是android源代码,⽽⾮NDK⾥⾯提供的头⽂件),⽐如libui和skia。
好了,由于我的⼯作是把C++中间件移植到Android平台,所以会对Qt for android这个项⽬⽐较了解,毕竟国内做这些的还⽐较少,所以需要参考android-lighthouse如何解决的⽂字显⽰,图形,键盘,触摸屏事件等等。
⾔归正传,我们开始今天的教程: 在Android平台开发Qt应⽤程序。
前提:你的系统必须是linux,或者MAC OS X。
在windows平台使⽤cygwin开发会遇到问题。
你⾸先需要下载或以上版本,或以上版本。
然后下载好android-lighthouse, 这个就是android平台的Qt版本,国外个⼈移植的,nokia官⽅是不会发布这样的版本的。
git软件库地址:git:///~taipan/qt/android-lighthouse.git当然你还可以下载整合了android平台的qtcreator, 软件库地址:git:///~taipan/qt-creator/android-qt-creator.git 这样你可以直接在qtcreator⾥⾯开发测试android应⽤程序,这⾥有个视频介绍qtcreator开发android应⽤程序(被墙了,可以⽤VPN或proxy访问):下载,编译android-lighthouse:打开终端,输⼊"git clone git:///~taipan/qt/android-lighthouse.git",便开始下载android-lighthouse的源码。
Qt 4.2 白皮书奇趣科技摘 要此白皮书介绍了 Qt C++ 框架。
Qt 采用“一写永逸”的方法支持开发跨平台的 GUI 应用程序。
使用单一源码树和简单的重编译方式,可以为 Windows 98 至 Windows XP、Mac OS X、Linux、Solaris、HP-UX 以及其他使用 X11 的 Unix 版本编写各种程序。
此外,还可以编译在嵌入式 Linux 平台中运行的 Qt 应用程序。
Qt 引入了一种名为“信号和槽”的独特对象间通信机制。
Qt 还为 2D 和 3D 图形、国际化、SQL、XML、单元测试提供了卓越的跨平台支持,并为特定应用程序提供了针对具体平台的扩展。
您可以使用 Qt Designer(Qt 设计者)(一种支持 IDE 集成的灵活用户界面构建器)构建器来可视化的建立 Qt 应用程序。
目录1. 简介 (6)1.1. 内容概要 (6)2. 窗体 (8)2.1. 内建窗体 (8)2.2. 定制窗体 (10)3. 信号和槽 (13)3.1. 信号和槽示例 (14)3.2. 元对象编译器 (15)4. GUI 应用程序 (16)4.1. 主窗口类 (17)4.1.1. 主窗口 (17)4.1.2. 菜单 (17)4.1.3. 工具栏 (18)4.1.4. 动作 (18)4.1.5. 停靠窗口 (19)4.1.6. 对话框 (19)4.1.7. 交互式帮助 (20)4.1.8. 多文档界面 (21)4.2. 设置 (22)4.3. 多线程 (22)4.4. 桌面集成 (23)5. Qt Designer (24)5.1. 使用 Qt Designer (24)5.2. Qt Assistant(Qt 助手) (24)5.3. GUI 应用程序示例 (26)5.4. 扩展 Qt Designer (30)6. 2D 和 3D 图形 (31)6.1. 绘图 (31)6.2. 图像 (32)6.3. 绘图设备和打印 (32)6.4. 可缩放的向量图形 (SVG) (33)6.5. 3D 图形 (34)6.6. 图形视图框架 (35)7. 项目视图 (37)7.1. 标准项目视图 (37)7.2. Qt 的模型/视图框架 (38)8. 文本处理 (39)8.1. 富文本编辑 (39)8.2. 富文本处理 (40)9. 数据库 (42)9.1. 执行 SQL 命令 (42)9.2. SQL 模型 (43)9.3. 数据敏感的控件 (44)10. 国际化 (46)10.1. 文本输入和显示 (47)10.2. 翻译程序 (47)10.3. Qt Linguist (49)11. 布局 (51)11.1. 内建布局管理器 (51)11.2. 嵌套式布局 (52)12. 样式和主题 (54)12.1. 内建样式 (54)12.2. 窗体的样式表 (55)12.3. 自定义样式 (55)13. 事件 (57)13.1. 事件的创建 (57)13.2. 事件的交付 (57)14. 输入/输出和网络 (59)14.1. 文件处理 (59)14.2. XML (60)14.3. 进程间通信 (62)14.4. 网络 (62)15. 集合类 (64)15.1. 容器 (64)15.2. 隐示共享 (65)16. 插件和动态库 (67)16.1. 插件 (67)16.2. 动态库 (67)17. 构建 Qt 应用程序 (69)17.1. Qt 的构建系统 (69)17.2.Qt 的资源系统 (71)17.3. 测试 Qt 应用程序 (71)18. Qt 的架构 (72)18.1. X11 (72)18.2. Microsoft Windows (73)18.3. Mac OS X (73)19. 特定平台的扩展和 Qt 解决方案 (75)19.1. ActiveX 的互操作性 (75)19.2. D-Bus 的互操作性 (77)19.3. Qt Solutions (77)1. 简介Qt是事实上的标准 C++ 框架,用于高性能的跨平台软件开发。
一般而言,Qt应用程序的内容可分为Qt库的编译,Qt库的移植和基于Qt的应用程序的移植。
Qt库的编译所花费的耗线性时间代价是最长的,而Qt库的移植是比较简单的一个工作,只需要让串口发送数据到开发板上即可,笔者本人使用的是虚拟机提供的一个共享工具 wmwate-tools,在拷贝某些库的时候会出现不可以预知的错误,重试也无法解决这个问题,解决办法在于把库目录打包共享,这样的出错几率会比较低。
最后,应用程序的移植,这部分所花费的非线性时间应该是最长的,在移植调试的过程中将会出现很多很多未能预知的问题,详细的解答将会在本文末尾出做详细笔录。
1.编译的环境和所需要资源:Qt源码包:Qt4.6源码包:qt-everywhere-opensource-src-4.6.3.tar.gz /qt/source/qt-everywhere-opensourc e-src-4.6.3.tar.gz交叉编译工具: arm-linux-gcc 4.1.2 arm920t-eabi.tar.gz触摸屏校验工具: tslib1.4PC虚拟机运行的OS :CentOS-5.42.安装交叉编译器:主要是解压后要在设置交叉编译器的路径信息,即要为它设置一个环境变量。
把arm920t-eabi.tar.gz 放到/opt 目录下,解压该文件:# tar xzvf arm920t-eabi.tar.gz必须说明的是,网上转载该交叉编译器解压开来,产生的是一个/opt/toolchains/arm920t-eabi目录,在这里我们进行目录移动处理,把解压开来的/opt/toolchains/arm920t-eabi目录下面的/toolchains目录的所有内容剪切到系统/opt下面去,同时删除解压开来的/opt目录。
#gedit /root/.bashrc这是编辑/root/.bashrc文件的命令,在末行添加上交叉编译器的路径信息:使用source命令重新执行刚修改过的初始化文件,而不必重启机器。
前提要成移植tslib1.4之后。
Qt:qt-everywhere-opensource-src-4.6.2.tar.gz嵌入式平台:2410arm-linux-gcc:3.4.11、在/work下面建立QT4文件夹。
2、将qt-everywhere-opensource-src-4.6.2.tar.gz放在QT4下解压。
3、进入qt-everywhere-opensource-src-4.6.2文件夹。
4、./configure -prefix /usr/local/QtEmbedded-4.6.2-arm -opensource -confirm-license -release-shared -embedded arm -xplatform qws/linux-arm-g++ -depths 16,18,24 -fast -optimized-qmake -no-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 -no-phonon -no-nis -no-opengl -no-cups -no-glib -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -nomake examples -nomake tools -nomake docs -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib -D__ARM_ARCH_5TEJ__5、gmake可能出现以下错误第一种错误:/home/lijian/QT/source/qt-everywhere-opensource-src-4.6.2/src/gui/text/qfonteng ine_ft.cpp: In member function `bool QFontEngineFT::init(QFontEngine::FaceId, bool, QFontEngineFT::GlyphFormat)':/home/lijian/QT/source/qt-everywhere-opensource-src-4.6.2/src/gui/text/qfonteng ine_ft.cpp:696: warning: converting to `int' from `qreal'{standard input}: Assembler messages:{standard input}:778: Error: register or shift expression expected -- `orrr3,r2,lsl#16'{standard input}:789: Error: register or shift expression expected -- `orrr2,r3,lsl#16'{standard input}:7748: Error: register or shift expression expected -- `orrr3,r0,lsl#16'{standard input}:7761: Error: register or shift expression expected -- `orrr1,r0,lsl#16'make[1]: *** [.obj/release-shared-emb-arm/qfontengine_ft.o] 错误 1make[1]: Leaving directory`/home/lijian/QT/build/3.4.1gcc/qt-embedded-4.6.2/src/gui'make: *** [sub-gui-make_default-ordered] 错误 2解决办法:修改src/3rdparty/freetype/include/freetype/config/ftconfig.h文件的第330行:"orr %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */修改为:"orr %0, %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */第二种错误:这个错误发生在最后编译example和demo的过程中,如果在configure的时候取消了example,则可以跳过。
学习笔记----图形界面程序Qt安装及其在2410-s上的移植学习笔记----图形界面程序Qt安装及其在2410-s上的移植本文主要内容为编译器的安装,安装与建立Qt 桌面运行环境,Qt/E 的交叉编译,建立本机Qtopia 虚拟平台,Qtopia 2.1.1 在2410-S 上的移植.预备:编译器安装编译器: arm-linux-gcc-3.4.1.tar.bz2(软件从网上下载,如果不知道从什么地方下载,google就是了。
)把软件arm-linux-gcc-3.4.1.tar.bz2拷贝到/usr/local下,在终端执行如下命令安装:tar -xjf arm-linux-gcc-3.4.1.tar.bz2生成的编译工具在目录/usr/local/arm/3.4.1/bin下,修改/etc/profile,增加如下一行。
这可以让我们直接运行arm-linux-gcc,而不必将其绝对路径都写出来,不过这得重新启动后才生效:pathmunge /usr/local/arm/3.4.1/bin硬件:UP-NETARM2410S一. 安装与建立Qt 桌面运行环境软件:PC 机操作系统REDHAT LINUX 9.0 +MINICOM +ARM-LINUX 开发环境tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gzqt-x11-2.3.2 .tar.gz软件从网上下载,如果不知道从什么地方下载,google就是了。
把本次实验用到的三个文件拷贝到/root/2410sQt目录下,以下的步骤是假设你在/root/2410sQt 下操作的。
Qt/Embedded 平台的搭建需要以下几步:第一步,解压安装包并设置环境变量tar –xzvf tmake-1.13.tar.gztar –xzvf qt-x11-2.3.2.tar.gztar –xzvfqt-embedded-2.3.10-free.tar.gzmv qt-2.3.10 qt-2.3.10-hostexportTMAKEDIR=$PWD/tmake-1.13export QT2DIR=$PWD/qt-2.3.2export QTEDIR=$PWD/qt-2.3.10-host环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包.注意: 在以下安装中,make命令执行前先执行一下make clean命令.第二步,编译Qt/Embedded。
移植QT5.6到嵌⼊式开发板(史上最详细的QT移植教程)⽬前⽹上的⼤多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更⽼的 Qtopia ,但是⽬前 Qt 已经发展到最新的 5.7 版本了,我个⼈也已经使⽤了很长⼀段时间的 qt5.6 for windows ,本⽂就来介绍⼀下QT在嵌⼊式环境的搭建。
移植以到 JZ2440 为例,使⽤韦⽼⼤提供的 ubuntu9.10 虚拟机作为移植环境。
当然,其它虚拟机也是可以的,我同样在 ubuntu14.04 移植成功,只不过需要额外装⼀些库,后⾯我会简单提及。
此外,我尝试使⽤ 4.3.2 版本的交叉编译⼯具编译 Qt5.6 ,编译过成功很多错误,编译成功之后使⽤ qt 编译应⽤程序时也存在问题,因此我是⽤的是友善提供的 4.4.3 版本的交叉编译⼯具。
建议新⼿使⽤与我相同的编译环境。
因为我们更换了编译⼯具,因此,我们有接下来的4个⼯作。
1、重新编译内核2、制作⽂件系统3、移植tslib4、移植qt⼀、更换交叉编译器⾸先,将下载好的⽂件全部放在 /work ⽬录下1、解压交叉编译器sudo tar zxvf arm-linux-gcc-4.4.3.tar.gz -C / #展开在根⽬录ls /opt/FriendlyARM/toolschain/4.4.3/bin #检查是否⽣成了编译⽬录2、设置环境变量sudo vi /etc/environment将现在原有的交叉编译器路径替换为我们新解压的交叉编译器,举例:1. #PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin"//注释2. PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/FriendlyARM/toolschain/4.4.3/bin" //增加后期测试时我发现这⾥是有问题的,由于我的安装⽬录都指定的是 usr ⽬录,需要 root 权限,然⽽在 environment 中设置的环境变量导致使⽤ root 权限 make install 过程中出现了个别的 command not found ,于是我将环境变量放到了 /etc/profile 中,这个⽂件是对所有⽤户⽣效的。
Fedora8上交叉编译qtopia4移植成功到s3c2410开发板发表于 2008-08-21 16:28:07经过一个月来的研究,参考有关帖子,终于在今天搞定了!开发平台:Fedora8 操作系统开发板:北京杨创科技 YC2410开发板(三星芯片S3C2410,ARM9)交叉编译器:arm-linux-gcc-3.4.1今天发几张照片,过几天把详细过程整理上来,与需要的人共享,共同进步!下面是我的主要参考文章,感谢原文作者!/hongjiujing/archive/2007/08/09/1733126.aspx经过几天的努力,这几天很累,熬夜和查找资料。
总之,虽然是自学的嵌入式,可是效果还可以,费了很大劲。
爱你,又想说恨你。
可是要想以后有一份不错的工作来养家糊口,只能坚持不懈的努力。
正如我一个中兴的朋友说的好:人都会有目标,可是要坚持不懈的努力那就很难。
这几天一直在忙着QTOPIA4.2.1在2410上面的移植,平台的差异,编译器的问题,可是我最后万万没有想到,还是得到一个论坛大哥的帮助,还得以解决。
问题出在make的前提是一定要是原来的源代码,不管你是make clean过,还是怎么讲都不行。
至少我在red hat linux 9上面是这样的。
教程是这样的:一.硬件平台1.主机:PC机,512M内存以上。
2.目标机:UP-NetARM2410-S实验平台。
二.移植软件资源1.Red Hat Linux 9.0(主机操作系统)2.gcc-3.4.1.tar.gz(主机编译器)3.arm-linux-gcc-3.4.1.tar.bz2(交叉编译器)4.tslib-1.3.tar.bz2(管理目标平台的触摸屏)5.qtopia-opensource-src-4.2.1.tar.gz(包含Qt,Qtopia core)2.GUI(QT)的移植过程编译前的约定:1)我的工作目录为:/mnt/nfs。
1概述1.1关于QTQt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司()出品,它的目的是提供开发应用程序用户界面部分所需要的一切,主要通过汇集C++类的形式来实现这一目的。
它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。
Qt是完全面向对象的,很容易扩展的,并且允许真正地组件编程的GUI开发工具。
QTE(QT Embedded)是它其中的一个版本,适用于嵌入式系统,QTE直接基于Linux 中的FrameBuffer设备。
QPE(Qt Plamtop Environment)是Trolltech公司所推出的针对PDA软件的整体解决方案,包含了从底层的GUI系统、Window Manager、Soft Keyboard到上层的PIM、浏览器、多媒体等方面。
目前QPE的高版本已更名为Qtopia,其包含了更多功能。
Qt/Embedded 简介Qt/Embedded 是一个为嵌入式设备上的图形用户接口和应用开发而订做的C++工具开发包。
它通常可以运行在多种不同的处理器上部署的嵌入式Linux操作系统上。
居于Qt/Embedded 的应用程序可以直接对缓冲帧进行写操作。
使用标准的Qt API,我们可以非常熟练的在Windows和Unix编程环境里开发应用程序。
本文介绍的QTE基于qt-embedded-2.3.7。
1.2Qtopia介绍Qtopia 是Trolltech为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台, Qtopia包含完整的应用层、灵活的用户界面、窗口操作系统、应用程序的启动程序以及开发框架。
Trolltech提供三大Qtopia 版本:Qtopia手机版、Qtopia PDA 版和Qtopia 消费电子产品平台,本文介绍的是Qtopia PDA 版,基于qtopia-free-2.2.0版本。
1.3Qt/Embedded 简介Qt/Embedded 是一个为嵌入式设备上的图形用户接口和应用开发而订做的C++工具开发包。
C O N FI D E N T I AL A31-A31s Android4.4快速移植指南V1.52013-12-13C O NF I D E NT I A L Revision History版本时间修改人备注V1.02013-5-13叶茂初始版本V1.12013-5-27叶茂补1024x600dpi 设置补512M 方案配置参考V1.22013-6-6叶茂增加快拍配置增加下拉菜单开关配置V1.32013-6-18叶茂增加快速开关机使能设置增加HDMI1080P 使能说明增加Miracast 功能配置说明增加开机音乐功能说明增加A31S 512M DDR 方案编译说明增加Phablet 功能配置文档V1.42013-9-27肖术骏更新4K ,快拍配置更新LCD 及UI 方向配置虚拟内存调整增加多用户方案配置增加A311G retina 配置增加Nand/eMMC 自适应配置删除原来的HDMI1080P 使能配置增加A31(s)HDMI 输出模式设置V1.52013-12-20肖术骏新增boot1.0与boot2.0sysconfig 差异配置更新编译说明(boot1.0和boot2.0差异)新增OTA 升级说明删除原来的配置recoveryUI 方向属性说明增加预装APK 的说明增加ION 预留内存配置C O N F IDE N T I AL 目录1.文档说明 (5)2.代码下载 (5)3.方案配置准备 (5)3.1.lichee/linux-3.3 (5)3.2.lichee/tools (5)3.2.1.Boot1.0与Boot2.0 (5)3.3.android/device/softwinner/fiber-xxx (7)4.编译说明 (8)5.方案的客制化 (9)5.1.LCD 种类说明 (9)5.2.开机logo 替换 (10)5.3.DPI 与layout (10)5.3.1.LCD 的DPI 计算 (10)5.3.2.Android 标准案中的DPI 选择 (11)5.3.3.方案的DPI 设置 (11)5.4.LCD 及UI 方向配置 (11)5.4.1.配置系统UI 方向属性 (11)5.4.2.配置camera 方向 (12)5.5.4K Player 的配置 (12)5.5.1.配置说明 (12)5.5.2.配置文件修改范例 (14)5.6.快拍APK 配置 (14)5.6.1.配置文件修改范例 (15)5.7.虚拟按键设置及截屏方法 (16)5.8.默认墙纸设置 (16)uncher 桌面默认图标和快捷栏设置 (16)5.10.默认字体大小设置 (17)5.11.默认LCD 关闭时间设置 (17)5.12.下拉菜单QuickSetting 中蓝牙和飞行模式开关 (17)5.13.开机音乐 (18)5.14.Miracast 功能打开和关闭 (18)5.15.快速开关机功能使能和关闭 (18)5.16.Phablet 配置 (18)5.17.虚拟内存调整 (18)5.18.Nand/eMMC 固件自适应 (19)5.19.多用户方案配置 (19)5.19.1.分区表 (19)5.19.2.init.sun6i.rc (19)5.19.3.Vold.fstab (20)5.19.4.storage_list.xml (21)C O N FI D E N T I AL 5.19.5.fiber-xxx.mk.......................................................................................................................215.19.6.config.xml..........................................................................................................................225.20.A311G retina 方案配置...............................................................................................................225.20.1.4K 配置..............................................................................................................................225.20.2.browser...............................................................................................................................235.20.3.窗口动画和过渡动画.......................................................................................................235.20.4.预装APK..........................................................................................................................235.21.A31(s)HDMI 输出模式设置........................................................................................................245.21.1.控制菜单是否显示...........................................................................................................245.21.2.HDMI 全屏显示................................................................................................................255.21.3.HDMI 默认输出模式........................................................................................................255.22.OTA 升级......................................................................................................................................255.23.预装APK.....................................................................................................................................255.24.ION 预留内存配置.......................................................................................................................266.Declaration. (28)C O N F IDE NT I AL 1.文档说明本文档为《A31_Android 内容定制说明文档1.0.doc 》和《A31s 移植说明文档.pdf 》的补充文档,这两个说明文档中所述内容在此文档中不再重复。
Qtopia 4.2.4 手机平台移植手册Qtopia版本:Qtopia-opensource-4.2.4,这个版本带有手机桌面环境交叉编译器:arm-linux-gcc 4.1.2 支持EABI操作系统平台:Linux -- Red Hat 9.0开发板平台:Arm -- TX2440A说明:这个交叉编译器是openmoko提供的,目前只能用这个编译,因为我以前用过4.3.2版本的,能正常编译,但运行时出现了段错误,换用3.4.1版本的,部分程序不能正常运行。
很多网友也遇到了这个情况,后来查出原因是编译器的问题,换了4.1.2就可以了。
说明:由于移植完Qtopia后,根文件系统的大小是70M左右,如果我们使用的是64M 的NAND和64M的SDRAM,可能就装不下了,所以只能用挂载NFS的方法,实现qtopia 的启动。
(挂载NFS,参考《NFS服务器配置》),当然你也可以自己裁剪qtopia,可以裁到60M以下。
触摸屏校正程序:tslib-1.4tslib已经移植好,参考《tslib-1.4移植手册》,tslib的目录在根文件系统的/usr/local目录下下面开始移植:安装目录是个比较重要的地方,编译Qtopia不同于其他的程序,Qtopia不应当在源码目录下编译。
首先最好设置两个目录,一个是源代码目录,一个是编译目录。
#mkdir qtopia,把qtopia源码包解压到该目录下,并改名为source#tar xzvf qtopia-opensource-src-4.2.4.tar.gz#mv qtopia-opensource-src-4.2.4 source再建一个编译目录:#mkdir target然后进入target目录下,执行../source/configure ………,就可以在target 目录下编译source的源码了。
建这个目录是为了和qtopia进行交互,后面将会详细介绍。
再建一个安装目录,就是执行make install时的安装目录#mkdir –p /usr/local/qtopia 这个建在虚拟机下,同样要在根文件系统中创建这个目录,做为qpe的启动目录。
以下操作都是在source中进行的.修改qtopiacore的一些宏定义:进入source/qtopiacore/qconfig-qpe.h首先注释掉关于鼠标光标的宏定义,让程序运行时,触摸屏中央有光标出现:// Qtopia Core/*#ifndef QT_NO_QWS_CURSOR# define QT_NO_QWS_CURSOR#endif*//*#ifndef QT_NO_QWS_MOUSE# define QT_NO_QWS_MOUSE#endif#ifndef QT_NO_QWS_MOUSE_AUTO# define QT_NO_QWS_MOUSE_AUTO#endif*/其它宏定义根据需要进行注释。
保存后将qconfig-qpe.h拷贝到global目录。
# cp qtopiacore/qconfig-qpe.hqtopiacore/qt/src/corelib/global/qconfig-qpe.h注释掉其他文件里的QT_NO_QWS_CURSOR的定义# vi qtopiacore/qt/src/corelib/global/qfeatures.h注释掉如下内容:/*#if !defined(QT_NO_QWS_CURSOR) && (defined(QT_NO_CURSOR))#define QT_NO_QWS_CURSOR#endif*/保存退出。
# vi qtopiacore/qt/src/corelib/global/qglobal.h注释掉以下内容://# define QT_NO_QWS_CURSOR修改源码包中两个头文件的名字# cd src/libraries/qtopiabase/# cp custom-linux-cassiopeia-g++.h custom-linux-arm-g++.h# cp custom-linux-cassiopeia-g++.cpp custom-linux-arm-g++.cpp最后还有一个时区的问题,qpe默认到/usr/share/zoneinfo下找时区信息,如果找不到时区信息,运行时会出错。
一种方法是在根文件系统上建立文件夹mkdir –p usr/share/zoneinfo把虚拟机目录下/usr/share/zoneinfo中的所有文件拷到刚创建的文件夹中 第二种方法是修改源代码,使它指向自己的文件夹,在src/libraries/qtopia/qtimezone.cpp中,将114行的/usr/share/zoneinfo/改为/usr/local/qtopia/zoneinfo,保存退出。
这时qpe就到自定义的目录下找时区信息了。
配置:关于配置的命令选项,网上写的都大体相同,但内容都不一样,五花八门,我把这些综合一下:有几点说明:我用的触摸屏是320x240的,tslib在/usr/local/tslib目录下 在target目录下执行:#../source/configure -release -image /usr/local/qtopia-prefix /usr/local/qtopia -xplatform linux-arm-g++ -arch arm-no-qvfb -displaysize 320x240 -no-modem -quicklaunch–no-bluetooth -no-drm -no-infrared -extra-qtopiacore-config"-little-endian -release -xplatform qws/linux-arm-g++-embedded arm -qconfig qpe -depths 8,16,32 -qt-sql-sqlite -qt-kbd-usb -no-kbd-tty -no-mouse-linuxtp -qt-mouse-tslib -I/usr/local/tslib/include-L/usr/local/tslib/lib"主要配置选项解说如下:-xplatform linux-arm-g++ -arch arm目标平台为arm-linux,体系结构为arm。
-no-qvfb目标平台已支持framebuffer,因而不使用虚拟帧缓冲。
-extra-qtopiacore-config为Qtopia core 配置选项。
-xplatform qws/linux-arm-g++ -embedded arm目标平台编译配置文件使用qtopiacore/qt/mkspecs/qws/linux-arm-g++目录下的配置文件,嵌入式平台为arm。
-qconfig qpe使用配置文件qconfig-qpe.h,若使用qconfig-large.h配置文件,则使用-qconfig large选项。
-qt-sql-sqlite数据库支持Sqlite。
-qt-kbd-usb键盘支持usb协议。
-no-mouse-linuxtp -qt-mouse-tslib-I/usr/local/tslib/include -L/usr/local/tslib/lib触摸屏协议不支持linuxtp,支持tslib,并在后面添加上刚才编译的tslib的头文件和库。
如果没有什么错误,就可以make, make install了,这个时间比较长,2个小时左右。
make的时候可能会出现错误,应该是和交叉编译器有关,因为我们以前习惯是把交叉编译器放在/usr/local/arm/目录下,但是如果用4.1.2版本的就会出点问题,所以解压时加上参数:-C ,那么就直接解压到了:/opt/toolchains/arm920t-eabi/目录下。
然后设置环境变量,修改/etc/profile文件,加上一句export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH,保存退出,执行#source /etc/profile,查看一下版本:#arm-linux-gcc –v ,确保是 4.1.2版本的,继续make过一会还会出现一个错误,没有找到:arm-linux-ranlib查看一下/arm920t-eabi/bin/目录下,发现没有arm-linux-ranlib这个文件,因为arm-linux-XXX文件是一个连接文件,它连接到arm-angstrom-linux-gnueabi-XXX,我们把arm-linux-ranlib,做一个软连接: #ln –s arm-linux-ranlib arm-angstrom-linux-gnueabi-ranlib然后用ll命令查看:arm-linux-ranlib->arm-angstrom-linux-gnueabi-ranlib说明已经建立软连接了,再继续编译就可以能过了。
如果以上成功完成了,下面就可以准备运行了。
如果是用NFS方式启动,那么只需要确保虚拟机的Linux目录下有如下文件夹:/usr/local/qtopia /usr/local/tslib /usr/share/zoneinfo就可以,只需要配置一下启动脚本,开机自己挂载NFS,就能启动了。
如果是直接烧入到NAND中,需要把以上这三个文件夹中的内容拷贝到根文件系统中的相应目录下,把tslib/bin/ts_calibrate和/usr/local/qtopia/bin/qpe拷贝到/usr/bin/目录下,再配置启动脚本,不需要挂载NFS,直接启动。
下面配置一下启动脚本,我把它写成一个脚本,然后在在etc/init.d/rcS中运行这个脚本新建一个名为 qtopia的文件,加入可执行权限,并把它放到/usr/bin目录下,内容为:#!/bin/shmount -t nfs -o nolock 192.168.220.100:/usr/local/qtopia/usr/local/qtopiaecho "mount nfs OK!"//以上三行,只在需要挂载NFS时加上export T_ROOT=/usr/local/tslibexport QTOPIA=/usr/local/qtopiaexport TSLIB_CONSOLEDEVICE=noneexport TSLIB_FBDEVICE=/dev/fb0export TSLIB_TSDEVICE=/dev/event0export TSLIB_CALIBFILE=/etc/pointercalexport TSLIB_CONFFILE=$T_ROOT/etc/ts.confexport TSLIB_PLUGINDIR=$T_ROOT/lib/tsexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib:$QTOPIA/lib export QWS_SIZE=320x240export QWS_MOUSE_PROTO=“Tslib:/dev/event0”export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0if [ -f "$TSLIB_CALIBFILE" ]; then$QTOPIA/bin/qpe -qwselsets_calibrate$QTOPIA/bin/qpe -qwsfi然后在/etc/init.d/rcS文件中加入一句:qtopia&配置完后就可以运行了,如果是用NFS启动,那么NFS一定要成功挂载,才能正常运行。