1.2.2微客户/服务器结构
在多线程环境中,与多进程间的通讯机制类似,线程之间也有交互和同步的需求。比如, 用来管理窗口的线程维持全局的窗口列表, 而其他线程不能直接修改这些全局的数据结构, 而必须依据“先来先服务”的原则,依次处理每个线程的请求,这就是一般性的客户/服务器模式。MiniGUI利用线程之间的同步操作实现了客户线程和服务器线程之间的微客户/服务器机制。
2 开发环境
H2410EB开发板由北京恒颐高科技术有限公司设计开发,它基于Samsung公司的S3C2410A20嵌入式ARM处理器。S3C2410A20内嵌 ARM920T 核,带有全性能的MMU,具有高性能、低功耗、低成本、小体积等优点,适用于手持设备、汽车等领域。
H2410EB除带有大容量的SDRAM和Flash以外,还扩展了RS-232C串行接口、10Mbps以太网接口、触摸屏接口、音频输入/输出接口、USB Host、USB Slave、UART接口、IIC接口、用户自定义键盘、LCD显示器,方便用户使用和进行参考设计。它支持嵌入式Linux操作系统的运行,支持MP3/MPEG播放、GUI、Web 服务及其它服务,同时可根据用户需求开发特定软件与设备驱动程序。
操作系统采用裁减后的Linux,Linux Kernel版本为v2.4.18,系统使用的交叉编译器是arm-Linux-gcc。另外,还有驱动程序源码和测试程序源码等代码模块。
3 MiniGUI的移植
本文中使用的主机系统为Red Hat Linux 9.0,移植目标系统为Linux2.4.18,MiniGUI的版本是1.6.9。在主机上交叉编译MiniGUI链接库,然后将针对目标机编译的库文件,与根文件系统一起烧写到目标板的RAM空间,以后将运行在目标板上的图形用户界面直接链接到该库,脱离主机独立运行。
3.1 Linux交叉编译环境的构建
GUI的编译通常都是在PC机上执行的,也就是说,编译器本身能够在PC机上执行,同时编译源代码生成的二进制文件必须能在目标机上执行,这类编译器通常称为交叉编译器。对于ARM平台,我们安装了cross-arm-binutils-2.10-1.i386.rpm、cross-arm-gcc-2.95.3
-2.i386.rpm、cross-arm-glibc-2.1.3-2.i386.rpm这三个包。这些包都可以从网上免费获取。arm-binutils这个包一般包含了一些针对ARM平台的二进制工具,比如arm-strip、arm-ar等命令;arm-glibc这个包包含的是标准C的函数库的ARM的版本以及对应的头文件;arm-gcc中包含的则是生成ARM平台代码的x86上的交叉编译器。执行rpm命令将这些包安装到PC机上,若不在系统默认搜索目录下,则必须将安装目录加到系统的PATH环境变量中,这样在每次编译时系统才能找得到编译器。
以root用户登陆Linux系统,在主机上用rpm指令安装交叉编译工具,arm-linux-gcc将被安装到/usr/local/arm/2.95.3/下面。此时,gcc为 /usr/local/arm/2.95.3/bin/arm-linux-gcc,而它的include为 /usr/local/arm/2.95.3/arm-linux/include,对应的lib为 /usr/local/arm/2.95.3
-/arm-linux/lib。然后,在你的bashrc 中添加环境变量即可
vi .bashrc
最后一行加入:export PATH=$PATH:/usr/local/arm/2.95.3/bin路径
保存退出后执行source .bashrc
另外需要注意的是,编译时所用的函数库版本要与目标版上运行时所用的函数库版本一致。经过上述步骤,就已经建立了交叉编译环境,接下来的就是进行MiniGUI的选项配置和交叉编译。
3.2 MiniGUI的配置和交叉编译
我们可以从网上http://www.minigui.com/download)免费得到MiniGUI-1.6.9的资源文件压缩包,MiniGUI1.6.9的源程序包包括以下三个部分:
libminigui-1.6.9.tar.gz-MiniGUI函数库源代码;
miniguires-1.6.9.tar.gz-MiniGUI所使用的资源,包括基本字体、图标、位图、输入法等;
mde-1.6.9.tar.gz-MiniGUI的综合演示程序。
3.2.1 配置MiniGUI选项
把函数库文件包解压:tar zxf libminigui-1.6.9.tar.gz,进入libminigui-1.6.9这个目录,执行make menuconfig命令
-system wide options中选择Build MiniGUI-Lite,并取消Use incore (built-in) resource选项;
-Gal engine options 图形引擎,根据目标机的显示方式确认,这里只勾选了 NEWGal engine on Linux FrameBuffer console,其它的不选;
-Ial engine options输入引擎,可用触摸屏只选了SMDK2410 Touch Screen;
-Font Options 中取消选择Var bitmap font,可能是因为Bug的原因,当选择了该选项后,编译测试例子的时候总是提示unreferenced vfb_Courier …之类的错误;
-Image options选择了Includes SaveBitmap-related functions。GIF、JPG、PNG图形格式也勾选上;
-Development environment options 里使用Linux平台,arm-linux-gcc编译器,安装路径设置在 /usr/local/arm/2.95.3/arm-linux/。
其它的用缺省选项就可以了,保存退出。