minigui環境搭建

想好好學學編程基礎,先前安裝了qt的開發環境,但是最終因爲c++水平有限,決定先搞搞minigui的代碼,就按着這個教材安裝了個開發環境

花了我一晚上的時間

 

Minigui 算是我們中國人在世界軟件界的驕傲了,作爲中國人理應學它,雖然現在基本都用 QT 了。(關鍵是我的開發板只有 16M NORFLASH ,華恆的板子真會賺錢,故意留個 NANDFLASH 不給你焊接上去,唉這麼小的 ROM 只能望 QT 興嘆了)不過 MiniGUI 做的不錯,玩了玩他們自帶的掃雷啥的小遊戲,還挺爽的。

 

華恆的 S3C2440 的光盤裏面已經講交叉編譯環境下的 Minigui 給你做的七七八八了。下面是華恆的交叉編譯環境的搭建步驟

A .編譯 minigui (在 libminigui-1.3.3 目錄下操作)

B .編譯 minigui 支持資源 (在 minigui-res-1.3.3 目錄下操作)

C .編譯 minigui 的示例程序 (在 mg-samples-1.3.1 mde-1.3.0 目錄下操作)

D. 以上步驟編譯出來的文件放到文件系統映像( ramdisk.image.gz )文件去

爲了方便,我們上述目錄和 nfsroot 目錄都放入一個 HHTECH 字母打頭腳本文件,執行相應腳本文件,就可以完成一系列的操作, 可以使用 vi 打開相關文件看看,所做的操作將在下面介紹移植過程作出介紹。

A. libminigui-1.3.3 目錄下編寫了 HHTECH.inst.lib 腳本文件,執行此文件就可以把 mingui 的庫、包含文件等文件編譯好,以便後面操作。

B. mingui-res-1.3.3 目錄下編寫了 HHTECH.inst 腳本文件,執行此文件,就可以把運行 minigui 示例程序時需要的相關資源拷貝到 /HHARM2440/applications/minigui-free/nfsroot 目錄的相關目錄下去。

C. mg-samples-1.3.1 mde-1.3.0 目錄下編寫了 HHTECH.compile.mg 腳本文件 , 執行此文件,在 mg-samples-1.3.1/src mde-1.3.0/bomb 目錄及其它目錄下就可以生成 minigui 的示例, mg-samples 目錄下是一些簡單的示例, mde-1.3.1 目錄下是複雜一些的示例或應用程序。這些應用程序需要客戶可以自行選擇哪些拷貝到文件系統( ramdisk.imag.gz )中去。我們已經拷貝了 mg-samples-1.3.1/src/ 目錄下的 treeview 到我們帶的文件系統映像文件

 

不是用的華恆的板子的兄弟們也不用急,因爲華恆只給了交叉編譯環境的,爲了開發方便,我們換需要搭建在 PC 環境下的 Minigui 。具體的移植搭建方法完全一樣,只是用的編譯工具不同,一個是 gcc 一個是 arm-linux-gcc

爲了與交叉編譯環境兼容,我選擇了 minigui1.3.3 版本

 

那麼開始移植吧:

 

1.       安裝 Minigui

1 )首先下載 Minigui 的軟件:

http://www.minigui.com/download/libminigui-1.3.3.tar.gz    

Minigui 的庫文件

http://www.minigui.com/download/minigui-res-1.3.3.tar.gz  

minigui 所使用的資源,包括基本字體、圖標、位圖和鼠標光標     

這兩個包的下載需要你在www.minigui.com     上註冊過纔可以下載,免費註冊的,自己去下吧

http://www.minigui.com/downloads/minigui13/mde-1.3.0.tar.gz            圖形界面程序

http://www.minigui.com/downloads/minigui13/mg-samples-1.3.0.tar.gz    

一些小例子

2 )下載支持的庫文件

這裏注意的是查看你的 linux 裏面有沒有 jpeg png ttf lz 這些庫文件

可以利用解壓縮 libminigui-1.3.3 下的 configture 進行驗證:

     # tar  zxf  libminigui-1.3.3.tar.gz

    # cd libminigui-1.3.3

# ./configure                 

    注意看 configure 的信息,如果有:

   checking for FrameBuffer console support... yes

checking for pthread library... yes

checking for TT_FreeType_Version in -lttf... yes

checking for jpeg_std_error in -ljpeg... yes

checking for png_check_sig in -lpng... yes

   如果裏面有“ no ”的話,不用編譯了,先把相關的庫裝起來在編譯 libminigui 。由於我的什麼庫都沒有因此都要安裝,下面詳細介紹:

 

A :首先安裝 zlib 庫,這個是後面的庫的編譯基礎。

http://www.zlib.net/zlib-1.2.3.tar.gz 

400 K ,去下載吧,

  

   保存到一個目錄下後 (   /minigui)

# tar zxf zlib-1.2.3.tar.gz

   #  cd  / zlib-1.2.3

#  ./configure  --shared                   編譯成動態庫

#  make

# make install                             安裝

 

B :安裝 png

# tar zxf libpng-1.0.10rc1.tar.gz

# cd libpng-1.0.10rc1

Libpng 不提供有效的 configure 腳本,所以只好自己動手改 Makefile 文件了。可以把 Scripts  下的一個 makefile 拷出來自己動手改

# cp scripts/makefile.linux  Makefile  

   #  make

#  make install

 

C :安裝 libjpeg-6b

tar xzvf jpegsrc.v6b.tar.gz

cd jpeg-6b

.   /configure --enable-static --enable-shared --prefix=/usr       // 關鍵這樣才能生成要求的庫文件

make

mkdir /usr/man/man1                 // 必須件這個文件夾否則安裝出錯

make install

 

D :安裝 ttf

這個比較麻煩一點。

# tar zxf  freetype-1.3.1.tar.gz       // 老一套

# cd freetype-1.3.1   // 進到目錄裏去

# mkdir p  /opt/ libttf/extend   // 自己另外建立一個目錄

# cp freetype-1.3.1/lib/*  freetype-1.3.1/lib/arch/ansi/*  libttf/  // 把有用的東西拷出來

#cp freetype-1.3.1/lib/extend/*  libttf/extend/    extend 目錄下的文件也拷出來

                                          就是拷貝到自建的目錄 /opt/ libttf/

注意 cp 命令不要用 r 選項,因爲會把一些沒用的東西出拷出來的

 

拷貝完成了,現在來自己手動編譯了

 

# cd libttf

# gcc -c -fPIC -O2 freetype.c          // 不要奇怪,對,我們只要編譯這一個 .c

// 因爲它包括了其它所有的 .c 文件了,你可以自己查看它的內容   

# gcc -c -fPIC -O2 -I./  extend/*.c   extend 下所有的 .c 文件全部編譯

# gcc --shared -o libttf.so  *.o    生成最後的動態鏈接庫, OK

 

把編譯好的東東拷貝到系統路徑

 

mkdir –p /usr/local/ include/freetype1/freetype

 

cp *.h  extend/*.h   /usr/local/ include/freetype1/freetype

cp libttf.so  /usr/local /lib

 

安裝庫完成,哈!

 

 

3 )編譯 libminigui-1.3.3

# tar  zxf  libminigui-1.3.3.tar.gz

    # cd libminigui-1.3.3

# ./configure                              // 這是應該全是 yes    

# make

# make install

4 )編譯安裝 minigui-res-1.3.3               // 不會有問題的

# tar  zxf  minigui-res-1.3.3

    # cd minigui-res-1.3.3

# ./configure                               

# make

# make install

 

 

5 )最後,安裝 popt 庫,這個庫在編譯 mde 程序時需要使用,不然編譯沒法通過 http://gd.tuwien.ac.at/utils/rpm.org/dist/rpm-4.1.x/popt-1.7.tar.gz    

#  tar zxf popt-1.7.tar.gz

# cd popt-1.7

# ./configure --enable-shared --enable-static

# make

# make install

 

6 )激活 FramebeBuffer

 

  這裏很重要:

  # cd   /boot/grub

# vim menu.list

grub.conf 其實是 grub 引導程序 menu.lst 符號連接文件指向的引導菜單 , 再其中加

title MiniGUI FrameBuffer
root (hd0,0)
kernel /boot/vmlinuz-2.4.20-8 ro root="LABEL/" vga="0x0314" fb:on

意思是引導標題 MiniGUI FrameFuffer 模式 root 所在第一 IDE 硬盤的第一分區做爲引導分區 kernel 內核的路徑在 /boot 下名爲 vmlinuz-2.4.20-8 的文件, ro 是以只讀方式掛接 root="LABEL/vga"=0x0314 意爲使用 800*600 的分辯率,如要使用 640*480 分辯率自行改爲 vga=0x0311 使用 1024*768 分辯率請改爲 vga=0x0317 , 後面的 fb:on 是關鍵 , 它就是打開內核 FrameBuffer 顯示模式的關鍵參數 , 重新啓動後你就可以看到屏幕左上角可愛的小啓鵝了。

6 )修改 MiniGUI.cfg

MiniGUI 有兩種執行方式,一個是利用 qvfb 開啓模擬環境,他需要 X 圖形支持,由於我的 linux 沒有安裝這些庫,他們的以來關係有太複雜所以我沒有選,選擇了另一種更簡單的方式就是在 Console 下在 Framebuffer 上執行,這種方式也帶來很多麻煩,後面介紹。

 

修改 /usr/local/etc/MiniGUI.cfg 文件,如下

 

[system]

# GAL engine

gal_engine=fbcon

  // 這裏修改

 

# IAL engine

ial_engine=console

  // 這裏修改

 

mdev=/dev/mouse

mtype=none   // 這裏改成 none ,因爲經常鼠標不正常

 

[fbcon]

defaultmode=800x600-16bpp        // 與前面的 vga=0x0314 匹配

 

[qvfb]

defaultmode=640x480-16bpp    

display=0

 

重啓動你的 RedHat 9 ,在出現 Grub 的時候按 E 鍵,在 kernel = ..      這一行的最後加入   vga=0x314  ,然後 Enter ,然後在 kernel=   這一行上按 b  就可以了,這時候可以在啓動時看到一個小企鵝的圖標, OK

 

7 )修改默認庫路徑

修改你的 /etc/ld.so.conf 文件,在裏面最後新加入一行 /usr/local/lib

#  ldconfig

 

8 )編譯例程

還記得前面讓你下載的 mg-samples-1.3.0.tar.gz 這個包吧,這個就是一些例子,現在試試吧:

# tar zxf mg-samples-1.3.0.tar.gz

# ./configure

# make

# cd src

看看 src 目錄下是不是已經編譯出可執行文件來了

 

8 )運行程序

前面說採用 fbcon] 的方法不好,就在這裏體現了,我在這裏被卡了很久。一切 Minigui 的程序都不能在圖形界面下運行,否則會衝突早成花屏,好像沒有很多人提出這個解決方法,搞的的卡了很久,也許他們都用 qvfb 模式了吧。

解決方法就是進入純字符模式:

可以按 ctrl+Alt+F5( 用虛擬機的兄弟注意:先把虛擬機的 參數 - à 熱鍵 改成 ctrl+Alt+Shift 否則會衝突,不響應 )

在純字符下我們可以運行剛纔編譯好的程序:

# cd …./mg-sample*

# cd /src

# ./helloworld

可以看到我們的程序跑起來。

 

另外回到圖形界面可以使用指令:

# init 3   (進入字符界面是   #   init5

來回的切換非常慢,中間還要輸入用戶名和密碼,大家可以參考別人的博客,移植 qvfb 模式。更方便。

我用的是ubuntu,grub沒搞明白,就搞搞qvfb

 


Minigui在PC端編譯和qvfb編譯

步驟一:安裝libminigui-1.3.3
linux:/home/work/minigui # cd libminigui-1.3.3/
linux:/home/work/minigui/libminigui-1.3.3 # make menuconfig
將“Font options”中的“Var bitmap font”選項去掉,否則報報下面錯誤一
linux:/home/work/minigui/libminigui-1.3.3 # make
linux:/home/work/minigui/libminigui-1.3.3 # make install
默認配置下將安裝到/usr/local/目錄下,可以在make menuconfig中修改“Development environment options”中的“Path prefix”來指定安裝目錄。如果使用其他目錄,則需要注意相關的目錄必須添加進環境PATH變量中,否則在編譯MiniGUI應用程序時會出現找不到 包含文件等錯誤信息。
接着要運行ldconfig加載新生成的鏈接庫,否則將會出現類似找不到“libminigui-1.3.so.3”的錯誤消息。
出錯記錄:::
(1)
varbitmap.c:248: error: static declaration of 'var_bitmap_font_ops' follows non-static declaration

具體錯誤如下:
source='varbitmap.c' object='varbitmap.lo' libtool=yes /
        depfile='.deps/varbitmap.Plo' tmpdepfile='.deps/varbitmap.TPlo' /
        depmode=gcc3 /bin/sh ../../depcomp /
        /bin/sh ../../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -I../include    -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c -o varbitmap.lo `test -f 'varbitmap.c' || echo './'`varbitmap.c
rm -f .libs/varbitmap.lo
gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -I../include -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c varbitmap.c -MT varbitmap.lo -MD -MP -MF .deps/varbitmap.TPlo -fPIC -DPIC -o .libs/varbitmap.lo
varbitmap.c:248: error: static declaration of 'var_bitmap_font_ops' follows non-static declaration
varbitmap.h:38: error: previous declaration of 'var_bitmap_font_ops' was here
make[4]: *** [varbitmap.lo] 錯誤 1
make[4]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/src/font'
make[3]: *** [all-recursive] 錯誤 1
make[3]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/src/font'
make[2]: *** [all-recursive] 錯誤 1
make[2]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/src'
make[1]: *** [all-recursive] 錯誤 1
make[1]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3'
make: *** [all] 錯誤 2

出錯原因:
在src/font/varbitmap.h中定義了extern FONTOPS var_bitmap_font_ops,那裏var_bitmap_font_ops爲extern類型的,而在src/font /varbitmap.c中定義的是static類型,所以可能造成了編譯的出錯。

解決方法如下:(1)
修改src/font/varbitmap.c文件:
//static FONTOPS var_bitmap_font_ops = {   
extern FONTOPS var_bitmap_font_ops = {    // wmmwang 修改
(2)
重新運行make menuconfig,將“Font options”中的“Var bitmap font”選項去掉即可:
  │ │ Raw bitmap font         │ │
  │ │ [ ] Var bitmap font         │ │
  │ │ Incore font sansserif   │ │
  │ │ Incore font courier     │ │
  │ │ Incore font symbol      │ │
  │ │ Incore font vgas        │ │
  │ │ Qt Prerendered Font     │ │
  │ │ TrueType font           │ │
  │ │ Adobe Type1 font        │ │
(2)
source='grid.c' object='grid.lo' libtool=yes /
        depfile='.deps/grid.Plo' tmpdepfile='.deps/grid.TPlo' /
        depmode=gcc3 /bin/sh ../../depcomp /
        /bin/sh ../../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I./ -I../include -I../../include    -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c -o grid.lo `test -f 'grid.c' || echo './'`grid.c
rm -f .libs/grid.lo
gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I./ -I../include -I../../include -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c grid.c -MT grid.lo -MD -MP -MF .deps/grid.TPlo -fPIC -DPIC -o .libs/grid.lo
grid.c: In function 'AddCol':
grid.c:626: error: invalid lvalue in assignment
grid.c:627: error: invalid lvalue in assignment
grid.c:640: error: invalid lvalue in assignment
grid.c:641: error: invalid lvalue in assignment
grid.c:669: error: invalid lvalue in assignment
grid.c:670: error: invalid lvalue in assignment
grid.c:682: error: invalid lvalue in assignment
grid.c:683: error: invalid lvalue in assignment
grid.c: In function 'AddRow':
grid.c:735: error: invalid lvalue in assignment
grid.c:736: error: invalid lvalue in assignment
grid.c:747: error: invalid lvalue in assignment
grid.c:748: error: invalid lvalue in assignment
grid.c:776: error: invalid lvalue in assignment
grid.c:777: error: invalid lvalue in assignment
grid.c:790: error: invalid lvalue in assignment
grid.c:791: error: invalid lvalue in assignment
make[3]: *** [grid.lo] 錯誤 1
make[3]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/ext/control'
make[2]: *** [all-recursive] 錯誤 1
make[2]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/ext'
make[1]: *** [all-recursive] 錯誤 1
make[1]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3'
make: *** [all] 錯誤 2
出錯原因:
未知。可能是編譯器版本太高的緣故。
解決方法如下:
將上面出錯的grid.c文件中對應行數的強制轉換去掉。例如grid.c:626、627行修改如下:
      //(PGRIDCOLHDR)pCell1->pRowHdr = pRowHdr; // wmmwang 修改
      //(PGRIDCOLHDR)pCell1->pColHdr = pCol1;
      pCell1->pRowHdr = pRowHdr;
      pCell1->pColHdr = pCol1;
其他出錯行同上修改。
步驟二:安裝安裝MiniGUI的資源包:
linux:/home/work/minigui/libminigui-1.3.3 # cd ../
linux:/home/work/minigui # cd minigui-res-1.3.3/
linux:/home/work/minigui/minigui-res-1.3.3 # make install
這一步一般不會出錯
步驟三:安裝mg-samples-1.3.1
linux:/home/work/minigui/qvfb-1.0 # cd ../mg-samples-1.3.1/
linux:/home/work/minigui/mg-samples-1.3.1 # ./configure
linux:/home/work/minigui/mg-samples-1.3.1 # make
linux:/home/work/minigui/mg-samples-1.3.1 # make install
出錯記錄:
(3)
. /usr/local/lib/libminigui.so: undefined reference to `pthread_kill_other_threads_np'
原因:刪除 MiniGUI 源代碼中調用'pthread_kill_other_threads_np'這個函數
的語句。應該在 src/kernel/init.c 文檔中,也可以運行 grep 找一下這個函數。
步驟四:安裝綜合例子mde-1.3.0
linux:/home/work/minigui/qvfb-1.0  # cd ../mde-1.3.0/
linux:/home/work/minigui/mde-1.3.0 # ./configure
linux:/home/work/minigui/mde-1.3.0 # make
linux:/home/work/minigui/mde-1.3.0 # make install
步驟五:安裝qvfb:
linux:/home/work/minigui # cd minigui-res-1.3.3/
linux:/home/work/minigui/minigui-res-1.3.3 # cd ../qvfb-1.0/
linux:/home/work/minigui/qvfb-1.0 # ./configure --with-qt-includes=/usr/lib/qt-3.3/include --with-qt-libraries=/usr/lib/qt-3.3/lib --with-qt-dir=/usr/lib/qt-3.3
(略過輸出信息...)
linux:/home/work/minigui/qvfb-1.0 # make
(略過輸出信息...)
linux:/home/work/minigui/qvfb-1.0 # make install
(略過輸出信息...)
出錯記錄:
(4)在./configure時會報錯:
checking for libpng... -lpng -lz -lm
checking for libjpeg6b... no
checking for libjpeg... -ljpeg
checking for Qt... configure: error: Qt (>= Qt 3.0.3) (headers and libraries) not found. Please check your installation!
For more details about this problem, look at the end of config.log.
由於在fc7在默認是沒有完全安裝qt的,所以需要安裝一個軟件,這個可以通過你的虛擬機加載fedora7的鏡像文件,然後在fedora7的 cdrom中直接打開得到,即光盤下的feodra文件夾下的qt-devel-3.3.8-4.fc7.i386.rpm,點擊安裝
步驟六:minigui演示:
(1)進入/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
(2)進入/etc/ld.so.conf.d建一個minigui.conf,文件的內容爲/usr/local/lib
最後要把系統共享庫緩存刷新,將libminigui加載上,可以使用命令
[root@fedora7]#ldconfig
否則在運行應用程序時會報如下錯:
./bomb
./bomb: error while loading shared libraries: libminigui-1.3.so.3: cannot open shared object file: No such file or directory
(3)然後就可以使用qvfb體驗miniGUI了,進入qvfb1.0根目錄下的qvfb文件夾,輸入下面命令:
[root@fedora7]# qvfb &
加上&符號使qvfb進程開啓後shell立即返回,否則會阻塞shell進程,需要再開一個shell纔可以運行minigui程序。qvfb 運行起來後在qvfb中設置虛擬顯示器分辨率:File-->Configure,注意Size和Depth要設置的同MiniGUI.cfg中的 分辨率和色深一致。
(4)qvfb設置搞定後就可以運行mg-smaples-1.6.2/src中的例子了,運行一個helloworld試試效果
[root@localhost minigui-pc]# cd mde-1.3.0
[root@localhost mde-1.3.0]# cd bomb
[root@localhost bomb]# ./bomb
這時在qvfb界面上就OK了。也該睡覺了,晚安阿!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章