工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->基础电路图->其他基础电路图->MiniGUI基于在OMAP5912的开发板上的移植

MiniGUI基于在OMAP5912的开发板上的移植

作者:dolphin时间:2012-07-23

  随着嵌入式系统的发展,用户对嵌入式系统的要求越来越高,其中用于实现人机交流功能的嵌入式GUl成为研究中的一个重点,拥有广阔的应用前景。详细介绍了MinGUI的移植、使用方法,说明了交叉编译环境建立的过程、移植MINIGUI所需的库和资源文件及其作用、MiniGUl运行环境的配置。最终实现了对具有双核结构的OMAP5912开发板的界面支持,完成了构建嵌入式图形界面系统的前期工作,取得了很好的实验效果。
  随着嵌入式的飞速发展,以ARM为硬件平台和以Linux为软件平台的方式受到广泛的关注。图形用户界面GUI是迄今为止计算机系统中最为成熟的人机交互技术。MiniGUI作为一款优秀的图形用户界面支持系统,目前已在许多实际产品和项目中得到了应用,这里正是针对这样的需求,详细介绍如何在OMAP5912开发板上移植MiniGUI的全过程。

1 OMAP5912开发板简介

  OMAP5912处理器是由TI应用最为广泛的TMS320C55X DSP内核(192 MHz)与低功耗、增强型ARM926EJ-S微处理器(192 MHz)组成的双核应用处理器,采用O.13μm CMOS工艺制造。C55xDSP可提供对低功耗应用的实时多媒体处理的支持;ARM926EJ-S MPU可满足控制和接口方面的处理需要。基于双核结构的OMAP5912具有极强的运算能力和极低的功耗,采用开放式、易于开发的软件设施,支持广泛的操作系统。

2 图形用户界面MiniGUI简介

  与几种主流嵌入式GUI相比,MiniGUI具有以下显著特点:占用资源少,高性能,高可靠性,可配置。MiniGUl采用分层设计,层次结构如图1所示。



层次结构



  在最底层,GAL和IAL提供底层图形接口以及鼠标和键盘的驱动;中间层是MiniGUI的核心层,包括窗口系统必不可少的各个模块;最顶层是编程接口API。GAL和IAL为MiniGuI提供了底层的Linux控制台或者X Window上的图形接口以及输入接口,大大提高了MiniGUI的可移植性,并且使程序的开发和调试变得更加容易。

3 MiniGUI在OMAP5912开发板上的移植过程

3.1 构建Linux交叉编译环境

  本实例中宿主机系统为RedHat 9 Linux,交叉编译工具为cross-2.95.3.tar.bz2,把工具解压缩到/usr/local/arm目录下,然后执行export PATH=/usr/local/arm/2.95.3/bin:MYMPATH;将安装好的库资源的路径添加到PATH中。这样,交叉编译环境就构建完成。后面所有的资源文件和库文件都应安装在/usr/local/arm/2.95.3/arm-linux目录。

3.2 交叉编译MiniGUI资源文件

  提供程序调用所需的资源,如位图、光标、界面控制条等,编译方法较简单,只需在宿主机环境编译后即可在开发板上使用,解压minigui-res-1.3.3.tar.gz,进入目录执行make inSTall命令,资源文件会安装到/usr/local/lib下minigui目录中。

3.3 交叉编译MiniGUI库函数,并进行配置安装

  首先解压缩libminigui-1.3.3.tar.gz,进入Fra-meBuffer控制器配置文件libminigui-1.3.3/src/new-gal/fbcON,修改fbvideo.C中GAL_fbdev=”/dev/fb/O”,这是因为系统启动后,其/dev目录下实际存在的设备文件不是fb而是/fb/0。通常Frame-Buffer作为标准字符设备处理,主设备号为29,次设备号则从0~31,分别对应/dev/fb/0-/dev/fb/31的设备文件。修改完后进入解压后的目录,执行以下命令以完成对编译选项的配置:



程序



  CC是用来指定所使用的编译器;-target选项用来指定目标平台;-host选项用来指明宿主机的类型;-build选项与-arget一样为arm-linux;-en-able-lite选项用来指定生的模式。MiniGUI 1.3.3有Threads和Lite两种模式,本例中采用Lite模式;-prefix选项用来指定MiniGUI函数库的安装路径,本例中安装路径为/usr/local/arm/2.95.3/arm-linux。如果运行成功,就会生成定制的Makefile文件,然后可以继续执行make和make install命令编译并安装libminigui。

3.4 加入辅助函数库的支持

3.4.1 安装zlib库

  这个库是后面许多库编译的基础,解压zlib-1.2.3.tar.gz文件,zlib库的configure脚本不支持交叉编译选项,可以通过软链接方式,使目标文件指向当前的2.95.3版本的arm-linux-gcc和arm-linux-ld链接器;还可以将库文件设置为动态共享方式,通过这种方式,许多程序可以重复使用相同的代码,能有效减小应用程序的大小,打开Makefile并且添加如下代码:



程序



  其中:LDSHARED参数设置为共享模式生成libz.SO.1共享文件;CPP指定服务器路径。最后make installprefix=/usr/local/arm/2.95.3/arm-linux/安装到指定路径。

3.4.2 安装png库

  这个库是用来显示png图形的,先解压libpng-1.0.10rcl.tar.gz文件,编译时,主目录下面没有配置文件,因此执行命令cp scripts/makefile.linux,将与开发系统体系结构一致的配置文件makefile.linux安装到主目录下面,然后还需要对makefile.linux文件进行修改:


程序



  其中:上述ZLIBLIB参数和ZLIBINC参数分别指定了库文件和头文件的路径。

3.4.3 安装jpeg库

  这个库用来支持jpeg格式图片显示,编译过程与png库的编译过程类似:


程序



3.4.4 安装libttf库

  这个是TrueType字体的支持库,用来显示文字,解压freetype-1.3.1.tar.gz,进入目录,然后./con-figure会生成Makefile文件,因为没有安装Xlib testexample,后面编译通不过,屏蔽掉关于test的部分代码,打开Makefile文件,找到有“FTTESTDIR”字段的行注释掉,一共有7处。然后make编译库文件,在freetype-1.3.1/lib目录下,生成链接库文件:



程序

程序



  至此libttf库安装完成。上述方法是通过自动配置完成安装,另外也可以通过手工配置完成安装:


程序



  参数O2表示完成编译过程的同时还要经过二级优化,不再加入符号表等调试信息,以使程序代码占用空间最小,同时执行的速度最快。

4 加入mde库支持

  mde库是执行MiniGUI应用程序的归档压缩文件,其中包含被称为mginit的MiniGUI-Lite的服务器程序,安装的过程需要popt-1.7.tar.gz库支持,安装过程较为简单,和前面的库安装类似。

  为了避免安装过程出现MINIGUI-LiteVerl.2.6 orLater的警告信息,必须对configure.in文件作出修改,添加下面的一行语句指定头文件和库文件的寻找路径:


程序



  同时对包含MiniGUI常用的宏以及数据类型定义的common.h文件路径进行修改,在参数AC_CHECK_HEADERS行中添加如下代码:



程序



5 创建设备文件节点

  在内核启动之前,应该保证MiniGUI运行于服务器模式,嵌入式系统上执行MiniGUI应用程序时,先由mginit调用vfork产生一个子进程,然后呼叫系统调用execl来启动,同时服务器程序还需要创建几个设备文件,在/dev目录下执行下面创建命令:

mknod ptysf c 2 63

mknod ttysf c 3 63

  分别创建了主设备号是2、次设备号是63的设备文件ptysf以及主设备号是3、次设备号是63的设备文件ttysf。如果需要在系统启动时自动加载上述设备文件,可以在系统启动脚本文件rc.d中添加上述命令。至此移植阶段的工作完成。

6 下载程序到目标板并运行

  通过以上的编译,在目标板上运行MiniGUI所需的库文件和应用程序已全部编译好,进入/usr/local/arm/2.95.3/arm-linux/,在etc,lib子目录下有需要拷贝到目标机上的资源。首先拷贝根文件目录到/opt/rootfs下,在根文件目录下新建和/usr/local/arm/2.95.3/arm-linux/下相同的目录结构,把/usr/local/arm/2.95.3/arm-linux/lib中相应的库拷到根文件系统的/usr/local/lib目录下去(无需拷贝libjpeg.a等静态库);拷贝MiniGUI资源文件,将usr/local/lib/目录下的minigui目录拷贝到根文件/opt/rootfs目录下;拷贝配置文件/usr/local/etc/MiniGUI.cfg,保持目录结构一致。修改根文件系统中的/etc/ld.SO.conf文件,在文件最后一行增加“/usr/local/lib”,然后执行命令ldconfig-r/opt/rootfs,将根文件目录设置为根目录,最后修改MiniGUI.cfg,使之适合目标板的硬件设置:将鼠标设备改为mdev=/dev/input/mouse0,鼠标协议类型改为mtype=IMPS2,其他的用默认方式即可。

  至此,MiniGUI已经成功移植到了开发板上,图2为MiniGUI在开发板上启动后的画面。此后可以根据需要,继续修改MiniGUI库函数及各种资源,并且编写自己的应用程序,使开发板上的界面更加美观和完善。



MiniGUI在开发板上启动后的画面



7 结 语

  介绍的MiniGUI移植过程已通过实验验证,并且大体的过程适合于其他型号的开发板和其他开源版本的MiniGUI。将图形用户界面引人嵌入式系统是嵌入式技术发展的必然趋势,可以肯定,随着MiniGUI的不断推广和功能的加强,它将在嵌入式系统设计中起着举足轻重的作用,并且在实际应用中不断走向成熟。

交叉编译:  

  交叉编译呢,简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓 平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。



评论

技术专区