完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>
标签 > MiniGUI
MiniGUI是由北京飞漫软件技术有限公司创办的开源Linux图形用户界面支持系统,经过近些年的发展,MiniGUI已经发展成为比较成熟的性能优良的、功能丰富的跨操作系统的嵌入式图形界面支持系统。
MiniGUI是由北京飞漫软件技术有限公司创办的开源Linux图形用户界面支持系统,经过近些年的发展,MiniGUI已经发展成为比较成熟的性能优良的、功能丰富的跨操作系统的嵌入式图形界面支持系统。“小”是MiniGUI的特色,它目前已经广泛应用于通讯、医疗、工控、电子、机顶盒、多媒体等领域。目前,MiniGUI的最新版本为MiniGUI 3.0。MiniGUI对中文的支持很友好。它支持GB2312与BIG5字符集,其他字符集也可以轻松加入。
MiniGUI是由北京飞漫软件技术有限公司创办的开源Linux图形用户界面支持系统,经过近些年的发展,MiniGUI已经发展成为比较成熟的性能优良的、功能丰富的跨操作系统的嵌入式图形界面支持系统。“小”是MiniGUI的特色,它目前已经广泛应用于通讯、医疗、工控、电子、机顶盒、多媒体等领域。目前,MiniGUI的最新版本为MiniGUI 3.0。MiniGUI对中文的支持很友好。它支持GB2312与BIG5字符集,其他字符集也可以轻松加入。
MiniGUI 是一款面向嵌入式系统的高级窗口系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明先生于 1998 年底开始开发。2002 年,魏永明先生创建北京飞漫软件技术有限公司,为 MiniGUI 提供商业技术支持,同时也继续提供开源版本,飞漫软件是中国地区为开源社区贡献代码最多的软件企业。最后一个采用 GPL 授权的 MiniGUI 版本是 1.6.10,从 MiniGUI 2.0.4 开始 MiniGUI 被重写并使用商业授权。历经十余年时间, MiniGUI 已经成为性能优良、功能丰富的跨操作系统嵌入式图形用户界面支持系统,支持Linux/uClinux、eCos、 uC/OS-II、VxWorks、ThreadX、Nucleus 、pSOS、OSE 等操作系统和数十种 SoC芯片,已验证的硬件平台包括 ARM-based SoCs、MIPS based SoCs、IA-based SoCs、PowerPC、M68K(DragonBall /ColdFire)、Intel x86 等等,广泛应用于通讯、医疗、工控、电力、机顶盒、多媒体终端等领域。使用 MiniGUI 成功开发产品的企业有华为、中兴通讯、大唐移动、长虹、TCL、联想、迈瑞、南瑞、炬力、D2 等。这些用户广泛分部在中国大陆、台湾、新加坡、韩国、美国、德国、意大利、印度、以色列等国家和地区。值得一提的是,在中国自主开发的 3G 通讯标准 TD-SCDMA中,约有 60% 获得入网许可证的 TD-SCDMA 手机使用 MiniGUI 作为其嵌入式图形平台,以支撑浏览器、可视电话等 3G 应用软件的运行,其中有联想TD30t、海信 T68、中兴通讯 U85 等大家熟悉的 TD 手机型号。在 MiniGUI 的基础上,飞漫软件研发了 mDolphin (基于开源的浏览器核心 WebKit 的嵌入式浏览器,满分通过 Acid3 的基准测试)、mPeer (为使用 Java 技术的嵌入式设备提供高效的 J2SE AWT/Swing 实现支持),并且开发了基于 Eclipse CDT 的可视化集成开发环境,为开发人员提供所见即所得(WYSIWYG)的界面设计环境。2010年,飞漫软件把最新版的 MiniGUI、mDolphin、mPeer、mStudio 等系统整合在一起,推出了合璧操作系统(HybridOS)解决方案,是一整套专为嵌入式设备打造的快速开发平台,集成了飞漫软件10年的嵌入式行业研发经验和众多成熟的产品,使众多的希望在嵌入式设备上做开发的中小型企业,摆脱了“不稳定的内核以及驱动程序”、“交叉编译工具链、基础函数库存在大量缺陷”、“不恰当的开源软件”、“高水平嵌入式开发工程师缺乏”等这些问题的困扰,从而能够在一个运行稳定、功能强大的小巧系统内核基础上,专注开发产品。合璧操作系统(HybridOS)采用新的商业授权模式,性价比颇高。截止2010年9月,MiniGUI 的最新版本是3.0.10, MiniGUI 将作为合璧操作系统(HybridOS)的一个组成部分而不断演进,推荐新老用户使用合璧操作系统(Hybridos)作为嵌入式开发平台,必将节省大量的开发成本和时间。
特点优势
MiniGUI 为嵌入式 Linux 系统提供了完整的图形系统支持,是全球针对嵌入式 Linux仅有的两个商用嵌入式GUI系统之一。MiniGUI为嵌入式Linux 系统提供了完整的多进程支持;可以 MiniGUI-Processes、MiniGUI-Threads或者MiniGUI-Standalone 三种运行模式运行。
技术特性硬件适配性:可运行于各种含有 MMU(内存管理单元)的 32 位处理器架构之上,如 ix386、ARM、MIPS、PowerPC 等。支持低端显示设备(比如单色 LCD)和高端显示设备(8 位色及以上显示设备)。通过 MiniGUI 的图形抽象层及图形引擎技术,还可以支持特殊的显示设备,比如 YUV 显示设备。对显示设备分辨率无最大和最小限制。副屏支持。当系统中有多个视频设备时,可将一个作为 MiniGUI 的主屏,实现完整的多窗口系统;而其它设备作为副屏,在其上通过 MiniGUI 的图形接口来实现文字渲染、图形显示等功能。可支持各种输入设备,如 PC 键盘、PC 鼠标、小键盘(Keypad)、触摸屏、遥控器等等。多种键盘布局的支持。MiniGUI 除支持常见的美式 PC 键盘布局之外,还支持法语、德语等西欧语种的键 盘布局。资源消耗:MiniGUI 的静态存储随配置选项的不同而不同,最少需占用 1MB 静态存储空间。MiniGUI 启动后,初始占用 1MB 动态存储空间。建议系统内存为 8MB 以上。操作系统适配性:支持 Linux 操作系统(非 uClinux 操作系统),可以 MiniGUI-Processes、MiniGUI-Threads 或者 MiniGUI-Standalone 三种运行模式运行。内建资源支持。可以将 MiniGUI 所使用的资源,诸如位图、图标和字体等编译到函数库中,该特性可提高 MiniGUI 的初始化速度,并且非常适合无文件系统支持的实时嵌入式操作系统。针对嵌入式系统的特殊支持,包括一般性的 I/O 流操作,字节序相关函数等。窗口子系统特性:完备的多窗口机制和消息传递机制。使用 MiniGUI-Threads 运行模式时,可在不同线程中创建主窗口,并支持线程间的消息传递;使用 MiniGUI-Processes 运行模式时,支持完整的多进程窗口系统。对话框和消息框支持。提供常用的控件类,包括静态文本框、按钮、单行和多行编辑框、列表框、组合框、菜单按钮、进度条、滑块、属性页、工具栏、树型控件、月历控件、旋钮控件、酷工具栏、网格控件、动画控件等。其它 GUI 元素,包括菜单、加速键、插入符、定时器等。图形子系统特性:提供有增强 GDI 函数,包括光栅操作、复杂区域处理、椭圆、圆弧、多边形以及区域填充等函数。在提供有兼容于 C99 规范的数学库平台上,还提供有高级二维绘图函数,可设置线宽、线型以及填充模式等。通过 MiniGUI 的图形抽象层及图形引擎技术,也可以让上述高级 GDI 接口在低端显示屏上实现。各种流行图像文件的支持,包括 Windows BMP、GIF、JPEG、PNG等(JPEG 及 PNG的支持通过 libjpeg 及 libpng 函数库提供)。Windows 的资源文件支持,如位图、图标、光标等。多字符集和多字体支持,目前支持 ISO8859-1~ISO8859-15、GB2312、GBK、GB18030、BIG5、EUC-JP、Shift-JIS、EUC-KR、UNICODE(UTF-8、UTF-16编码)等字符集,支持等宽点阵字体、变宽点阵字体、Qt/Embedded 使用的嵌入式字体 QPF、TrueType矢量字体(对 TrueType 的支持通过 freetype 1.3 函数库提供)。输入法支持,用于提供各种可能的输入形式;内建有适合 PC 平台的汉字(GB2312)输入法支持,包括内码、全拼、智能拼音、五笔及自然码等。
MiniGUI 的技术优势和其它针对嵌入式产品的图形系统相比,MiniGUI 在对系统的需求上具有如下几大优势:可伸缩性强。MiniGUI 丰富的功能和可配置特性,使得它既可运行于 CPU 主频只有 60MHz 的低端产品中,亦可运行于高端嵌入式设备中,并使用 MiniGUI 的高级控件风格及皮肤界面等技术,创建华丽的用户界面。MiniGUI 的跨操作系统特性,使得 MiniGUI 可运行在最简单的嵌入式操作系统之上,如 uC/OS-II,也可以运行在具有现代操作系统特性的嵌入式操作系统之上,如 Linux,而且 MiniGUI 为嵌入式 Linux 系统提供了完整的多窗口图形环境。这些特性,使得 MiniGUI 具有非常强的可伸缩性。可伸缩性是 MiniGUI 从设计之初就考虑且不断完善而来的。这个特性使得 MiniGUI 可应用于简单的行业终端,也可应用于复杂的消费类电子产品。轻型、占用资源少。MiniGUI 是一个定位于轻量级的嵌入式图形库,对系统资源的需求完全考虑到了嵌入式设备的硬件情况,如 MiniGUI 库所占的空间最小可以裁剪到 500K 左右,对目前的嵌入式设备来说,满足这一条件是绰绰有余的。此外,测试结果表明,MiniGUI 能够在 CPU 主频为 30 MHz,仅有 4M RAM 的系统上正常运行(使用 uClinux 操作系统),这是其它针对嵌入式产品的图形系统所无法达到的。高性能、高可靠性。MiniGUI 良好的体系结构及优化的图形接口,可确保最快的图形绘制速度。在设计之初,就充分考虑到了实时嵌入式系统的特点,针对多窗口环境下的图形绘制开展了大量的研究及开发,优化了 MiniGUI 的图形绘制性能及资源占用。MiniGUI 在大量实际系统中的应用,尤其在工业控制系统的应用,证明 MiniGUI 具有非常好的性能。从 1999 年 MiniGUI 的第一个版本发布以来,就有许多产品和项目使用 MiniGUI,MiniGUI 也不断从这些产品或者项目当中获得发展动力和新的技术需求,逐渐提高了自身的可靠性和健壮性。有关 MiniGUI 的最新成功案例,您可以访问飞漫公司网站的典型案例部分。可配置性。为满足嵌入式系统各种各样的需求,必须要求 GUI 系统是可配置的。和 Linux 内核类似,MiniGUI 也实现了大量的编译配置选项,通过这些选项可指定 MiniGUI 库中包括哪些功能而同时不包括哪些功能。大体说来,可以在如下几个方面对 MiniGUI 进行定制配置:指定 MiniGUI 要运行的硬件平台。指定 MiniGUI 要运行的操作系统。指定生成基于线程的 MiniGUI-Threads 运行模式还是基于进程的 MiniGUI-Processes 运行模式,或者只是最简单的 MiniGUI-Standalone 运行模式。指定需要支持的 GAL 引擎和 IAL 引擎,以及引擎相关选项。指定需要支持的字体类型。指定需要支持的字符集。指定需要支持的图像文件格式。指定需要支持的控件类。指定控件和窗口的整体风格,可以通过指定不同的渲染器完成。这些配置选项大大增强了 MiniGUI 的灵活性,对用户来讲,可针对具体的应用需求量体裁衣,开发最适合产品需求的应用软件。总之,将现代窗口和图形技术带入到嵌入式设备的MiniGUI,是一个非常适合于实时嵌入式设备的高效、可靠、可定制、小巧灵活的图形用户界面支持系统,其主要优点可以总结如下:支持多种嵌入式操作系统,具备优秀的可移植性;可伸缩的系统架构,易于扩展;功能丰富,可灵活剪裁;小体积高性能间的最佳平衡;广泛的应用领域。
MiniGUI V3.0在以前版本的基础上新增了如下新特性:主窗口双缓冲区(Double Buffering Main Window) 当 MiniGUI 3.0 的主窗口具有双缓冲区时,可以在自定义缓冲区中获得整个主窗口的渲染结果。在此基础上,可以利用高级 2D 图形接口或者 3D 图形接口获得主窗口的各种特殊显示效果,如推拉切换、翻页切换、卷曲效果等等。外观渲染器(Look and Feel Renderer)支持。MiniGUI V3.0 改变了以往只支持三种控件风格的方式,引入了渲染器(Look and Feel)这一全新的模式。渲染器是定义如何绘制窗口元素的渲染器,是在MiniGUI V2.0.X的基础上继续完善的。窗口元素包括边框、标题栏、标题栏按钮、滚动条、选定项目、无效项目、高亮项目、突出项目、三维对象等;窗口元素的外观属性,包括窗口元素的颜色、尺寸、字体等信息;窗口元素渲染器是对窗口元素进行定制大小、颜色、图形、字体,便于用户设计个性化的外观显示风格。用户可以指定某个主窗口或某个控件使用特定的渲染器,也可定制非客户区渲染器、窗口元素的尺寸、颜色、字体、图标,同时增强资源管理功能,从而获得更加华丽的图形界面。MiniGUI实现了几种默认整体显示风格:Classic 、Flat、Fashion 和Skin。用户可以在配置 MiniGUI 时指定相应的选项来将 MiniGUI 编译成特定的一种显示风格。Classic: 这种风格的界面是标准的Window 95风格界面,也是最广泛使用的风格了。Fashion: 此种风格的界面,采用 MiniGUI 3.0 组件 mGPlus 提供的颜色渐变填充技术,因此,可获得非常炫丽的界面效果;Flat: 此种风格的窗口界面,线条清晰,简洁,因此适用于单色或者灰度显示屏。因为绘制简单,因此该渲染器占用资源最少,运行速度最快;Skin: 上面三种外观渲染器基本上都是由代码绘制出来的,具有小巧灵活的特点。但是,在嵌入式应用领域,设备的差别非常大。有些设备,已经具备了非常高的运算性能。在这种情况下,可以考虑使用皮肤外观渲染器来美化界面。皮肤外观渲染器需要一整套和界面相关的图片,因此需要占用一些存储资源。皮肤外观渲染器的最大的特点是允许用户定制界面,用户可以使用自己设计的图片替换系统原有的图片,展现在用户面前的就将是你自己设计的界面效果。双向文本(BIDI Text)的显示与输入。大家知道,除了大家熟知的从左向右书写的文字(如英语、汉语等)之外,还有许多语言采用从右向左的书写习惯,如阿拉伯文和希伯来文等。为了支持这些语言,MiniGUI 3.0中增加了对这两种语言所属字符集的处理,并增加了阿拉伯和希伯来键盘布局的支持,从而实现了对双向文本的输入输出处理。阿拉伯文以及希伯来文的显示。不规则窗口。MiniGUI V3.0实现了不规则窗口与控件,可满足用户对窗口外观各种不同的需求。不规则窗口通过一个Region数据结构来表示可见区域,或者通过8位MYBITMAP中的透明值形成不可见区域。字体。在 MiniGUI 3.0 中,飞漫软件发明了一种新的 UNICODE 字体文件格式,称为“UPF”字体。这种字体的最大特点,是便于在多进程环境下使用,从而极大地节约了内存的使用。同时,飞漫软件增强了VBF字体格式,将VBF 字体升级到了3.0,扩大了其能适用的字符集范围,以便支持阿拉伯文等语言文字的显示。其他增强。MiniGUI 3.0实现了桌面的可定制。通过桌面的外部编程接口,用户可以在桌面放置图标并响应桌面事件,实现类似Windows桌面的界面效果。除此之外,MiniGUI 3.0 还增强了透明控件的实现,使之效率更高,且不依赖于控件的内部实现代码。MiniGUI 3.0 还提供独立的滚动条控件,提供统一的虚拟帧缓冲区程序支持等等。另外最新的MiniGUI V3.0新增加了两个新的组件:mGUtils和mGPlus,把字体、位图、图标、光标等资源进行统一管理,资源的内嵌和非内嵌方式并不影响模块的组成,由此抽象出系统资源管理模块。
运行模式
和 Linux 这样的类 UNIX 操作系统相比,一般意义上的传统嵌入式操作系统具有一些特殊性。举例而言,诸如 uClinux、uC/OS-II、eCos 等操作系统,通常运行在没有 MMU(内存管理单元,用于提供虚拟内存支持)的 CPU 上;这时,往往就没有进程的概念,而只有线程或者任务的概念,这样,MiniGUI 的运行环境也就大相径庭。因此,为了适合不同的操作系统环境,可将 MiniGUI 配置成三种不同的运行模式:
MiniGUI-Threads运行在 MiniGUI-Threads 上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或者地址空间中运行。这种运行模式主要用来支持大多数传统意义上的嵌入式操作系统,比如 VxWorks 、ThreadX、Nucleus、OSE、pSOS、uC/OS-II、eCos等等。当然,在 Linux 和 uClinux 上,MiniGUI 也能以 MiniGUI-Threads 的模式运行。
MiniGUI-Processes和 MiniGUI-Threads相反,MiniGUI-Processes 上的每个程序是单独的进程,每个进程也可以建立多个窗口,并且实现了多进程窗口系统。MiniGUI-Processes 适合于具有完整 UNIX 特性的嵌入式操作系统,比如嵌入式 Linux。该运行模式在 MiniGUI V2.0 中提供。
MiniGUI-Standalone这种运行模式下,MiniGUI 可以以独立任务的方式运行,既不需要多线程也不需要多进程的支持,这种运行模式适合功能单一的应用场合。比如在一些使用 uClinux 的嵌入式产品中,因为各种原因而缺少线程支持,这时,就可以使用 MiniGUI-Standalone 来开发应用软件。一般而言,MiniGUI-Standalone 模式的适应面最广,可以支持几乎所有的操作系统(目前只用来提供对 Linux/uClinux 操作系统的支持);MiniGUI-Threads 模式的适用面次之,可运行在支持多任务的实时嵌入式操作系统,或者具备完整 UNIX 特性的普通操作系统;MiniGUI-Processes 模式的适用面较小,它仅适合于具备完整 UNIX 特性的嵌入式操作系统,比如 Linux。但不论采用哪种运行模式,MiniGUI 为上层应用软件提供了最大程度上的一致性;只有少数几个涉及初始化的接口在不同运行模式上有所不同。
软件架构
MiniGUI 由如下几个模块组成:MiniGUI软件架构图
图形抽象层(Graphics Abstraction Layer,GAL)。图形抽象层将来自不同操作系统或设备的图形接口进行抽象,为 MiniGUI 上层提供统一的图形接口。在图形抽象层内,包含有针对 Linux FB 设备、eCos LCD 设备等的软件组成部分。这些软件组成部分通过调用底层设备的接口来实现具体的图形抽象层操作,如打开设备、设置分辨率及显示模式、关闭设备等。将这些用于适配图形抽象层接口的软件组成部分称为“引擎(engine)”,其概念和操作系统中的设备驱动程序类似。
输入抽象层(Input Abstraction Layer,IAL)。和 GAL 类似,输入抽象层将 MiniGUI 涉及的所有输入设备,如键盘(keyboard)、小键盘(keypad)、鼠标(mouse)、触摸屏(touch screen)等抽象了出来,为上层提供一致的接口。要支持不同的键盘、触摸屏或者鼠标接口,则通过为 IAL 编写不同的输入引擎实现。MiniGUI 通过 IAL 及其输入引擎,提供对 Linux 控制台(键盘及鼠标)、触摸屏、遥控器、小键盘等输入设备的支持。
图形设备接口(Graphics Device Interfaces,GDI)。该模块基于图形抽象层为上层应用程序提供图形相关的接口,如绘制曲线、输出文本、填充矩形等等。图形设备接口中含包含其他比较独立的子模块,如字体字符集(font and charset)支持、图像(image)支持等。
消息处理模块(Messaging Module)。该模块在输入抽象层基础上,实现了 MiniGUI 的消息处理机制,为上层提供了完备的消息管理接口。众所周知,几乎所有的GUI 系统本质上都是事件驱动的,系统自身的运行,以及GUI 应用程序的运行,都依赖于消息处理模块。
多窗口处理模块和控件(Windowing Module)和(Control 或 Widget)。基于图形设备接口和消息处理模块,MiniGUI 实现了多窗口处理模块。该模块为上层应用程序提供了创建主窗口和控件的基本接口,并负责维护控件类。控件类是用来实现控件代码重用的重要概念,利用控件类(control class),可以创建属于某个控件类的多个控件实例(instance),从而让这些控件实例使用同一个控件类的代码,这样,就实现了类似 C++ 那样的类和实例概念,从而可以最大程度上重复利用已有代码,并提高软件的可维护性。MiniGUI 的控件模块实现了常见的 GUI 控件,如静态框、按钮、编辑框、列表框、下拉框等等。
外观支持(Look and Feel)。这个模块是 MiniGUI V3.0 提供给上层应用程序的接口,可用来定制 MiniGUI 窗口、控件的绘制。在 MiniGUI V3.0 之前的版本中,对主窗口和控件的定制能力,还没有被抽离出来形成独立的模块,但仍然可以通过配置选项让 MiniGUI 的主窗口、控件具有三种显示风格,分别是:类似 PC 的三维风格(PC3D )、平板风格(FLAT)、流行风格(FASHION)。在 MiniGUI 3.0 中,主窗口和控件的外观可完全由应用程序自行定制,在创建主窗口或者控件时,指定外观渲染器(renderer)的名称,就可以让主窗口或者控件具有各自不同的外观。在 MiniGUI 核心(Core)接口之上,还为应用程序提供若干组件,这些组件分别为应用程序提供某些特殊的功能特性:mGi是 MiniGUI 的输入法组件,该组件目前提供了软键盘输入法和手写输入法框架,并提供给用户管理输入法的容器,通过这个容器,用户还可以添加自定义的输入法。mGp 是针对 MiniGUI 应用程序的一个打印组件,该组件使用户的 MiniGUI 程序具有打印输出功能,可以将 MiniGUI 程序中的位图或文字输出到打印机。mG3d 是一个为 MiniGUI 的应用程序提供 3D 接口的组件,通过这些接口,用户可以给自己的应用程序添加三维图像、文字渲染、场景渲染等效果,从而可以具有三维效果的人机界面。mGUtils 组件为用户提供了一些常用的对话框模板,有了这些模板,用户就不用为一些常用的功能编写重复代码了。本组件提供的功能模板有:普通文件对话框、颜色设置对话框、字体设置对话框、信息设置对话框等。mGPlus 组件是对 MiniGUI 图形绘制接口的一个扩充和增强,主要提供对二维矢量图形和高级图形算法的支持,如路径、渐变填充和颜色组合等。mGEff 组件提供常规的页面特效支持。
minigui3.0.12之初体验-移植篇
在一年多年前有幸接触使用到minigui一段时间,当时使用的应该是1.6版本,硬件平台使用的是s3c2440+64M内存,界面上做了很多功能,但整体运行还是十分流畅,我想要是换成QT在上面跑流畅度应该是比不上minigui的了;前段时间从朋友那拿到一块基于新塘nuc972的板子用来玩玩学习下,nuc972也是一颗基于arm926内核的soc,我想让人喜欢它的地方应该要是它内置了64M的DDR和LQFP的封装吧,硬件配置总体上和s3c2440相当,然后还配了一块800x480的七寸屏,我想用它来跑跑minigui应该会比较合适,也正好看看minigui3.0x更新的新特性。
备料
准备编译环境和交叉编译器,最好能用它编译一个最简单打印一句“hello world!”的小程序在板子上正常跑起来确保整个编译环境的正确;
下载minigui源码,它最基本的组成包括核心库MiniGUI Core Lib (V3.0.12 )和资源文件MiniGUI Resource (V3.0.12)这些多可以从minigui官方网站上下载到,另我这边这个两个文件是从nuc972的bsp包里得到的,它和从官网上下载的唯一区别是,它里面移植好了使用了nuc972的2D硬件加速功能的图像引擎,也就是说可以配置使用nuc972的硬件2D图像加速功能,貌似也只使用到了里面的BitBlt功能,画线这些基本操作还是由minigui来实现的,然而后面当我启用这个功能的时候屏幕颜色显示不对,还没去深究就先使用通用的FrameBuffer图像引擎了。
有了跑minigui的核心资源了,那再跑个demo看看吧,这里选择官网提供的iPhoneLikeDemo 后面发现运行它还需要用到jpeg和png库,这个两个也多可以在官网的下载界面的Tools and Dep. Libraries项里找到。
编译
一、核心库的编译
使用tar命令解压libminigui-gpl-3.0.12.tar.gz并cd进入;
使用configure脚本来配置minigui特性,这里执行如下命令:
。/configure --prefix=$PWD/。./build CC=arm-linux-gcc --host=arm-linux --build=i386-linux --with-osname=linux --with-targetname=fbcon
--disable-pcxvfb --enable-videonuc970 --enable-videofbcon --enable-autoial --disable-vbfsupport
--disable-screensaver --enable-tslibial --enable-procs
其中--enable-videonuc970表示加入nuc92的硬件图形引擎支持,之后可在配置文件中选择使用;--enable-tslibial表示支持tslib作为IAL输入引擎;--enable-procs表示使minigui运行在procs模式,关于minigui的三种运行模式可参考官方文档;
配置成功后,执行make命令,等待编译完成无误后再执行make install命令即可由--prefix=xxx指定的路径下发现minigui的安装文件,把它们拷贝到rootfs对于的目录下即可。
修改etc目录下的MiniGUI.cfg配置文件,首先我们要修改指定我们使用的图像引擎为fbcon然后将其分辨率信息设置我们板子对应的分辨率如下:
# GAL engine and default options
gal_engine=fbcon
defaultmode=800x480-16bpp
第二个需要配置的为输入引擎IAL这里我们使用tslib作为我们的输入引擎即如下:
# IAL engine
ial_engine=tslib
mdev=/dev/input/event0
mtype=IMPS2
还有要修改的地方就是配置正确的资源文件路径,如光标图片资源等,如下:
[cursorinfo]
#Edit following line to specify cursor files path
cursorpath=/share/minigui/res/cursor/
[resinfo]
respath=/share/minigui/res/
Tips:
1. 在官方下载的源码中将不支持--enable-videonuc970选项可去掉;
2. 可通过命令。/configure --help来查看支持的所有选项和含义。
3. 实际上如果我要跑官网上的demo的话还要打开对png图片的支持,配置时这项默认是关闭的,可加入参数--enable-pngsupport但实际上我发现即使添加上这个也是还没打开对png图片的支持,这一点可以通过打开mgconfig.h文件来确认配置是否生效,如果没有可手工将里面对于的宏打开即可,如png图片支持对于的宏为#define _MGIMAGE_PNG 1
二、编译资源文件
资源文件的编译相对简单,里面主要是包含一些图片资源等,如光标样式,使用tar命令解压minigui-res-be-3.0.12.tar.gz并cd进入,然后使用configure脚本配置安装路径执行如下命令:
。/configure --prefix=$PWD/。./build
然后执行make和make install即可,相关资源就会被安装到了上级目录的build目录下,既对应着在rootfs下的相应目录。
三、编译依赖的库文件
1、jpeg库的编译
同样使用configure脚本配置编译,执行命令如下:
。/configure --prefix=$PWD/build CC=arm-linux-gcc --host=arm-linux --build=i386-linux --enable-shared --enable-static
其中--enable-shared是为了配置生成.so即共享库
然后执行make和make install命令后即可在当前目录下的build/lib下找到我们需要的文件了。
Tips:
1、步骤1的配置命令通常适用于大多数使用Autoconf/Automake来生成的工程;
2、注意使用和minigui核心库匹配的jpeg库版本,如果不确定通常程序运行时它会发出错误说找不到对应版本的库文件;
3、以上配置编译命令适用于较新的jpeg库如在jpeg-7上配置编译是通过的,然而在配置编译配置jpeg-6b时却发生了错提示如下:
make: 。/libtool: Command not found
原来较老的jpeg库没有自带libtool,这里要先下载交叉编译libtool-2.2.4配置命令如下:
。/configure --prefix=$PWD/build CC=arm-linux-gcc --host=arm-linux --build=i386-linux
然后make & make install即可;
4、编译好libtool后将build/bin目录下的libtool脚本拷贝至jpeg-6b的目录下,然后先要手动创建好接下来要安装的目录命令如下:
mkdir -p build/bin build/include build/lib build/man/man1
之后再执行make & make install命令即可在build/lib目录下找到我们需要的共享库了。
2、png库的编译
编译配置方法同编译jpeg库,无特别注意事项。
三、编译iphone-like-demo
它同样是使用Autoconf/Automake来配置的工程,所以我们解压它并cd进入使用如下命令来配置它
。/configure --prefix=$PWD/。./build CC=arm-linux-gcc --host=arm-linux --build=i386-linux CFLAGS=-I$PWD/。./build/include
LDFLAGS=“-L$PWD/。./build/lib” LIBS=“-lminigui_procs -lts -ljpeg -lpng -lz -ldl -lm -lpthread”
其中CFLAGS参数指定了minigui的头文件路径,LDFLAGS指定了要链接的动态链接库路径,LIBS指定了要链接的动态链接库,尽管我们这样指定了minigui的头文件路径但是编译过程中它还是有提示报错说找不到相应的minigui的头文件路径,这时我们为了简单只需将minigui的头文件手动的拷贝到其-I指定的路径下即可,这里我们将minigui的头文件拷贝到编译的当前路径下即可;
编译中会遇到很多报错,我们只需依次解决下即可,如
eblistview.c:(.text+0x40): undefined reference to `rindex‘
我们打开eblistview.c这个文件在文件头部添加如下代码
#define rindex strrchr
即用strrchr这个接口来代替rindex这个接口;
一般来说不会有其他很严重的报错,我们多可以依次解决,直到make完成,然后make install后即可在上层build目录下的bin文件夹下生成我们的执行程序;
然后将build目录下的lib文件夹下的库文件拷贝至板子上的lib文件夹下,之后想办法将bin文件夹的东西拷贝至板子上或通过网线挂载的方式,进入执行。/mginit即可。
基于嵌入式Linux系统下Mini GUI的移植方法与过程详解
近几年,嵌入式 Linux 系统已得到广泛的应用,相应的图形用户界面的开发也日趋重要,MiniGUI正是其中的一个轻量级的图形用户界面支持系统。本文分析...
MiniGUI是最负盛名的开源Linux图形用户界面支持系统之一。本文是魏永明老师于公元2017年9月1日最新原创的讨论MiniGUI的涅槃重生之路的文章。
盘点嵌入式的那些常见GUI:emWin、TouchGFX、MiniGUI、Qt等
盘点嵌入式那些常见的GUI:emWin、TouchGFX、MiniGUI、Qt等
为目标嵌入式产品选择适合的嵌入式图形支持系统成为与选择嵌入式操作系统一样颇具挑战性。本土公司开发的MiniGUI是一个高效、可靠、可定制、小巧灵活的图形...
AllWinner+MiniGUI推进物联网产品化的发展浪潮
全志科技与飞漫公司达成合作,在智能硬件领域共同推动Tina Linux+MiniGUI系统的平台生态建设,加速智能家居和智能家电产品的开发和普及。
怎样设计实现一个基于嵌入式Linux和MiniGUI的SIP电话终端的方案?
为了实现这两个条件,在程序实现中使用了写指针和读指针来判断缓冲区是空还是满。在初始化时读指针和写指针为0;如果读指针等于写指针,则缓冲区是空的;如果(写...
本文讲解基于 Linux 和 MiniGUI 的嵌入式系统软件开发,其内容不仅仅限于 MiniGUI 的编程,还会涉及到一些 Linux 下嵌入式系统软...
基于ARM-Linux的MiniGUI的仿真与移植 近几年,随着嵌入式系统的日益发展和32位嵌入式处理器以及图形显示设备的广泛应用,目标产品对GUI(...
编辑推荐厂商产品技术软件/工具OS/语言教程专题
电机控制 | DSP | 氮化镓 | 功率放大器 | ChatGPT | 自动驾驶 | TI | 瑞萨电子 |
BLDC | PLC | 碳化硅 | 二极管 | OpenAI | 元宇宙 | 安森美 | ADI |
无刷电机 | FOC | IGBT | 逆变器 | 文心一言 | 5G | 英飞凌 | 罗姆 |
直流电机 | PID | MOSFET | 传感器 | 人工智能 | 物联网 | NXP | 赛灵思 |
步进电机 | SPWM | 充电桩 | IPM | 机器视觉 | 无人机 | 三菱电机 | ST |
伺服电机 | SVPWM | 光伏发电 | UPS | AR | 智能电网 | 国民技术 | Microchip |
开关电源 | 步进电机 | 无线充电 | LabVIEW | EMC | PLC | OLED | 单片机 |
5G | m2m | DSP | MCU | ASIC | CPU | ROM | DRAM |
NB-IoT | LoRa | Zigbee | NFC | 蓝牙 | RFID | Wi-Fi | SIGFOX |
Type-C | USB | 以太网 | 仿真器 | RISC | RAM | 寄存器 | GPU |
语音识别 | 万用表 | CPLD | 耦合 | 电路仿真 | 电容滤波 | 保护电路 | 看门狗 |
CAN | CSI | DSI | DVI | Ethernet | HDMI | I2C | RS-485 |
SDI | nas | DMA | HomeKit | 阈值电压 | UART | 机器学习 | TensorFlow |
Arduino | BeagleBone | 树莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 华秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |