minigui+tslib編譯全過程(1)

 主要文檔都是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.hpngconf.h 文件以及 libpng12 文件夾。


3)第三步:安裝 jpeg
http://download.enet.com.cn/html/242232006010901.htmljpeg 庫)下載到/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.alibpopt.lalibpopt.so.0.0.0include文件夾下的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 ,你的板子上的系統也搭建完畢了,現在來讓真正的圖形界面跑起來!


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