图4 编译和安装Jpeg库
为了之后在任何目录下面都能够使用工具链,必须要对路径进行设置。用VI编辑器打开/etc/profile文件并添加下述的路径:
PATH=/usr/local/arm/2.95.3/bin:$PATH
3.2 QT/E的编译
准备文件:
Qt 是一个跨平台的 C++ 图形用户界面库,由挪威 TrolLTEch 公司出品,目前包括QT/X11(基于 Framebuffer)和QT/E(Qt Embedded)。Konqueror/E就是基于QT/E图形用户界面库的,因此在编译Konqueror/E之前必须先编译QT/E。
编译QT/X11的唯一目的就是为编译QT/E提供uic(用户接口编译器),uic用来把.ui文件转成.h和.cpp文件。
如图5所示将QT/X11编译完毕生成uic拷贝到QT/E的bin目录下面。接下来编译QT/E,在编译QT/E之前先要将Qtopia的一个配置文件拷贝到QT/E中,表示QT/E的配置是按照Qtopia要求的。
cp qtopia-free-1.7.0/SRC/qt/qconfig-qpe.h qt-embedded-2.3.7/src/tools/
之后就可以设置环境变量,编译QT/E了。
图6所示编译QT/E完成后,在QT/E的lib目录下会生成libqte.SO.2.3.7库文件。
3.3 图形界面Qtopia的编译
准备文件:
Qtopia 是基于QT/E的图形界面应用程序集,通过Qtopia真正地将图形界面展现在用户的眼前。如果说QT/E是灵魂,那么Qtopia就是肉体。而Konqueror/E在一般情况时是在Qtopia环境下运行的,所以要用到Qtopia库。也有少数情况时用不到,也就是说系统启动的时候只运行Konqueror/E。那么只要在编译Konqueror/E的时候配置稍作修改即可,本文只介绍前者。
在编译QT/E的时候已经将Qtopia的配置传递给了QT/E,因此编译Qtopia时就非常容易了:
cd qtopia-free-1.7.0/src
./configure -xplatform linux-arm-g++
make
这样在bin目录下会生成一组应用程序集,在lib目录下产生了一系列的Qtopia库,给Konqueror/E的编译做准备。
3.4 Konqueror/E的编译和安装
准备文件:
经过实践证明上面版本的Konqueror/E比较稳定,因此我们选择了该版本的源文件进行编译。
3.4.1 Konqueror/E的编译
在编译Konqueror/E之前,必须将QT/E和Qtopia的路径指定给编译器。这样编译器才能找到相应的库,从而为Konqueror/E提供相应的库文件。
图7.1 设置环境变量
如图7.1所示,先要设置一些必要的环境变量,然后再按照图7.2配置和编译Konqueror/E。当然在编译配置时,这些配置选项都是有各种含义的。有些配置选项不能搞错,不然就会编译不通过,甚至有时候连配置都不能完成。比如QT/E路径指定不对就会在配置时出错,这些都需要在实际的移植过程中才能体验到的。
图7.2 配置和编译Konqueror/E
3.4.2 Konqueror/E的安装
在Konqueror/E编译完成之后,目录下会生成相应的可执行文件。因此Konqueror/E的安装主要是指将可执行文件和一些其他的配置文件拷贝到嵌入式系统的文件系统中去就行了。一般来说,Konqueror/E运行需要五个文件,图8描绘了这五个文件的原来所在路径和安装到目标板的路径,这些都要手动去拷贝。
图8 文件的原来所在路径和安装到目标板的路径
当然在目标板上运行Konqueror/E之前,必须指定几个环境变量,否则Konqueror/E会找不到库文件而终止运行。图9设置了这些环境变量,并运行Konqueror/E。
至此,Konqueror/E已经安装完毕。但是Konqueror/E缺省情况下是不支持中文网页的,而且界面是英文的。某些情况下为了满足特定的需要,这两者是非常必要的。因此在下一小节里边介绍了Konqueror/E的汉化和支持中文。
3.5 Konqueror/E的中文化
Konqueror/E的中文化可分为两个部分: 一个是Konqueror/E本身控制界面的汉化;另一个是Konqueror/E对中文网站的访问支持。和其他基于Qt 的应用程序一样, Konqueror/E中对所有用户可见的文本使用tr()将文本标识出来。这样利用Qt 提供的翻译工具将很容易把这些文本转化成所需要的语言,同时Qt 提供了两个宏:QT_ TR_NOOP ( ) 和QT_ TRANSLATE_ NOOP ( ) 。
用它们标示出文本,以便于被lupdate 工具提取。具体操作步骤如下:
(1)在需要翻译源码的XXX. pro 中加入一项: TRANSLATIONS = XXX. t s。
(2)运行lupdate XXX. pro ,生成XXX. t s 文件。该工具识别出t r () 结构和上面描述的QT_ * _NOOP 宏,产生. t s 文件(通常每种语言一个) 。
(3)运行lrelease XXX. pro 将生成XXX. qm。这是一个没有翻译成其他语言的. qm 文件(也可以用Qt Linguist生成) ,可以把它改名为XXX_en. qm。
(4)启动Qt Linguist 将XXX. t s 文件导入,将需要翻译的内容翻译成中文。翻译完成之后, 点击File →Re2lease ,将文件保存为XXX_zh. qm。
(5)翻译文件保存之后, 在程序源码中需要构建Qt ranslator 实例,利用Qt ranslator 将翻译文件加载到图形界面上。
图10 Konqueror/E的中文化
在Konqueror/ embedded 中可以通过修改main. c 中的这段代码来实现UI 的汉化:
由于QT/E是可以支持Unicode编码的,因此Konqueror/E也可以支持中文。但是在编译QT/E的缺省配置中是不支持Unicode的,因此我们要手动修改qconfig-qpe.h文件的配置:
注释掉38行,#define QT_NO_CODECS。
这样修改完毕以后,重新开始编译QT/E以及Qtopia和Konuqueror/E,Konqueror/E就能接受Unicode编码的汉字了。但是要在Konqueror页面上显示,就必须要有相应的字体,因此对Konqueror/E源代码中/konq-embed/droPIN/ kglobalsettings.cpp文件进行修改:
将"helvetica"改为"unifont"后重新编译Konqueror/E,这样Konqueror/E中就能显示中文字体的页面了。
4 小结
本文对嵌入式浏览器Konqueror/embedded技术核心做了简要分析,阐明了该浏览器的先进性与可扩展性,而且该浏览器是开源的符合GNU条款的自由软件。因此对Embedded-Linux下嵌入式浏览器的使用者来说,Konqueror/embedded无疑是一个最佳选择。但是在Konqueror/embedded移植到实际使用系统中,存在一系列的问题。如果说没有移植经验的人就会觉得完全无从下手,本文除了移植Konqueror/E以外还完成了Qtopia的移植。因为本文最终达到了在图形界面Qtopia上运行Konqueror/E。
笔者结合了实际的移植经验,详细地说明了整个移植步骤。将理论与实际结合起来,而不是纸上谈兵。因此本文对嵌入式浏览器的移植有着非常重要的实际意义,同时也希望能给浏览器开发者和使用者们带来参考价值。
参考文献
[1]张晓林,崔迎炜. 嵌入式系统设计与实践. 北京:北京航空航天大学出版社 2006
[2]倪继利,Qt及Linux操作系统窗口设计. 北京:电子工业出版社, 2006
[3]http://www.konqueror.org/embedded/
[4]http://www.trolltech.com/