Linux下Minigui開發環境的搭建(PC+S3C2440
花了兩天時間終於把Minigui的開發環境搭建好了,遇到了很多問題,看了很多人的部落格,對我的啟發很大。關鍵是以前偷懶裝redhat的時候為了省空間,很多庫檔案都沒安裝搞的自己很狼狽,不過也由於這個原因,讓我真正細細的實踐了一遍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的軟體:
Minigui的庫檔案
minigui 所使用的資源,包括基本字型、圖示、點陣圖和滑鼠游標
這兩個包的下載需要你在www.minigui.com 上註冊過才可以下載,免費註冊的,自己去下吧
一些小例子
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
# 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模式。更方便。