当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于S3C2440的MiniGUI移植

摘要:随着嵌入式系统的发展,嵌入式图形用户界面需求越来越明显,MiniGUI是目前比较成熟的嵌入式Linux系统的图形用户界面。为了满足嵌入式图形用户界面的需求,将MiniGUI移植到基于S3C2440的处理器目标板。首先说明了如何建立交叉环境,接着讨论MiniGUI 1.6.10库和资源的移植,最后闸述运行环境的配置。实现了对S3C2440开发板的MiniGUI移植,完成嵌入式Linux图形用户界面的构建,并为其他嵌入式设备的移植提供借鉴。
关键词:嵌入式系统;MiniGUI;S3C2440;移植

    随着嵌入式系统的迅速发展,图形用户界面(Graphic User Interface,GUI)需求越来越明显。MiniGUI是面向实时嵌入式系统的轻量级图形用户界面支持系统,以轻型、占用资源少、高性能、可配置等特点广泛应用于通信、医疗、工控、电子、机顶盒、多媒体等领域。本文正是针对这种需求,介绍如何在S3C240上移植MiniGUI的全过程。

1 图形用户界面MiniGUI
    MiniGUI是由原清华大学教师魏永明主持开发的轻量级图形系统,遵循GPL公约。所支持的操作系统已不仅仅限于Linux,它还可以在μCli nux,μC/OS-Ⅱ,eCos和VxWorks等系统上运行。已验证的硬件平台包括Intelx86,ARM(ARM7/AMR9/StrongARM/xScale),Power-PC,MIP S,M68K(DragonBall/ColdFire)等。
1.1 MiniGUI与嵌入式系统的关系
    MiniGUI具有良好的软件架构,通过抽象层将MiniGUI上层和底层操作系统隔离开来。如图1所示,基于MiniGUI的应用程序一般通过ANSIC库以及MiniGUI自身提供的API来实现自己的功能;MiniGUI中的“可移植层”可将特定操作系统及底层硬件的细节隐藏起来,而上层应用程序则无需关系底层的硬件平台输出和输入设备。


1.2 MiniGUI体系结构
    从结构上看,MiniGUI是分层设计的,层次结构如图2所示。在底层,GAL和IAL为MiniGUI提供了底层的Linux控制台或者X Window上的图形接口以及输入接口。中间层是MiniGUI的核心层,其中包括了窗口系统必不可少的各个模块。最顶层的API向应用设计提供编程接口。



2 S3C2440开发平台简介
   本文使用的目标平台是三星公司推出的高度集成的S3C2440(ARM920T core with MMC),最高主频可达532 MHz微处理器,提供64MB SDRA M,64 MBNAND FLASH以及2 MB NOR FLASH的存储设备,另外包括IDE和PCMICA接口的丰富的外围电路和多功能的扩展接口。S3C2440采用高性能ARM9微处理器以其优化的片上性能,在视频会议、楼宇的对讲系统、网络监控、GPS定位/导航仪、医疗电子设备、多媒体终端产品等应用领域有广泛应用。

3 MiniGUI的移植
    宿主主机系统为redhat Linux 9.0,要求完全安装,移植步骤如下:
3.1 建立交叉编译环境
    在移植之前首先建立好交叉编译环境,简单地说是指在一个平台上可以生成能在另一个平台上运行的代码,编译工具为arm-linux-gcc-3.3.2。
    #tar-xvjf rm-linux-gcc-3.3.2
    默认的安装路径是/usr/local,为了避免每次设置PATH,在.bash_profile文件中增加PATH=/usr/local/arm/3.4.1bin:MYMPA TH,并运行以下命令:
    #source.bash_profile
3.2 源代码准备
    从http://www.minigui.org/res.shtml下载源代码包如下:
    (1)libminigui-1.6.10.tar.gz:MiniGUI函数库源代码。
    MiniGUI由3个函数库的组成,它们分别是libminigui,libmgext和libvcongui。libminigui是提供窗口管理和图形接口的核心函数库,也提供了大量的标准控件;libmgext是libminigui的一个扩展库,提供了一些高级控件及“文件打开”、“颜色选择”对话框等;libvcon gui则为Linux操作系统提供了一个应用程序可用的虚拟控制台窗口,从而可以方便地在MiniGUI环境中运行字符界面的应用程序,libmgext和libvcongui库已经包含在这个源代码包中。
    (2)minigui-res-1.6.10.tar.gz:MiniGUI所使用的资源,包括基本字体、图标、位图和鼠标光标。
    (3)mg-smaples-1.6.10.tar.gz:配套示例程序。[!--empirenews.page--]
3.3 编译安装
    (1)建立工作目录
    # mkdir/minigui
    # cd/minigui
    (2)编译安装MiniGUI库
    # cd/minigui
    # tar xzvf libminigui-1.6.10.tar.gz-C/minigui
    # cd/minigui/libminigui-1.6.10
    #./configure-prefix=/home/-host=i386-redhat-linux-target=arm-linux--build=arm-linuxCC=arm-linux-gcc--disa-ble-vbfsu pport
    prefix选项用于指定MiniGUI函数库的安装路径,默认的安装路径是/usr/local,这里应该是所使用的交叉编译环境中系统头文件目录include库目录lib所在的目录,本例中是/home,这样一来,MiniGUI的函数库和头文件也将被分别安装到lib和include目录中。在后续进行MiniGUI应用程序的交叉编译时,就可以正确地找到MiniGUI的头文件和函数库。其中:
    target选项用于指定目标平台,这里使用arm-linux;
    host选项用来指明宿主机的类型,这里使用i386-redhat-linux;
    build选项指定了交叉编译的系统环境,这里使用arm-linux;
    CC用来指定使用的交叉编译器,这里使用arm-linux-gcc。
    运行.configure脚本成功后,就成了定制的Make-file文件,接下来只需编译和安装即可。
    # make
    # make install
    (3)编译安装MiniGUI资源文件
    # tar xzvf minigui-res-1.6.10.tar.gz-C/minigui
    # cd/minigui/minigui-res-1.6.10
    # make install
    (4)编译安装配套应用程序
    # tar mg-smaples-1.6.10.tar.gz-C/minigui
    # cd/minigui/mg-smaples-1.6.10# make install
3.4 拷贝MiniGUI资源到开发板
    把/home/lib目录下的所有库文件(注:-prefix=/home/)拷贝到开发板的/lib目录下;把/minigui/res目录下的所有文件拷贝到开发板上/usr/local/lib目录下,其开发板上的目录如下形式/usr/local/lib/minigui/res/……;把/home/etc下的MiniGUI.c fg拷贝到开发板上的/etc目录下;最后把配套应用程序拷贝到开发板目录下。
3.5 配置开发板的运行环境
    (1)/etc目录下建立ld.so.conf文件,并添加如下内容:
    /usr/local/lib
    /lib
    这样程序运行的时候可以找到相应的库文件。
    (2)修改开发板上的/etc/MiniGUI.cfg文件,主要修改是图形引擎和输入引擎。本开发平台的Linux中自带有VESAFrameBuffer设备驱动程序,并且初始状态已经激活。FrameBuffer是Linux内核中的一种驱动程序接口,这种接口将显示设备抽象为帧缓冲区,用户可以将它看成是显示内存的一个映像。将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反映在屏幕上。这样,MiniGUI就可以使用FrameBuffer作为图形引擎进行图像显示。LCD显示器的像素为240x320,因此图形引擎的显示模式defaultmode为240x320-16bpp。并在输入引擎中添加usb鼠标设备文件和鼠标协议。修改如下:
   
    同时在/etc/init.d/rcS脚本文件里添加鼠标设备,内容如下:
    /bin/ln-s/devr/vc/0/dev/tty0
    /bin/ln-s/dev/input/mouse0/dev//mouse

4 结语
    把图形用户界面移植到嵌入式设备中是嵌入式系统发展的趋势,本文详细介绍了MiniGUI移植S3C2440的过程,并最终能稳定得在目标平台上运行。该方法对于移植到其他的目标平台有良好的借鉴作用。MiniGUI作为源代码开放的自由软件,在嵌入式图形用户界面领域将有更好的实用价值,并随着MiniGUI的功能日趋强大,应用将越来越广泛。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭