Buildroot 移植MiniGUI

发布于:2025-05-16 ⋅ 阅读:(13) ⋅ 点赞:(0)

在这里插入图片描述

在这里插入图片描述

Buildroot 移植MiniGUI

     MiniGUI是一个用于嵌入式系统的轻量级图形用户界面库。要将 MiniGUI 4.0.8 移植到 Buildroot 系统中,通常需要下载并安装几个关键的组件包。虽然具体的版本号可能会有所不同,但一般来说,移植 MiniGUI 需要以下几类包:

  1. 核心库(Core Library): 这是 MiniGUI 的核心部分,提供了基本的窗口系统和绘图功能

  2. 资源文件(Resources): 包含 MiniGUI 所需的各种资源,如位图、图标等。这些资源通常是通过 minigui-res 包提供的。

  3. 第三方依赖库(Third-Party Libraries): MiniGUI 可能依赖于一些其他的库,比如 FreeType(用于字体渲染)、LibPNG(用于处理 PNG 图像)、LibJPEG(用于处理 JPEG 图像)等。确保你已经安装了所有必要的第三方库。

  4. 附加组件(Add-ons): 如果你的应用需要用到 MiniGUI 的高级功能或插件,你还需要下载相关的附加组件。例如,libmgutilslibmgplus 等。

  5. 示例程序(Samples): 虽然不是必需的,但是下载示例程序可以帮助你了解如何使用 MiniGUI 提供的功能,并作为开发参考。

为了将 MiniGUI 4.0.8 成功集成到 Buildroot 中,你需要做的是:

  • 在 Buildroot 中添加 MiniGUI 的配置选项。
  • 下载 MiniGUI 源码以及其依赖项的源码。
  • 根据 Buildroot 的规范编写相应的 Makefile 或者 package recipe 文件来描述如何编译和安装 MiniGUI 和它的依赖项。

Buildroot 有一个非常灵活的包管理系统,需要的包编写自己的 .mk 文件,定义如何下载、配置、编译和安装该软件包。

1. 准备环境

确保开发环境已经安装了 Buildroot 的依赖工具(如 makegccgit 等)。如果是全新环境,可以参考 Buildroot 的官方文档安装必要的软件包。

  • 下载 Buildroot:

    # 官网下载地址
    https://buildroot.org/download.html
    
    
  • 选择一个适合目标设备的版本(例如最新的稳定版,或与 MiniGUI 4.0.8 兼容的版本)。

2. 配置 Buildroot

Buildroot 使用配置文件来定义目标系统的组件。为目标设备选择一个默认配置,然后添加 MiniGUI 支持。

  • 加载默认配置:

    make  xxxx_defconfig
    
    
  • 打开 Buildroot 的配置界面(集成MiniGUI后):

    # 在增加MiniGUI模块后, 可以使用配置里打开编译配置
    make menuconfig
    
    

3. 添加 MiniGUI 4.0.8

Buildroot 默认包列表中可能不包含 MiniGUI,因此需要手动添加 MiniGUI 4.0.8 的支持。MiniGUI 是一个外部包,你需要将其集成到 Buildroot 中。

方法 1:使用外部包

  • 下载 MiniGUI 4.0.8 源码
    从 MiniGUI 官方网站(http://www.minigui.com)或 GitHub(如 VincentWei 的仓库)下载 MiniGUI 4.0.8 的源代码。
    参考下载:
    在这里插入图片描述

    https://minigui.fmsoft.cn/download
    

移植 MiniGUI 需要以下几类包:

  1. 核心库(Core Library): 这是 MiniGUI 的核心部分,提供了基本的窗口系统和绘图功能。
  2. 资源文件(Resources): 包含 MiniGUI 所需的各种资源,如位图、图标等。这些资源通常是通过 minigui-res 包提供的。
  3. mGUtils: 是一个实用工具库,它为 MiniGUI 应用程序提供了一系列的辅助函数和工具,以简化开发过程并提高代码效率
  4. mGPlus: 是 MiniGUI 的高级图形库,它在 MiniGUI 核心库的基础上增加了更多强大的图形处理能力。
  5. MiniGUI Samples: 不是必需的,示例程序可以作为开发参考。

MiniGUI Core Lib (V4.0.8)核心库的目录结构:

minigui
├── 3rd-party
├── AUTHORS.md
├── autogen.sh
├── b_configure.ac
├── build
├── ChangeLog
├── ChangeLog.old
├── clean_license.sh
├── cmake
├── CMakeLists.txt
├── cmake_mgconfig.h.in
├── configs
├── configure.ac
├── doc
├── Doxyfile.procs
├── Doxyfile.sal
├── Doxyfile.ths
├── etc
├── examples
├── GNUmakefile
├── include
├── INSTALL
├── LICENSE
├── LICENSE-POLICY-en.md
├── LICENSE-POLICY-zh.md
├── ltmain.sh
├── m4
├── Makefile.am
├── makefile.msvc
├── makefile.ng
├── make_tarball
├── merge.log
├── minigui.pc.in
├── README
├── README.md
├── RELEASE-NOTES.md
├── rtos
├── rules.make
├── scripts
├── src
└── Version.md

  • 创建 MiniGUI 包定义(增加Config.in minigui.mk)
    buildroot/package/ 目录下创建一个新目录,例如 minigui,然后添加以下文件:

增加 minigui/Config.in

        cat minigui/Config.in 
       config BR2_PACKAGE_MINIGUI
       bool "MiniGUI"
       help
         MiniGUI is a mature cross-platform GUI system for embedded and smart IoT devices.
         http://www.minigui.com
        

增加minigui/minigui.mk

minigui/minigui.mk 
MINIGUI_VERSION = 4.0.8

MINIGUI_SITE = $(TOPDIR)/package/minigui
MINIGUI_SITE_METHOD = local
MINIGUI_LICENSE = LGPL-2.1+
MINIGUI_LICENSE_FILES = COPYING
MINIGUI_INSTALL_STAGING = YES
MINIGUI_INSTALL_TARGET = YES


MINIGUI_DEPENDENCIES = host-pkgconf libpng jpeg freetype zlib

define MINIGUI_CONFIGURE_CMDS
    (cd $(@D); \
     ./autogen.sh; \
     $(TARGET_CONFIGURE_OPTS) \
     ./configure \
         --host=$(GNU_TARGET_NAME) \
         --build=$(GNU_HOST_NAME) \
         --prefix=/usr \
         --sysconfdir=/etc \
         --disable-static \
         --with-osname=linux \
         --with-targetname=fbcon \
         --with-target=fb \
         --enable-videodfb \
         --enable-fbcon \
         --with-runmode=ths \
         --with-ttfsupport=ft2 \
         --with-ttfcachesize=512 \
         --with-zlib=$(STAGING_DIR)/usr \
         --with-png=$(STAGING_DIR)/usr \
         --with-jpeg=$(STAGING_DIR)/usr \
         --with-freetype=$(STAGING_DIR)/usr \
         --with-ft2-includes=$(STAGING_DIR)/usr/include/freetype2)
endef

define MINIGUI_BUILD_CMDS
    $(MAKE) -C $(@D) CFLAGS="$(TARGET_CFLAGS) -D__MINIGUI_LIB__"\
        CPPFLAGS="$(TARGET_CPPFLAGS) -D__MINIGUI_LIB__ -I$(STAGING_DIR)/usr/include" \
        LDFLAGS="$(TARGET_LDFLAGS) -L$(STAGING_DIR)/usr/lib" 
endef


define MINIGUI_INSTALL_STAGING_CMDS
    $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install
    @echo "Installed files to: $(STAGING_DIR)"
endef

$(eval $(autotools-package))

        

修改将 minigui/Config.in 添加到 package/Config.in 中:
编辑 package/Config.in,在合适的位置添加, 本文中是将其添加在
Target packages → Libraries → Graphics:

        source "package/minigui/Config.in"
  • 启用 MiniGUI(make menuconfig 手动配置)
    再次运行 make menuconfig,在 Target packages → Libraries → Graphics 下找到并启用 minigui
    在这里插入图片描述

方法 2:使用外部树(External Tree)**

如果不想直接修改 Buildroot,可以创建一个外部目录来存放 MiniGUI 的包定义:

  • 创建外部目录(如 myexternal),并按照上述步骤添加 package/minigui/

  • 在 Buildroot 中指定外部树:

    make O=../buildroot-output BR2_EXTERNAL=../myexternal menuconfig
    
    

4. 配置图形支持

MiniGUI 需要底层的图形支持(如 Framebuffer)。

5. 构建系统

配置完成后,编译整个系统:

make

编译完成后可以看到输出文件:

ll output/target/usr/lib/libminigui_ths*
lrwxrwxrwx 1 -- --      27 514 14:40 output/target/usr/lib/libminigui_ths-4.0.so.0 -> libminigui_ths-4.0.so.0.0.8*
-rwxr-xr-x 1 -- -- 2164796 514 14:44 output/target/usr/lib/libminigui_ths-4.0.so.0.0.8*
lrwxrwxrwx 1 -- --      27 514 14:40 output/target/usr/lib/libminigui_ths.so -> libminigui_ths-4.0.so.0.0.8*

6. 参考资源