




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Konqueror嵌入式浏览器的分析及移植详解邓罡基金项目:湖南省教育厅资助科研项目(04C393),张小梅2,刘宏1 1(湖南师范大学 数学与计算机科学学院 长沙 410081)2(贵州凯里学院 数学与计算机科学系 凯里 556000)E-mail: 摘要:本文介绍了Konqueror/Embedded嵌入式浏览器的总体结构及主要功能模块,并分析了几个实现的关键技术;最后,详细说明了Konqueror/Embedded在基于Motorola i.MX21的嵌入式系统中移植的问题和解决办法。关键字:Konqueror/Embedded;嵌入式浏览器;移植;Kparts;Khtml中图分类号:TP393.092 文献标识码: AAnalysis on Konqueror Embedded Browser and Particular illumination of PortingDeng Gang1, Xiao-Mei Zhang2, Liu Hong11(College of Mathematics and Computer Science, Hunan Normal University, Changsha 410081)2(Department of Mathematics and Computer Science, Kali Universtiy, Kaili 556000)Keywords: Konqueror/Embedded;Embedded Browser;Porting;Kparts;KhtmlAbstract: This paper introduces main function module and general structure of Konqueror/Embedded, analyses key technology of realization;Finaly, particularly illuminates the problem and solution of porting Konqueror/Embedded browser to embedded system based on Motorola i.MX21.1 Konqueror/Embedded浏览器的概述现在基于Linux操作系统的桌面浏览器家族已经发展到相当的规模,目前市面上可供用户选择的桌面浏览器就有20多种1,但是面向嵌入式系统的浏览器还存在种种缺陷,要么是不稳定,要么对html、flash支持不是很完善。目前Konqueror/embedded作为一款开源、免费的嵌入式浏览器正逐渐受到用户的亲睐。Konqueror/embedded是针对嵌入式Linux ,由著名的桌面操作环境KDE下的浏览器Kon-queror派生出来的。Konqueror/embedded将Konqueror中关于KHTML 、SSL 、Javascript等内容继承了下来,同时简化了Konqueror中很多类的定义,剔除了依赖于KDE lib部分,以适应在不同的嵌入式平台上移植和运行。两者都是基于Qt 的,因此Konqueror/embedded也可以运行在Qt/ X11 环境下。Konqueror/embedded完整地支持HTML4 和css(部分支持css2)、JavaScript( ECMAScript 262) 、cookies、SSL 、IPv6;支持和管理兼容XBEL的书签,并且能够很好地支持中文网页浏览2。2 Konqueror/Embedded总体结构2.1 Konqueror/Embedded的构成图1 Konqueror/embedded层次结构图Konqueror/embedded是由底层网路连接、图形化用户界面和处理HTML绘制的引擎KHTML构成的。底层的通信协议实现是基于KIO/Slave机制来实现的;GUI界面采用了Kparts 组件技术和Qt中的基本构件;而作为Konqueror/embedded的核心KHTML , 则运用了文档对象模型(DOM)所提供的API接口,并在DOM树上挂接javascript引擎、CSS解析器以及渲染引擎。2.2 Konqueror/Embedded主要功能模块嵌入式浏览器Konqueror/embedded的核心功能模块包括:语法语义解析模块、DOM模块、脚本引擎模块、布局引擎模块和显示模块。(1)语法语义解析模块语法语义解析模块的解析功能分为两部分: 对接收到的字节流进行分词,解析为关键字;调用解析器检验关键字是否合法,若是合法的关键字,则按照规则插入到DOM树中。HTML的标记(tag)和属性(attribute)统称为HTML的关键字。基本上所有HTML4.0规范的标记都在此功能模块中获得支持。但一些在DHTML中使用到的属性缺少支持。(2)DOM模块DOM模块对经过解析的标记进行文法检查,并把属性看作节点,按照标记的语义包含关系以及先后顺序组织成DOM树。它给HTML文档定义了一个与平台无关的程序接口。使用该接口可以控制文档的内容、接口和样式。(3)绑定模块绑定模块负责ECMA脚本的绑定工作。在Konqueror/embedded浏览器中,脚本的编写完全按照ECMA262标准。所谓绑定,就是按照ECMA262标准,对HTML对象进行登记,使之成为对象,可以被脚本访问。(4)布局引擎模块布局引擎负责把DOM模块形成的DOM树进行排版、布局。(5)显示模块显示模块负责显示经过布局引擎排版的内容。以上部分在实现的时候,非常灵活,不但可以把联系紧密的模块合并起来成为大的模块,还可以细分为很多小的模块,来完成具体的功能3。3 Konqueror/Embedded关键技术3.1底层通信协议的实现机制在KDE中采用I/O Slaves系统来访问各种数据。Konqueror/embedded沿用这种方式,通过I/O Slaves和进程间管道通信机制实现完整的浏览器功能。简单说来,I/O Slaves就是那些从网络上获取文件或目录的进程,它们依赖桌面通信协议DCOP(Desktop Communications Prot-ocol)与其他进程进行通信;但是,DCOP的实现又依赖于X11 ICE( Inter Client Exchange)库。在嵌入式平台上移植体积庞大的X11 lib是不现实的。Konqueror/embedded采用了另外一种进程间的通信机制:通过管道(pipe)实现主进程和其他I/O Slaves子进程之间的通信。KDE的文件管理器和Konqueror等应用程序具有网络透明的特征, Konqueror/embedded也继承了这个特性。Konqueror/embedded不管对本地文件还是远程文件都采用URL(统一资源定位符)进行标识。网络透明性允许应用程序的用户使用与处理本地文件相同的方法来处理远程文件。在KDE的文件选择器能够通过诸如FTP、SMB 甚至Webdav(在KDE3中)等方式列出远程目录。网络透明性和I/O Slaves机制是靠KIO类来实现的。KIO类提供了几乎所有的文件管理功能。应用程序使用这个库的最简洁的方法是通过类KIO:NetAccess(针对简单的同步访问)或是通过类KIO:Job(针对负责的异步任务)。包含两种传输方式:u 同步传输方式:它是为那些只需要简单网络应用的程序比如说下载一个文件。大多数情况下,同步传输方式已经是足够了,类KIONetAccess就提供了这方面的支持,并且KIONetAccess提供了简单的API如:download,upload,removeTempFile等.它同时也提供交互方式如通过对话框来显示目前的进度。 u 异步传输方式:类KIOJob是为象浏览一张网页等的高级应用而设计的。在这种情况下,我们希望一个异步传输的方式。 3.2 Kparts组件技术 Kpart部件的主要思想是重用性。通常一个应用程序需要使用另外一个应用程序的功能。虽然可以通过在两个应用之间使用共享库的方法来解决这个问题,但是如果一个应用程序要使用另外一个库的时候,将会产生矛盾。 Konqueror/embedded 的UI界面是直接继承QMainWindow 的。UI界面的功能和布局是由组件来实现的,QMainWindow只是这些组件的宿主。在Konqueror/embedded 启动初始化过程中,首先加载一个特殊的组件KHTMLPART。KHTMLPART负责其他组件(如Kflashpart 、Kplaintextpart 等)的加载和管理。采用Kparts 组件编程技术能够使得Konqueror/embedded 的功能得到扩展,而不需要重新修改底层代码,同时增强了Konqueror/embedded 的可定制性。Konqueror/embedded将Web浏览器、flsahpalyer 、文本编辑器和简单音频播放器都作为Kparts组件嵌入到主窗口中。Kparts组件编程技术能够通过将图形组件嵌入应用程序的窗口使需要同一功能的应用程序共享一个组件。Kparts组件分只读组件和读写组件。只读组件ReadOnlyPart类为实现任何类型的查看器提供了一个公共框架。如果提供了一个文件的URL,那么所有这些查看器都可以显示该文件,并阻止对该文件的任何修改。在Konqueror/embedded中,像Web 浏览器、flashpalyer 、简单音频播放器都属于只读组件。另外一种读写组件ReadWritePart类是ReadOnlyPart的扩展,它添加了修改和保存文档的可能性,像Konqueror/embedded中嵌入的文本编辑器,属于读写组件4。3.3 KHTML绘制引擎 konqueror-embeded浏览器的khtml部分包含dom、xml、html、css、rendering、misc、ecma七个子目录 5。 从其功能结构可以看出, Konqueror/ embedded的KHTML引擎是基于XML 的DOM 技术来构建的,与现在的大部分浏览器的架构是相似的。DOM 是以层次结构组织的节点或信息片断的集合。在这种层次结构中可以利用导航仪搜寻特定的信息。同时,DOM 还提供了一套API,可以用JAVA ,C+或C来实现这些API。4、Konqueror/Embedded运行模型图2 Konqueror/embedded运行时模型图5、Konqueror/Embedded浏览器移植详解5.1建立开发环境本文所用qtopia-free-src-2.2.0是Qtopia目前最新的版本,交叉编译器工具链为gcc-3.2.2,所用操作系统为Ubuntu.1、 下载Konqueror/embedded源程序本文所用Konqueror/embedded文件名称konqueror-embedded-snapshot-20030516.tar.gz 。 2、 配置Konqueror/embedded解包源程序后使用./configure -enable-qt-embeded -enable-qtopia -enable-add-ons=kflashpart CXX=arm-linux-g+来设置。参数说明:u -enable-qt-embedded:使其对Qt Embedded支持;u -enable-qtopia:链接Qt Embedded,并且支持Qtopia环境;u -enable-add-ons=kflashpart:使其支持Flash;u CXX=arm-linux-g+:使用交叉编译器。5.2配置过程中的问题使用上述参数配置时,出现Qt(=Qt 2.2.2)(library qte) not found 错误信息。这时需要查看源文件目录下的config.log 会发现错误信息前有cannot find lz 等信息。原来是因为缺少libz库,可以用网上搜索包zlib-1.2.3 ,然后来解包,并使用./configure 产看配置参数,使用./configure prefix=/usr/local/arm/gcc-3.2.2/arm-linux host=i686-pc-linux-gnu 既可,然后make CC=arm-linux-gcc,接着make install 。此时,再执行configure 时,便会正常配置通过。5.3编译过程中的问题及解决方法5.3.1 缺少libpcre包 make 后第一个错误信息是:regexp.h 28:23:pcreposix.h No such file or directory; 出现此错误,说明是一个头文件缺失问题。使用 sudo auto-apt search pcreposix.h 得出是缺少libpcre3-dev 包。同样可以在网上下载该包,名称为pcre-6.3.tar.bz2 。解压,安装。5.2.2 不可执行的二进制文件问题和5.2中编译zlib-1.2.3过程类似,需要注意的是在指定CXX=arm-linux-gcc时make 会出现“./dftables : cannot execute binary file ”这是因为交叉编译的二进制文件无法在x86环境下执行,所以需先不指定CXX编译器,编译后保存dftables 可执行文件,待使用CXX编译器后再将其拷贝进行该文件,即可避免出错。5.2.3缺少pcreposix包问题cannot find lpcreposix 。这是因为在5.3.1过程中make install 并不能完全执行,经分析发现,make 之后所有的libpcreposix.so文件都隐藏在该源码包下的 .libs/文件夹下面,我们需手动将这些库文件拷贝到/usr/local/arm/gcc-3.2.2/arm-linux/lib下面 ,并可解决此错误信息。5.2.4 缺少libjpeg包问题libjpeg.so : could not read symbols : Invalid operation 同样使用上述方法,找到jpegsrc.v6b.tar.gz 包,configure ,make ,make install。便可以解决上述问题。5.2.5 PopupHandler.cc程序错误问题经分析,注释或者去除PopupHandler.cc , PopupHandler.h 文件中 # if defined(_WS_QWS) & defined(QT_NO_QWS_CURSOR) 行便可以编译通过。至此,整个Konqueror/embedded 交叉编译过程完毕,使用 make install 会在/usr/local/下产生kde 文件夹,下面有几个目录,其中 html4.css, charset这两个文件非常重要,我们需要设定export KDEDIR=/usr/local/kde 该环境变量,并可以使用 ./konqueror qws 执行,看到目标板上的konqueror 浏览器了。5.4 中文显示问题在Konqueror/embedded浏览器中选择file-preference选项,然后在appearance中选择字体为simsun或者uniform就可以在浏览器中正常显示中文了。6 结束语 本文不仅分析了Konqueror/Embedded浏览器的总体结构和几个关键技术和运行模型,而且还详细叙述了移植过程中的问题及解决方法。Konqueror/Embedded日趋稳定,且完全免费,所以越来越多的人加入到使用它的阵营中来。 本文作者创新点:清晰地说明了Konqueror嵌入式浏览器的几个关键技术,并以自己移植过程为例,详细地说明了移植过程中碰到的问题和解决办法。参考文献1 周红波.基于Linux的源代码开放浏览器.微计算机信息.2002(5):482 http:/ //embedded, 2005201 EB /OL .3 彭莉娟.嵌入式浏览器的研究D.北京:北京工业大学硕士学位论文,2001.33234.4 /downloads/TECHPAPER-KONQEMB-ARCH-V1.0.pd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论