Buildroot 移植MiniGUI
MiniGUI是一个用于嵌入式系统的轻量级图形用户界面库。要将 MiniGUI 4.0.8 移植到 Buildroot 系统中,通常需要下载并安装几个关键的组件包。虽然具体的版本号可能会有所不同,但一般来说,移植 MiniGUI 需要以下几类包:
核心库(Core Library): 这是 MiniGUI 的核心部分,提供了基本的窗口系统和绘图功能
资源文件(Resources): 包含 MiniGUI 所需的各种资源,如位图、图标等。这些资源通常是通过
minigui-res
包提供的。第三方依赖库(Third-Party Libraries): MiniGUI 可能依赖于一些其他的库,比如 FreeType(用于字体渲染)、LibPNG(用于处理 PNG 图像)、LibJPEG(用于处理 JPEG 图像)等。确保你已经安装了所有必要的第三方库。
附加组件(Add-ons): 如果你的应用需要用到 MiniGUI 的高级功能或插件,你还需要下载相关的附加组件。例如,
libmgutils
、libmgplus
等。示例程序(Samples): 虽然不是必需的,但是下载示例程序可以帮助你了解如何使用 MiniGUI 提供的功能,并作为开发参考。
为了将 MiniGUI 4.0.8 成功集成到 Buildroot 中,你需要做的是:
- 在 Buildroot 中添加 MiniGUI 的配置选项。
- 下载 MiniGUI 源码以及其依赖项的源码。
- 根据 Buildroot 的规范编写相应的 Makefile 或者 package recipe 文件来描述如何编译和安装 MiniGUI 和它的依赖项。
Buildroot 有一个非常灵活的包管理系统,需要的包编写自己的 .mk
文件,定义如何下载、配置、编译和安装该软件包。
1. 准备环境
确保开发环境已经安装了 Buildroot 的依赖工具(如 make
、gcc
、git
等)。如果是全新环境,可以参考 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 需要以下几类包:
- 核心库(Core Library): 这是 MiniGUI 的核心部分,提供了基本的窗口系统和绘图功能。
- 资源文件(Resources): 包含 MiniGUI 所需的各种资源,如位图、图标等。这些资源通常是通过
minigui-res
包提供的。 - mGUtils: 是一个实用工具库,它为 MiniGUI 应用程序提供了一系列的辅助函数和工具,以简化开发过程并提高代码效率
- mGPlus: 是 MiniGUI 的高级图形库,它在 MiniGUI 核心库的基础上增加了更多强大的图形处理能力。
- 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 5月 14 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 5月 14 14:44 output/target/usr/lib/libminigui_ths-4.0.so.0.0.8*
lrwxrwxrwx 1 -- -- 27 5月 14 14:40 output/target/usr/lib/libminigui_ths.so -> libminigui_ths-4.0.so.0.0.8*
6. 参考资源
Buildroot 手册:https://buildroot.org/docs.html
MiniGUI 文档:http://www.minigui.com/en/documents/
GitHub 上 MiniGUI 4.0.8 的构建脚本:https://github.com/VincentWei/build-minigui-4.0