MiniGUI 核心特性
- 輕量級圖形系統,資源佔用極低
- GPL 開源,基於 SVGALib + LinuxThreads
- 跨平台:Linux、eCos、uC/OS-II、VxWorks、Win32
- 完整視窗機制、多字符集/字體 (GB2312/Big5/UTF-8)、輸入法支援
- BMP/GIF/JPEG/PCX 圖片支援、Windows 資源檔相容
MiniGUI 分層架構
API 層: 應用程式介面
核心層: 視窗系統、消息佇列、定時器、資源管理
抽象層: GAL (圖形抽象層) + IAL (輸入抽象層)
驅動層: 滑鼠/鍵盤驅動、顯示驅動
支撐層: SVGALib + LinuxThreads (POSIX Threads)
GAL/IAL 大幅提升可移植性,開發除錯可在 PC 上使用 X11/Linux Framebuffer 進行。
多執行緒與微客戶/伺服器模型
- 每個執行緒擁有訊息佇列,同一執行緒建立的視窗共享佇列
- 視窗管理執行緒維護全域視窗列表,其他執行緒透過訊息傳遞請求
- 實現微客戶/伺服器機制:客戶執行緒發送請求,伺服器執行緒序列化處理
開發環境建置 (H2410EB + S3C2410A)
- 目標板:S3C2410A (ARM920T, 200MHz, MMU)
- 記憶體:64MB SDRAM + 16MB Flash
- 外設:LCD、觸控、網路、USB、音訊、SD 卡
- 核心:Linux 2.4.18 裁剪版
- 交叉編譯器:arm-linux-gcc 2.95.3
交叉編譯環境建置
# 安裝交叉工具鏈
rpm -ivh cross-arm-binutils-2.10-1.i386.rpm
rpm -ivh cross-arm-gcc-2.95.3-2.i386.rpm
rpm -ivh cross-arm-glibc-2.1.3-2.i386.rpm
# 環境變數配置
export PATH=$PATH:/usr/local/arm/2.95.3/bin
# 確保編譯時 glibc 版本與目標板運行時一致
MiniGUI 交叉編譯流程
# 下載三大元件
wget https://www.minigui.org/download/MiniGUI-1.6.9.tar.gz
# 包含:libminigui, minigui-res, mge (demo)
# 解壓並配置
tar xzf libminigui-1.6.9.tar.gz
cd libminigui-1.6.9
./configure --host=arm-linux \
--target=arm-linux \
--build=i386-linux \
--enable-incoreres \
--disable-videoqvfb \
--enable-videofbcon \
--enable-micemouse \
--enable-gal=fbcon \
--enable-ial=mouse
make
make install DESTDIR=/path/to/rootfs
關鍵配置選項解析
| 選項 | 說明 |
--enable-gal=fbcon | 使用 Framebuffer Console 圖形抽象層 |
--enable-ial=mouse | 使用滑鼠輸入抽象層 |
--enable-incoreres | 內建資源 (字體、圖示) 到庫中 |
--disable-videoqvfb | 禁用虛擬 Framebuffer (PC 除錯用) |
--enable-videofbcon | 啟用 Framebuffer Console 視訊驅動 |
目標板部署驗證
- 將編譯產出的庫檔 (
libminigui.so*) 複製到目標板 /usr/lib/
- 資源檔 (
minigui.res) 放置 /usr/share/minigui/
- 確保 Framebuffer 設備
/dev/fb0 存在
- 觸控/滑鼠設備
/dev/mouse 或 /dev/input/mice 可用
- 執行
mgedemo 或 mginit 驗證
常見移植問題排查
| 現象 | 可能原因 | 解決方案 |
| 顯示異常/花屏 | Framebuffer 參數錯誤 | 檢查 fbset、LCD 時序參數 |
| 觸控無反應 | IAL 配置錯誤/設備節點錯誤 | 檢查 /dev/input/eventX、校準參數 |
| 字體顯示方塊 | 字體資源未正確載入 | 檢查 minigui.res 路徑、編碼支援 |
| 編譯鏈接錯誤 | 交叉編譯器/glibc 版本不匹配 | 確保編譯/運行環境 glibc 版本一致 |