启动程序的主要步骤为:设置入口指针,设置中断向量,设置和初始化RAM,初始化至少一个窜行端口,检测CPU类型,初始化堆栈和寄存器,初始化存储器系统,设置内核相关列表,呼叫内核镜像。需要特别注意的是在设置CPU寄存器时,r¬0 为0,r2 为检测出的CPU型号号码,MMU关闭,指令Catch打开,数据Catch清空后关闭。
Framebuffer是一个提供显示内存和显示芯片寄存器从物理内存映射到进程地址空间中的设备,其驱动程序主要依靠三个数据结构:fb_info﹑fb_var_screeninfo﹑fb_fix_screeninfo。fb_info结构只能在内核空间访问,其内部定义了struct fb_ops,结构fb_ops的成员即framebuffer的一系列操作函数。帧缓冲设备的驱动主要就是编写这些接口函数。fb_var_screeninfo和fb_fix_screeninfo定义视频板卡的硬件特性。如显存大小﹑每行显示位数﹑分辨率等与特定硬件相关的特性。帧缓冲驱动程序首先调用register_framebuffer注册一个framebuffer设备,后在Linux/drivers/video/fbmem.c中登记初始化函数。所有帧缓冲驱动程序的ioctl调用由fbmem.c统一实现。
2.3 Microwindows
Microwindows 是专门设计用于在小型设备上开发具有高品质图形功能的开放式源码桌面系统,使用较少的RAM和文件存储空间(100K-600K),在运行的过程中仅需要50~250KB的内存空间。Microwindows不需要任何操作系统 和图形系统的支持,可以运行32位的内核支持Framebuffer机制的Linux系统上。Microwindows的主要目标之一就是把把图形视窗环境引入到运行Linux的小型设备和平台上,提供与X Window相似的功能。
Microwindows采用分层结构设计方法,在底层提供对屏幕,鼠标或触摸屏,键盘的驱动,是程序能够访问实际的硬件和其他用户订制设备;中间层实现了一个可以移植的图形引擎,这个图形引擎实现画线,填充,多边行,剪辑和多种颜色模式;最上层实现了多种API以适应不同的应用环境。每一层都可以根据不同的应用需求修改代码或重新编码。
系统中最底层针对显示屏,鼠标,触摸屏,键盘等各定义了一个数据结构供图形引擎使用,分别为struct _mwscreendevice ﹑struct _mousedevice 和struct _kbddevice , 包含了针对指定设备的硬件驱动代码接口。
在Microwindows中的图形引擎支持framebuffer ,因此只要修改src/中针对基于ARM平台的Linux的配置文件config.ads,指定使用framebuffer作为底层图形支持引擎即可。Microwindows下支持Linux的鼠标驱动为mou-gpm.c,键盘驱动为kbd_tty.c。在本系统中并没有从头开始编写鼠标键盘各数据结构的成员函数,只对原驱动中针对特定硬件部分作了相应改动。
2.4 ViewML
ViewML是第一个开放源代码的,专门面对嵌入式Linux系统的快速发展而开发的小型浏览器。其代码文件只有800KB,运行所需的内存空间约2MB,使用FLTK作为GUI平台开发,采用C++面向对象的设计。ViewML浏览器可以运行于X Windows 和Microwindows系统之上,所以可在Linux平台上进行调试和改进。这极大的方便了对浏览器的进一步完善。本系统中对ViewML 的改进是在基于X Windows 平台的Microwindows系统上完成的。
ViewML浏览器的体系结构如图2。其应用层很小,完全用C++ FLTK(Fast Light Tool Kit)应用框架编写,提供基本的图形用户界面布局,同时该层还处理网络和本地文件存取要求。其语法分析器和显示引擎选用了源码开放的KDE桌面的kfm文件管理器中的KDE 1.0 HTML窗口部件(即图1中的KHTML View和窗口部件模块)。该窗口管理部件工作稳定,支持全部的HTML 3.2功能及部分JavaScript 1.1。KDE的窗口部件采用的是QT窗口部件集合,为适应嵌入式系统的要求,ViewML采用了轻量级图形库FLTK。QT兼容层提供了HTML窗口部件和FLTK应用框架之间的接口。底层的网络协议采用万维网协会的WWWLib库执行所有的异步网络输入输出和HTTP获得功能。
ViewML是直接针对嵌入式Linux环境的一种高品质的网络浏览器。通过包含源代码开放的核心部件,能够在占用很少的RAM和ROM资源的条件下使用高质量的图形引擎。但在实际是移植使用中发现了一些该浏览器的欠缺之处,下面重点讨论本系统针对ViewML窗口界面的改进。
3 ViewML窗口界面的改进
Viewml的应用层很小,只提供了基本的图形用户界面布局。作为与用户交互的窗口,要求有美观性,实用性和可操作性。为了使用户界面更为完善,本系统主要的工作增加对HTML文件的打开﹑保存和关闭;Web页的刷新﹑前进﹑返回等。