天天看點

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 --build=i686-pc-linux --target=arm-linux --host=arm-linux 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 --shared

注意這邊的配置:①使用交叉編譯器②安裝目錄③—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

配置之後,進行編譯安裝:

# 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/下!!!!!!!!!!!!

(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

一切很順利,搞定了。編到這步已經很不容易了

交叉編譯環境設定好了!

(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]

# GAL engine

gal_engine=fbcon //這裡修改

# IAL engine

ial_engine=dummy // 這裡修改,我用的是觸摸屏,是以就用dummy肯定不會錯

mdev=/dev/tp       //解摸屏

mtype=none

[fbcon]

defaultmode=240x320-16bpp // 根據你的LCD大小自己設定,設定錯誤minigui 就啟動不了

ial_engine 一開始建議用 dummy ,先讓 minigui 跑起來,以後再把 觸摸屏 加進去,保證盡可能減少錯誤的發生

再将/root/cross/mde-1.3.0/下的檔案夾都拷貝(每一個檔案夾都是一個綜合執行個體)到 /home/fp/nfs/demo/下面

儲存,退出。 OK ,你的闆子上的系統也搭建完畢了,現在來讓真正的圖形界面跑起來!

但這時觸摸屏應該還沒作用,下面就是改觸摸屏的輸入引擎部分了

(10)改寫觸摸屏的引擎

觸摸屏的輸入引擎檔案在/root/cross/libminigui-1.3.3/src/ial/下面,自己可以寫一個引擎檔案然後将 MiniGUI.cfg 中的

# IAL engine改為自己的引擎就行,在這我偷懶,直接改系統的dummy.c檔案改動的地方不多

就wait_event函數和InitDummyInput函數兩個部分,改完後儲存,然後重新編譯libminigui-1.3.3,步驟見上面的第五步

編譯完,再将改動後的庫檔案再移到/home/fp/nfs/lib下,其他部分不用動,重新上電,進入檔案系統後

在dev下創立裝置節點:

【dev】#mknod tp c 250 0

【root】#cd /demo/same

【root】#./same

在此就能看到我們熟悉的連連看的畫面了,而且用手也能去點哦!!

繼續閱讀