簡介
MiniGUI 是一款面向嵌入式系統的高級窗口系統(Windowing System)和圖形用戶界面(Graphical User Interface,GUI)支持系統,由魏永明先生於 1998 年底開始開發。2002 年,魏永明先生創建北京飛漫軟件技術有限公司,為 MiniGUI 提供商業技術支持,同時也繼續提供開源版本,飛漫軟件是中國地區為開源社區貢獻代碼最多的軟件企業。最后一個采用 GPL 授權的 MiniGUI 版本是 1.6.10,從 MiniGUI 2.0.4 開始 MiniGUI 被重寫並使用商業授權,從3.0.12開始,部分版本使用GPL授權。歷經十余年時間, 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官網上下載,需要有新浪賬號或者twitter賬號。下面是我下載的版本。
01 [root@localhost minigui]# ls -l *.tar.gz
02 -rwxrw-rw-. 1 root root 1427072 Jan 16 17:30 freetype-1_3_1.tar.gz
03 -rw-rw-r--. 1 root root 63582 Jan 16 17:31 gvfb-1_0_0.tar.gz
04 -rw-rw-r--. 1 root root 602762 Jan 16 17:32 qvfb2-2_0.tar.gz
05 -rwxrw-rw-. 1 root root 557220 Feb 11 00:56 zlib-1.2.6.tar.gz
06 -rwxrw-rw-. 1 root root 1059513 Feb 11 00:55 libpng-1.5.8.tar.gz
07 -rwxrw-rw-. 1 root root 986681 Feb 10 23:42 jpegsrc.v8c.tar.gz
08 -rw-rw-r--. 1 root root 340656 Jan 16 17:33 libmg3d-1_0_2.tar.gz
09 -rw-rw-r--. 1 root root 1545209 Jan 16 17:34 libmgi-2_0_4.tar.gz
10 -rw-rw-r--. 1 root root 1116885 Jan 16 17:33 libmgp-1_2_2.tar.gz
11 -rw-rw-r--. 1 root root 648207 Jan 16 17:34 libmgplus-1_2_4.tar.gz
12 -rw-rw-r--. 1 root root 659702 Jan 16 17:33 libmgutils-1_0_4.tar.gz
13 -rw-rw-r--. 1 root root 3202804 Jan 17 00:29 libminigui-gpl-3_0_12.tar.gz
14 -rw-rw-r--. 1 root root 2608473 Jan 16 17:29 mg-samples-3_0_12.tar.gz
15 -rw-rw-r--. 1 root root 3449215 Jan 16 17:29 minigui-res-be-3_0_12.tar.gz
官網上有幾個庫的版本太低,所以需要自己去網上下載,其中jpegsrc.v8c.tar.gz、libpng-1.5.8.tar.gz和zlib-1.2.6.tar.gz都是從網上找的最近版本(png和zlib這兩個
soucefoge上都有,前面一個是網上搜的,所以不能保證鏈接長期有效,但是網上搜一下還是比較容易找到的)。其實我也是在運行例子程序的時候才發現問題的,庫更新后就可以正常運行了。
簡單介紹一下使用到的幾個庫。
freetype:FreeType庫是一個完全免費(開源)的、高質量的且可移植的字體引擎,它提供統一的接口來訪問多種字體格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持單色位圖、反走樣位圖的渲染。FreeType庫是高度模塊化的程序庫,雖然它是使用ANSI C開發,但是采用面向對象的思想,因此,FreeType的用戶可以靈活地對它進行裁剪。
gvfb與qvfb2:這兩個主要用於pc上仿真,在嵌入式平台上沒用,就不做說明。
zlib:zlib是提供數據壓縮用的函式庫,由Jean-loup Gailly與Mark Adler所開發,初版0.9版在1995年5月1日發表。zlib使用DEFLATE算法,最初是為libpng函式庫所寫的,后來普遍為許多軟件所使用。
libpng:這個是用來顯示png圖形的,MiniGUI里很多圖都是png的,如果沒有這個庫,MiniGUI將無法正常工作。
jpeg:用於顯示jpeg圖像,否則程序不能正常運行。
minigui-res:minigui3.0工具欄所使用的資源集合,包括字體、圖標、位圖等。
libminigui:minigui3.0的核心庫。
mg-samples:minigui3.0的例子程序,有一兩個小游戲,可以玩玩~~
minigui可選組件:libmg3d(3D支持)、libmgi(提供輸入接口)、libmgp(提供打印機接口的支持)、libmgplus(2D矢量圖支持和圖像加速)、libmgutils(提供一些常用對話框的模板),可以根據自己的需要使用,在跑例子程序的時候使用到了libmgplus,所以就臨時編了它的lib。
交叉編譯圖像庫
先將代碼解壓到你所放置代碼的位置,然后再進行如下步驟來編譯安裝圖像庫。我的安裝目錄是:/usr/local/minigui,可以根據自己的習慣和喜好安裝在其他目錄,通過prefix參數來配置安裝目錄。
編譯zlib庫
編譯與配置腳本:
[root@localhost] CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
AS=arm-linux-as \
AR=arm-linux-ar \
./configure --prefix=/usr/local/minigui \
--shared
#配置完成后
[root@localhost] make
[root@localhost] make install
編譯png庫
[root@localhost] CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
AS=arm-linux-as \
AR=arm-linux-ar \
./configure --prefix=/usr/local/minigui \
--build=i386-linux \
--host=arm-linux \
--target=arm-linux
[root@localhost] make
[root@localhost] make install
編譯Jpeg庫
[root@localhost] CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
AS=arm-linux-as \
AR=arm-linux-ar \
./configure --prefix=/usr/local/minigui \
--build=i386-linux \
--host=arm-linux \
--target=arm-linux \
--enable-shared
[root@localhost] make
[root@localhost] make install
編譯freetype庫
自動配置還有問題,也沒有嘗試高版本的freetype能不能使用,暫時就先這樣,好像例子代碼里面並沒有使用它。后面再嘗試高版本的freetype。
01 [root@localhost] cd freetype-1.3.1/
02 [root@localhost] ./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui
03 [root@localhost] vim config.cache
04 # 修改如下行
05 ac_cv_path_LD=${ac_cv_path_LD=arm-linux-gnu-ld}
06 ac_cv_prog_CC=${ac_cv_prog_CC=arm-linux-gnu-gcc}
07 ac_cv_prog_CPP=${ac_cv_prog_CPP='arm-linux-gnu-gcc -E'}
08 #重新配置
09 [root@localhost] ./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui
10 # 修改Makefile文件,以跳過編譯test目錄。
11 # 去掉“all:”后的變量“tttest”
12 # 注釋掉“install:”下的第二行:“cd $(FTTESTDIR); $(MAKE) –f$(MAKEFILE) install”
13 [root@localhost] make
14 [root@localhost] make install
安裝minigui資源庫
[root@localhost] CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
AS=arm-linux-as \
AR=arm-linux-ar \
./configure --prefix=/usr/local/minigui
[root@localhost] make
[root@localhost] make install
編譯minigui核心庫
配置腳本:
[root@localhost] CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
CFLAGS="-I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
CPPFLAGS="-g -I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
CXXFLAGS="-g -I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
./configure --prefix=/usr/local/minigui \
--host=arm-linux \
--target=arm-linux \
--build=i386-linux \
--with-osname=linux \
--with-style=classic \
--with-targetname=fbcon \
--enable-autoial \
--enable-rbf16 \
--disable-vbfsupport
[root@localhost] make
[root@localhost] make install遇到錯誤:pcxvfb.c:490:13: error: impossible constraint in ‘asm’,因為使用了錯誤的頭文件,解決方法如下:
修改Makefile: src/newgal/pcxvfb/Makefile,把相關的地方都去掉,就兩個地方如下:
#oldincludedir = /usr/include
INCLUDES = -I$(abs_top_srcdir)/src/include -I$(abs_top_srcdir)/include \
-I$(abs_top_srcdir)/src/newgal/ -I/usr/include
編譯minigui例子程序
例子程序也不是一帆風順的,從配置到最后編譯都會有問題。具體配置腳本如下:
[root@localhost] CC=arm-linux-gcc \
CXX=arm-linux-g++ \
LD=arm-linux-ld \
CFLAGS="-I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
CPPFLAGS="-g -I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
CXXFLAGS="-g -I/usr/local/minigui/include -I/usr/local/arm_linux_4.2/arm-none-linux-gnueabi/include " \
./configure --prefix=/usr/local/minigui \
--build=i386-linux \
--host=arm-linux \
--target=arm-linux
在配置階段或遇到環境變量的問題,但是在配置了環境變量后還是出現錯誤,就直接在configure文件中添加了變量,這樣才通過配置。修改如下:
出現error:
checking for MINIGUI... configure: error: Package requirements (minigui >= 3.0.10) were not met:
No package 'minigui' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
修改,添加PKG_CONFIG_PATH路徑 ,重新configure
#./configure --prefix=/home/walkman/Downloads/minigui/source/ --build=i386-linux --host=arm-linux --target=arm-linux
export PKG_CONFIG_PATH=/usr/local/minigui/lib/pkgconfig
修改dbuff目錄下的watch.c文件將類型修改為int類型
注釋ctrl_dlg目錄下的dlgdemo.c文件
部署圖像庫
其實這個工作很簡單,主要有兩個步驟,一個修改minigui的配置文件,另一個是拷貝庫文件到文件系統就可以了。配置文件在minigui的wiki上也有較詳細的介紹,可以參考:《MiniGUI V3.0 的運行》
修改配置文件:
view source
print?
01 $ vim /usr/local/minigui/etc/MiniGUI.cfg
02 # 修改如下參數
03 # GAL engine and default options
04 gal_engine=fbcon
05
06 # IAL engine
07 ial_engine=console
08 mdev=/dev/input/mice
09 mtype=IMPS2
10
11 # 根據實際的顯示大小填
12 [fbcon]
13 defaultmode=480x272-16bpp
拷貝庫到文件系統:
1 $ cp /usr/local/minigui/* /myrootfs/usr/local
拷貝你的例子程序就可以在開發板上運行了~~
qvfb2 的安裝(進入 qvfb2 的源碼目錄,運行如下命令):
./configure --with-qt-includes=/usr/include/qt3 --with-qt-libraries=/usr/lib/qt3
配置qvfb路徑
在/ues/local/etc/MniiGUI.cfg
#{{ifdef _MGGAL_PCXVFB
[pc_xvfb]
defaultmode=800x600-16bpp
window_caption=XVFB-for-MiniGUI-3.0-(Gtk-Version)
exec_file=/usr/local/bin/qvfb2 //qvfb路徑
#/usr/local/bin/qvfb2
#}}