轉載於:http://www.360doc.com/content/14/0331/11/1317564_365146842.shtml
說明:
因為要用MINIGUI做PDA,得把MINIGUI移植到我的開發板MINIGUI上,移植成功,支持PNG,JPG,鼠標和觸摸屏可以用,但觸摸屏不准,需要較正,較正本打算用tslib.1.3,移植成功后,MINIGUI要使用它做為IAL,還需對libminigui1.6.10/res/ial/2410.c進行修改並用SMDK2410做為它的IAL,但經查1.6.10里己經沒有發布2410.c,1.3.33里是有的。
硬件環境:
硬件環境:
Host:X86PC
Target:友善之臂mini2440開發板
軟件環境:
Host:VMware虛擬機下的redhat Linux 9.0(完全安裝)
Target:arm-linux kernel:linux-2.6.13
Crosstool: arm-linux-gcc-3.4.1
2. 准備以下源碼包(下載)
http://www.minigui.org/downloads
開發庫:libminigui-1.6.10.tar.gz
資源文件:minigui-res-1.6.10.tar.gz
示例程序:mg-samples-str-1.6.10.tar.gz
3. 編譯安裝
(1) 准備工作
在redhat linux 9.0下新建工作目錄
[root@localhost /]# mkdir /minigui 工作目錄
[root@localhost /]# mkdir /minigui/compressed /minigui/source
[root@localhost /]# cd /minigui/compressed 進入工作目錄
說明:把第2步下載的源碼包放到該目錄中,即/minigui/compressed
(2)編譯安裝minigui-res-1.6.10.tar.gz
說明:minigui 所使用的資源,包括基本字體、圖標、位圖和鼠標光標。
[root@localhost compressed]# tar xzvf minigui-res-1.6.10.tar.gz –C ../source
[root@localhost compressed]# cd ../source/minigui-res-1.6.10
[root@localhost minigui-res-1.6.10]# make install
把生成的……/minigui/res目錄下的所有文件拷貝到開發板上,其開發板上的目錄如下形式/usr/local/lib/minigui/res/……,實際上這個目錄與配置文件MiniGUI.cfg里的相應內容的目錄一致,以便找到相應的資源。
(3)支持jpeg和png
首先安裝 zlib 庫,這個是后面的庫的編譯基礎。
http://www.zlib.net/zlib-1.2.3.tar.gz 400多K,去下載吧,下載到目錄 /opt/mini2440 下
[user]# tar zxf zlib-1.2.3.tar.gz
由於 zlib 庫的configure 腳本不支持交叉編譯選項,只好自己動用了,手動臨時把 gcc 修改成指向我們的交叉編譯器 arm-linux-gcc
[Root]# cd /usr/bin
[Root]# mv gcc gcc_back
[Root]# ln -s /usr/local/arm/3.4.1/bin/arm-linux-gcc ./gcc
[Root]# mv ld ld_back
[Root]# ln -s /usr/local/arm/3.4.1/bin/arm-linux-ld ./ld
OK ,修改完成后回到 /opt/mini2410/zlib-1.2.3 目錄下
[user]# ./configure --prefix=/usr/local/arm/3.4.1/arm-linux/ --shared
注意:這里配置指向 /usr/local/arm/3.4.1/arm-linux/ 目錄,會自動安裝在 /usr/local/arm/3.4.1/arm-linux/ [include,lib] 目錄下,千萬不要裝錯目錄了,不然后面會找不到這個庫的
[user]# make
[Root]# make install
安裝完后檢查一下目錄 /usr/local/arm/3.4.1/arm-linux/ [include,lib] ,假如 include 中沒有 zlib.h 之類的頭文件,lib 中沒有 libz.so.1.2.3 ,那就自己手動拷到這些目錄下去,記着拷的時候把所有的 *.h 都需要拷過去,在拷庫的時候用 cp –a libz.* /…./lib 就行,要用上 –a 選項
記着把剛才改過的 gcc 再改回去,不然后面會出錯的!!!!!
安裝 png 庫,這個是用來顯示 png 圖形的,MiniGUI 里很多圖都是 png 的,如果沒有這個庫,你的 MiniGUI 將無法正常工作,切記切記!
http://superb-east.dl.sourceforge.net/sourceforge/libpng/libpng-1.0.10rc1.tar.gz
還是那句話,庫不要用最新的,最新的容易有問題,用這個老一點的就沒問題了,呵
[user]# tar zxf libpng-1.0.10rc1.tar.gz
[user]# cd libpng-1.0.10rc1
Libpng 不提供有效的 configure 腳本,所以只好自己動手改 Makefile 文件了
[user]# cp scripts/makefile.linux Makefile //把 Scripts 下的一個 makefile 拷出來自己動手改
[user]# vi Makefile // 自己動手改
CC=arm-linux-gcc //修改這里
# where "make install" puts libpng.a, libpng.so*, png.h and pngconf.h
prefix=/usr/local/arm/3.4.1/arm-linux //修改這里
# Where the zlib library and include files are located
#ZLIBLIB=/usr/local/lib
#ZLIBINC=/usr/local/include
ZLIBLIB=/usr/local/arm/3.4.1/arm-linux/lib //修改這里
ZLIBINC=/usr/local/arm/3.4.1/arm-linux/include //修改這里
好了,保存,然后去編譯吧
[user]# make
[user]# make install
如果有錯誤,檢查你前面的步驟哪個沒做對 :) 尤其是 zlib 的安裝
還是前面說的,檢查 /usr/local/arm/3.4.1/arm-linux/ [include,lib] 目錄中有成功安裝否,如果沒有安裝成功,那就自己把編譯出來的東西拷過去。記着,*.h 和 .so 的文件都要拷。
OK,現在來安裝 jpeg 庫
http://www.minigui.org/downloads 自己去下載
[user]# tar zxf jpegsrc.v6b.tar.gz
[user]# cd jpeg-6b
[user]# ./configure –help //可以查看它的配置選項
首先在本機上編譯一下,主要是它的 configure 文件設計得有問題,得先用 gcc 編譯一個 dummy.c 的文件,然后才能后面編譯,不然的話就會出現 libtool 找不到之類的錯誤
[user]# ./configure --enable-shared --enable-static
本機正常編譯通過以后,[user]# make clean 清除掉,然后執行交叉編譯
一般情況下用 [cdp@cdpserver jpeg-6b]$ ./configure --prefix=/usr/local/arm/3.4.1/arm-linux/ --host=arm-linux --enable-shared --enable-static
--host=arm-linux 來指定交叉編譯選項,可是這里死活它不認,所以改用別的方法,如下
[user]# ./configure --prefix=/usr/local/arm/3.4.1/arm-linux/ CC=arm-linux-gcc --enable-shared --enable-static
[user]# make
安裝前需要在 arm-linux 下建個目錄,不然安裝會出錯
[Root]# mkdir –p /usr/local/arm/3.4.1/arm-linux/man/man1
[Root]# make install // OK 了
一樣,自己去檢查一下安裝是否成功 :)
接下來就可以編譯libminigui了
(4)編譯安裝libminigui-1.6.10.tar.gz
說明:minigui函數庫源代碼。
[root@localhost minigui-res-1.6.10]# cd /minigui/compressed
[root@localhost compressed]# tar xzvf libminigui-1.6.10.tar.gz –C ../source
[root@localhost compressed]# cd ../source/libminigui-1.6.10
[root@localhost libminigui-1.6.10]# ./configure --prefix=/home/ --host=arm-linux --target=arm-linux --build=i386-linux CC=arm-linux-gcc --with-osname=linux --with-style=classic --with-targetname=fbcon --enable-autoial --enable-commial --enable-rbf16 --disable-vbfsupport
[root@localhost libminigui-1.6.10]# make
[root@localhost libminigui-1.6.10]# make install
把/home/lib目錄下的所有庫文件(注:--prefix=/home/)拷貝到開發板上的/lib目錄下,把/home/etc下的MiniGUI.cfg拷貝到開發板上的/etc目錄下。
注:--disable-vbfsupport ,一定要注意這個選項,否則在開發板上運行示例程序時,提示找不到var bitmap font,實際上在開發板上的/usr/local/lib/minigui/res/font目錄下沒有var bitmap font字體庫,至於如何支持它,沒有深究。其他選項可通過./configure –h幫助查看,根據自己的開發板及項目需要控制相應的功能。
(4)編譯 mg-samples-str-1.6.10.tar.gz
同上原理:
解壓
[………]# ./configure –host=arm-linux
[………]# make
把生成的可執行文件helloworld拷貝到開發板上的/usr/local/sbin目錄下
(6) 配置
第一處:在開發板的/etc目錄下建立ld.so.conf文件,並添加如下內容:
/usr/local/lib
/usr/lib
/lib #實際上添加這個庫文件目錄就行了,目的是運行helloworld的時候,能找到相應的庫文件,其他兩個庫目錄可選,我加上了它,是為了系統擴展。
第二處:修改開發板上的/etc/MiniGUI.cfg文件
用編輯器打開,更改如下內容:
[system]
# GAL engine and default options
gal_engine=fbcon
#IAL engine
ial_engine=cosole
mdev=/dev/input/mice
mtype=IMSP2
[fbcon]
Defaultmode=240x320-16bpp #我的LCD顯示器是240x320像素的豎屏
與上述內容不一致的,請結合自己的開發板進行比較后,修改。
第三處:
在/etc/init.d/rcS腳本文件里添加如下內容:
/bin/ln –s /dev/vc/0 /dev/tty0
如不加,則出現如下問題:NEWGAL>FBCON: Can''''''''''''''''t open /dev/tty0: No such file or directory
NEWGAL: Set video mode failure.
InitGUI: Can not initialize graphics engine!
注:就是使FBCON與你的FramBuffer設備關聯
4. 測試
在超級終端運行交叉編譯自己修改制作的PDA,命令如下:
[………]# /usr/local/sbin/pda
或
在/etc/init.d/rcS腳本文件里添加如下內容:
/usr/local/sbin/pda &
呵呵,minigui跑起來了,自己感覺還是比較爽的。移植就算成功了,但沒有使用價值,需繼續添加minigui的一些功能,並需要編寫相應應用程序和linux內核相應的驅動。雖然開源,但提供的功能有限,不過,當作學習還是可以的。