主要文檔都是fp完成的,我只是在他的基礎上修改了一些文章中的小錯誤。
第一部分:minigui-1.3.3移植到SEP4020EVB詳解
在這裏只講怎樣將minigui-1.3.3移植到開發板EVB-SEP4020上去,在pc上安裝minigui-1.3.3不用講,這裏我用到的交叉編譯器是arm-linux-gcc3.4.1
MiniGUI 的編譯需要一些庫文件,缺省我們的 gcc 基本上都有這些庫文件,所以不需要安裝,可是現在要交叉編譯了,交叉編譯器可是不帶這些庫文件的,所以我們得首先自己編譯這些庫文件裝到交叉編譯器中去。
注意一點:庫不一定要裝最新的,庫版本太新,MiniGUI 有可能不認識,像jpeg 庫和 ttf 庫就是這樣,太新了反而用不了,所以要注意版本,以下的庫都是我驗證過可以和MiniGUI一起工作的,其它版本的庫沒試過,不保證能正確通過:)
(1)首先安裝 zlib 庫,這個是後面的庫的編譯基礎。
http://www.zlib.net/zlib-1.2.3.tar.gz 400多K,下載到目錄 /root/cross 下
[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 ,修改完成後回到 /root/cross/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
若用gcc3.4.1是不會出現什麼錯誤的,呵呵。
安裝完後檢查一下目錄 /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 再改回去,不然後面會出錯的!!!!!(一定記得改)
【root】# cd /usr/bin
【root】# mv gcc_back gcc
【root】# mv ld_back ld
(2)安裝 png 庫,這個是用來顯示 png 圖形的,MiniGUI 裏很多圖都是 png 的,如果沒有這個庫,你的 MiniGUI 將無法正常工作,切記切記!
http://prdownloads.sourceforge.net/libpng/libpng-1.2.18.tar.bz2?download(png 庫)
還是那句話,庫不要用最新的,最新的容易有問題,用這個老一點的就沒問題了,呵
[root]# tar zxf libpng-1.2.18 .tar.gz
[root]# cd libpng-1.2.18
[root]# ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux prefix=/usr/local/arm/3.4.1/arm-linux
注意這邊的配置:①使用交叉編譯器②安裝目錄③—host 指定軟將運行平臺,不然終端
也會提示說叫你使用—host 參數的。
# make
# make install
安裝完了,查看下/usr/local/arm/3.4.1/arm-linux/目錄下的 lib 文件夾裏是否有 libpng.a,
libpng.so 等文件和 include 文件夾裏是否有 png.h,pngconf.h 文件以及 libpng12 文件夾。
(3)第三步:安裝 jpeg 庫
在http://download.enet.com.cn/html/242232006010901.html(jpeg 庫)下載到/root/cross/下面
# cd /root/cross/jpeg-6b
# ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux prefix=/usr/local/arm/3.4.1/arm-linux --enable-shared
在 make 之前注意:從前面 libpng-1.2.18 的源碼目錄中把 libtool 拷貝過來,放在
/home/source/minigui/jpeg-6b目錄下,否則會出現“make: ./libtool: command not found”錯誤。
另外要注意的是:不能使用系統的 libtool,因爲這裏要進行的是交叉編譯。
# make
下面創建一個目錄,否則 make install 的時候會報錯。
# mkdir -p /usr/local/arm/3.4.1/arm-linux/man/man1
# make install
安裝完了,查看下/usr/local/arm/3.4.1/arm-linux/目錄下的 lib 文件夾裏是否有 libjpeg.so,
libjpeg.so.62.0.0 等文件和include 文件夾裏是否有 jpeglib.h 文件。
(4)第四步:安裝 libttf 庫,這個是 TrueType 字體的支持庫,用來顯示文字的。
http://nchc.dl.sourceforge.net/sourceforge/freetype/freetype-1.3.1.tar.gz 下載到/root/cross/下面
注意:MiniGUI 的文檔說只支持 1.3.1 版本的 ttf 庫,不要把版本弄錯了
這個庫裝起來最麻煩,全部自己手動編譯,安裝,下面一步一步來做吧
[user]# tar zxf freetype-1.3.1.tar.gz //老一套
[user]# cd freetype-1.3.1 //進到目錄裏去
[user]# mkdir –p /root/cross/libttf/extend // 自己另外建立一個目錄
[user]# cp ./lib/* ./lib/arch/ansi/* /root/cross/libttf/ //把有用的東西拷出來
[user]#cp ./lib/extend/* /root/cross/libttf/extend/ //把 extend 目錄下的文件也拷出來
注意 cp 命令不要用 –r 選項,因爲會把一些沒用的東西出拷出來的
拷貝完成了,現在來自己手動編譯了
[user]# cd libttf(就是上面新建的一個目錄)
[user]# arm-linux-gcc -c -fPIC -O2 freetype.c //不要奇怪,對,我們只要編譯這一個 .c 文件,因爲它包括了其它所有的 .c 文件了,你可以自己查看它的內容
[user]# arm-linux-gcc -c -fPIC -O2 -I./ extend/*.c 把 extend 下所有的 .c 文件全部編譯
[user]# arm-linux-gcc --shared -o libttf.so *.o 生成最後的動態鏈接庫,OK了
此時應該在libttf下會出現一個libttf.so庫文件
現在手動安裝,得自己建立一下目錄
[Root] mkdir -p /usr/local/arm/3.4.1/arm-linux/include/freetype1/freetype
[Root] cp *.h extend/*.h /usr/local/arm/3.4.1/arm-linux/include/freetype1/freetype
[Root] cp libttf.so /usr/local/arm/3.4.1/arm-linux/lib
安裝庫完成,哈!
(5)第五步:編譯安裝 miniGUI 資源包 minigui-res-1.3.3
http://www.minigui.com/download/minigui-res-1.3.3.tar.gz (miniGUI資源包)下載到/root/cross/目錄下
# cd /root/cross/minigui-res-1.3.3
# make install
默認安裝到/usr/local/lib/minigui/res目錄。 切記後面一定要將此處的資源包拷過去
(6)第六步:配置編譯安裝 miniGUI
http://www.minigui.com/download/libminigui-1.3.3.tar.gz (miniGUI庫) 下載到/root/cross/目錄下
MiniGUI 1.3.3 版本在鏈接 ljpeg lpng 時老是要鏈接 /usr/lib 下的庫,沒辦法,只好用
前面的方法,使用備份和軟連接的方法。
# cd /usr/lib
# mv libjpeg.so libjpeg.so_back
#mv libpng.so libpng.so_back
# mv libttf.so libttf.so_back
# ln -s /usr/local/arm/3.4.1/arm-linux/lib/libttf.so ./libttf.so
# ln -s /usr/local/arm/3.4.1/arm-linux-gcc/lib/libpng.so libpng.so
# ln -s /usr/local/arm/3.4.1/arm-linux-gcc/lib/libjpeg.so libjpeg.so
下面進行配置安裝:
# cd /root/cross/libminigui-1.3.3
由於我使用的是ubuntu8.04,所以在這不能使用圖形化配置界面make menuconfig,因爲這樣在退出保存時會提示你無法保存,
在此不得不說用ubuntu開發搓!!!若用fedora8就沒這些問題了
沒辦法只好用字符界面一個個的配置了
#./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux --disable-galqvfb --disable-galecoslcd --disable-vbfsupport --disable-ttfsupport --disable-type1support prefix=/usr/local/arm/3.4.1/arm-linux
若是在fedora下開發可用make menuconfig,具體配置如下:
在 GAL engine Options 裏
(NEWGAL) GAL and its engines
[*] NEWGAL engine on Linux FrameBuffer console
[ ] NEWGAL engine on Qt Virtual FrameBuffer
[ ] NEWGAL engine on eCos LCD interface
[*] Dummy NEWGAL engine
[*] Have console on Linux FrameBuffer
在 Font Option 裏
[*] Raw bitmap font
[ ] Var bitmap font // 這個選項去掉,否則,編譯時老出錯
[*] Incore font sansserif
[*] Incore font courier
[*] Incore font symbol
[*] Incore font vgas
[*] Qt Prerendered Font
[ ] TrueType font // 如果需要對這個字體支持,需要下載編譯安裝 freetype 庫
[ ] Adobe Type1 font // 如果需要對這個字體支持,需要下載編譯安裝 freetype 庫
NOTE:上面兩個需要編譯安裝的字體庫,在 miniGUI官網上有的下。
在 Image Options 裏
[*] Includes SaveBitmap-related functions
[ ] PCX file support
[ ] LBM/PBM file support
[ ] TGA file support
[*] GIF file support
[*] JPG file support // 前面我們已經編譯安裝了 JPG庫,所以這裏我們可以選擇此項
[*] PNG file support // 前面我們已經編譯安裝了 PNG庫, 所以這裏我們可以選擇此項
在 Development Environment Option 裏
(Linux) Platform
(arm-linux-gcc) Compiler
(glibc) Libc
--- Installation options
Path prefix: "/usr/local/arm/3.3.2/arm-linux" // 這裏, 我們把庫裝到交叉編譯器的目錄下
--- Additonal Compiler Flags
CFLAGS: ""
LDFLAGS: ""
其他的選項暫時不做改變,使用默認的配置即可
(7)安裝 popt 庫,這個庫在編譯 mde 程序時需要使用,不然編譯沒法通過
http://gd.tuwien.ac.at/utils/rpm.org/dist/rpm-4.1.x/popt-1.7.tar.gz 我是從這裏下載的,下載到/root/cross
[user]# tar zxf popt-1.7.tar.gz
[user]# cd popt-1.7
[user]# ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux prefix=/usr/local/arm/3.4.1/arm-linux --enable-shared --enable-shared --enable-static
在此用ubuntu又編不過去,又報gettext的版本太低,叫我們去下載新的gettext,簡直無法容忍了! !!
換到fedora8下一切順利,再將其lib文件夾下的libpopt.a,libpopt.la,libpopt.so.0.0.0和include文件夾下的popt.h考回到ubuntu下的/usr/local/arm/3.4.1/arm-linux/相應目錄下
[user]# make
[Root]# make install
(8)編譯綜合例子 mde-1.3.0
http://www.minigui.com/downloads/minigui13/mde-1.3.0.tar.gz(綜合例子程序)下載到下載到/root/cross
# cd /root/cross/mde-1.3.0
# ./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux
# make
一切很順利,搞定了。編到這步已經很不容易了
交叉編譯環境設置好了!
# make // 需要一點時間,耐心等待
# make install
安裝完了,查看下/usr/local/arm/3.4.1/arm-linux/目錄下的 lib 文件夾裏是否有
libminigui.so, libmgext.so, libvcongui.so 等文件和 include 文件夾裏是否有 minigui 文件夾 (內
有 minigui 相關的頭文件)。
好了,現在不要忘記把前面剛剛備份的改回來:
# cd /usr/lib
# mv libjpeg.so_back libjpeg.so
#mv libpng.so_back libpng.so
#mv libttf.so_back libttf.so
接着把上面編譯的資源包/usr/local/lib/minigui/下的res目錄拷到/usr/local/arm/3.4.1/arm-linux/lib/minigui/下!!!!!!!!!!!!
(9)移植minigui到嵌入式文件系統中
前面是交叉編譯的過程,現在把上面編的各種庫都移到開發板的文件系統上去
我在 /home/fp/nfs下建立我的嵌入式系統的根目錄,在這裏我採用的網絡文件系統改起來比較方便,現在我需要把 minigui 的庫文件放到裏面去,
●庫文件
把 /usr/local/arm/3.4.1/arm-linux/lib 中相應的庫拷到 /home/fp/nfs/lib 目錄下去
下面是我拷的庫文件:
libjpeg.a libmgext-1.3.so.3 libminigui.a libpng.so.2 libttf.a libz.so
libjpeg.la libmgext-1.3.so.3.0.0 libminigui.la libpng.so.2.1.0.10rc1 libttf.so libz.so.1
libjpeg.so libmgext.a libminigui.so libpopt.a libvcongui-1.3.so.3 libz.so.1.2.3
libjpeg.so.62 libmgext.la libm.so libpopt.la libvcongui-1.3.so.3.0.0 minigui
libjpeg.so.62.0.0 libmgext.so libm.so.6 libpopt.so libvcongui.a shared
libm-2.2.3.so libminigui-1.3.so.3 libpng.a libpopt.so.0 libvcongui.la
libm.a libminigui-1.3.so.3.0.0 libpng.so libpopt.so.0.0.0 libvcongui.so
其中一些 .a 的靜態庫是不需要拷過去的,另外要運行c程序還需要拷一些libc標準庫進去,我圖方便,直接將整個/usr/local/arm/3.4.1/arm-linux/lib考到/home/fp/nfs下面,呵,懶人的做法
OK,庫文件準備完畢
●資源文件
下面把資源文件也拷過來,還記得嗎,在前面 搭建 PC 環境中講過安裝資源文件,它被裝在了 /usr/local/lib 目錄下,一個叫 minigui 的目錄,我們要做的就是把它拷過來
[Root]# cp –r –a /usr/local/lib/minigui /home/fp/nfs/lib/minigui 連目錄一起拷過來,目錄結構和主機一樣
●配置文件
把配置文件也拷過來
[Root]# cp /usr/local/arm/3.4.1/arm-linux/etc/MiniGUI.cfg /home/fp/nfs/usr/local/etc/ 記住,保持目錄結構的一致
修改 MiniGUI.cfg ,如下
[system]
# IAL engine
ial_engine=dummy // 這裏修改,我用的是觸摸屏,所以就用dummy肯定不會錯
mdev=/dev/tp //解摸屏
mtype=none
[fbcon]
defaultmode=240x320-16bpp // 根據你的LCD大小自己設置,設置錯誤minigui 就啓動不了
還有一點就是要將文件中的所有/usr/local/替換爲/
ial_engine 一開始建議用 dummy ,先讓 minigui 跑起來,以後再把 觸摸屏 加進去,保證儘可能減少錯誤的發生
再將/root/cross/mde-1.3.0/下的文件夾都拷貝(每一個文件夾都是一個綜合實例)到 /home/fp/nfs/demo/下面
保存,退出。 OK ,你的板子上的系統也搭建完畢了,現在來讓真正的圖形界面跑起來!