miniGUI安装
?
一.編譯安裝miniGUI 1.6.2
? ?首先要做好準備工作,去http://www.minigui.org/res.shtml下載一下壓縮包:
? ? 開發庫:libminigui-str-1.6.2.tar.gz
? ? 資源文件:minigui-res-str-1.6.tar.gz
? ? 示例程序:mg-samples-str-1.6.2.tar.gz
? ? 建議在qvfb中運行miniGUI程序,這樣比較方便,qvfb下載地址:
http://www.minigui.com/downloads/dep-libs/qvfb-1.0.tar.gz
(1)安裝minigui-res-1.6.tar.gz:MiniGUI 所使用的資源, 包括基本字體、圖標、位圖和鼠標光標。
安裝命令:
#tar -zxf minigui-res-1.6.tar.gz
#cd minigui-res-1.6
#make install
(2)安裝libminigui-1.6.2.tar.gz:MiniGUI 函數庫源代碼。
解壓命令:
#tar -zxf libminigui-1.6.2.tar.gz
這里有一個bug,解壓縮后進入libminigui-str-1.6.2/src/kernel打開init.c文件,
刪除或注釋掉下面這幾行
#ifdef __LINUX__
else {
pthread_kill_other_threads_np ();
}
#endif
保存退出,然后回到/libminigui-str-1.6.2目錄接著安裝:
#cd libminigui-1.6.2
#./configure
#make
#make install
(3)把libminigui加入庫搜索路徑:
進入/etc/ld.so.conf.d建一個vminigui.conf,寫上/usr/local/lib
可以使用命令完成:
#echo /usr/local/lib >?/etc/ld.so.conf
(4)最后要把系統共享庫緩存刷新,將libminigui加載上,可以使用命令
#ldconfig
這個命令執行時要花十多秒,耐心等待。當然不使用刷新命令重啟系統也可以。
(5)編譯示例程序
解壓并編譯mg-smaples-1.6.2.tar.gz:
#tar –zxf mg-smaples-1.6.2.tar.gz
#./configure
#make
如果helloworld.c 編譯不過,去掉#include <mywindow.h>試一試
----------------------------------------------------
二.配置minigui
minigui在linux中有兩種運行模式:fbcon和qvfb
fbcon:Frame Buffer Console
qvfb: Qt Virtual Frame Buffer
看名字就知道fbcon在控制臺下運行,這種模式下你不能開linux的X圖形界面,使用不方便。fbcon則是帶幀緩沖的虛擬控制臺,minigui程序在qvfb中運行就像我們在圖形界面下的Terminal中運行命令一樣。兩種模式我都試過了,詳細配置如下:
(1)fbcon模式
打開MiniGUI.cfg?
# gedit /usr/local/etc/MiniGUI.cfg
注意這一段:
-------------------------------------------------
[system]
# GAL engine
gal_engine=fbcon
# IAL engine
ial_engine=fbcon?
mdev=/dev/mouse
mtype=IMPS2
-------------------------------------------------
gal_engine和ial_engine的值應該設置為fbcon,minigui安裝后默認設置就是這樣,所以你不用改。要注意的就是鼠標的設置,
如果用的是fedora7,其中鼠標設備文件不是這里的/dev/mouse,而是/dev/input/mice,最好建一個符號鏈接到/dev/mouse
配置文件MiniGUI.cfg搞定后需要開啟linux內核的幀緩沖支持,這個是在引導器中修改,我使用的是現在最流行的grub,修改方法:
# vim /boot/grub/menu.lst
在menu.lst中加入一個段落:
----------------------------------------------------------
title MiniGUI 1.6.2
?? root (hd0,0)
?? kernel /boot/vmlinuz-2.4.20-8 ro root=LABEL/ vga=0x0314 fb:on
?? initrd /boot/initrd-2.4.20-8.img
----------------------------------------------------------
這里的root(hd0,0)以及kernel,initrd段需要結合你自己的系統和分區情況填寫,最簡單的辦法是把你以前的一個linux啟動項找過來對照著改,kernel項后面的vga=0x0314 fb:on是設置顯示器分辨率,打開幀緩沖。
顯示模式對照表:
-------------------------------------------------------
? ?? ? 640x480? ? 800x600? ? 1024x768? ? 1280x1024
8位色? ?0x301? ?? ?0x303? ?? ? 0x305? ?? ? 0x307
15位色? ?0x310? ?? ?0x313? ?? ? 0x316? ?? ? 0x319
16位色? ?0x311? ?? ?0x314? ?? ? 0x317? ?? ? 0x31A
24位色? ?0x312? ?? ?0x315? ?? ? 0x318? ?? ? 0x31B
-------------------------------------------------------
重啟系統在grub中選擇title MiniGUI 1.6.2
登錄后就可以運行mg-smaples-1.6.2/src中的例子了,運行一個helloworld試試效果,如果沒有問題正常顯示了窗口就說明一切OK了。
(2)qvfb模式
把下載回來的qvfb-1.0.tar.gz解壓安裝:
# tar zxf qvfb-1.0.tar.gz
# cd qvfb-1.0
# ./configure
# make
# make install
打開MiniGUI.cfg?
# gedit /usr/local/etc/MiniGUI.cfg
注意一下段落:
---------------------------------------------------
[system]
# GAL engine
gal_engine=qvfb??
# IAL engine
ial_engine=qvfb??
mdev=/dev/mouse
mtype=IMPS2
[fbcon]
defaultmode=1024x768-16bpp
[qvfb]
defaultmode=640x480-16bpp?
display=0
---------------------------------------------------
gal_engine和ial_engine的值應該設置為qvfb,minigui安裝后默認設置就是fbcon,所以你要改過來。另外要注意
[qvfb]段中的defaultmode,這個是你需要使用的顯示器分辨率和色深,后面設置qvfb要和這里一致,否則minigui運行時或報初始化
失敗的錯誤。
然后就可以使用qvfb體驗miniGUI了:
# qvfb &
加上&符號使qvfb進程開啟后shell立即返回,否則會阻塞shell進程,需要再開一個shell才可以運行minigui程序。qvfb
運行起來后在qvfb中設置虛擬顯示器分辨率:File-->Configure,注意Size和Depth要設置的同MiniGUI.cfg中的
分辨率和色深一致。
qvfb設置搞定后就可以運行mg-smaples-1.6.2/src中的例子了,運行一個helloworld試試效果,Good luck!
?
1. 啟動程序時出錯:
NEWGAL: Set video mode failure.
GDI: Can not initialize graphics engine!
InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.
Video mode smaller than requested
原因:qvfb中的顯示設置與MiniGUI.cfg中的顯示設置不一樣所致,修改成一樣就可以了。
2. 啟動程序時出錯:GAL: Does not find matched engine.
GDI: Can not get graphics engine information!
InitGUI failure when using incore resource.
原因:在配置MiniGUI時沒有選擇qvfb選項或沒有選擇需要的位深支持,進入make menuconfig中的“GAL engine options”,選上“Native GAL engine on Linux FrameBuffer console”、“Native GAL engine on Qt Virtual FrameBuffer”和需要的位深模式(如“16BPP FB”)后重新編譯即可。
3. 我自己寫了一個程序,但是在編譯時提示:linux:/home/work1/app # gcc -o hello hello.c -lpthread -lminigui
/usr/local/lib/libminigui.so: undefined reference to `CustomizeDesktopMenu’
/usr/local/lib/libminigui.so: undefined reference to `CustomDesktopCommand’
collect2: ld returned 1 exit status
原因:我使用的是MiniGUI-Thread(在make menuconfig中指定),程序中沒有包含必須的minigui/dti.c,所以會出錯。
4. /usr/local/lib/libminigui.so: undefined reference to `pthread_kill_other_threads_np’
原因:刪除 MiniGUI 源代碼中調用’pthread_kill_other_threads_np’這個函數
的語句。應該在 src/kernel/init.c 文件中,也可以運行 grep 找一下這個函數。
5. 運行miniGUI的例子出現以下錯誤,
IAL Native Engine: Can not init mouse!
IAL: Init IAL engine failure.
DESKTOP: Low level event initialization failure!
InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.
原因:修改/usr/local/etc/MiniGui.cfg文件:
? ???[system]
? ???# GAL engine
? ???gal_engine=qvfb
? ???# IAL engine
? ???ial_engine=qvfb
6. freetype_font_ops問題解決方法:a.把頭文件中的extern FONTOPS freetype_font_ops;改為static FONTOPS freetype_font_ops;b.安裝freetype-1.3.1
?
7 cheching for Qt...configure:error: Qt(>= Qt 3.0.3)(headers and libraries)not found.please check your installation!
解決辦法:使用kde 即可 不要用gnome ,或用默認的QT。。。。或編譯qt時候加上-thread就可以了
?3 移植過程
1? 在X86的LINUX上設置:/etc/ld.so.conf 文件,在里面最后新加入一行 /usr/local/lib
2 把PC上的/usr/local/lib 拷到X86上相同的文件夾下
總結
- 上一篇: window下eclipse搭建C/C+
- 下一篇: Linux下安装、查看、删除软件包