編譯平臺:x86、VMware上Ubuntu-10.04
目標平臺:SOC3210
交叉編譯工具鏈:gcc-3.4.6(mipsel)
一、獲取源碼包
1、zlib-1.2.5.tar.bz2
http://sourceforge.net/projects/libpng/files/zlib/1.2.5/zlib-1.2.5.tar.bz2/download
2、freetype‐2.3.5.tar.bz2
http://download.savannah.gnu.org/releases/freetype/
3、libpng-1.2.40.tar.bz2
http://sourceforge.net/projects/libpng/files/libpng12/older-releases/1.2.4 0/libpng-1.2.40.tar.bz2/download
4、jpegsrc.v6b.tar.gz
http://dir.filewatcher.com/d/GNU/Other/jpegsrc.v6b.tar.gz.613261.html
5、DirectFB-1.3.0.tar.gz
http://directfb.org/index.php?path=Main%2FDownloads&page=0
6、DirectFB-examples-1.2.0.tar.gz
http://directfb.org/index.php?path=Main%2FDownloads&page=1
二、交叉編譯與安裝步驟
1、搭建交叉編譯工具鏈
$tar zxvf gcc-3.4.6.tgz -C /opt ——需要解壓到/opt目錄下
$export PATH=/opt/gcc-3.4.6/bin:$PATH ——設置工具鏈的環(huán)境變量
另外:如果需要在另外的終端和重啟機子后都包含這環(huán)境變量的話,可以把/opt/gcc-3.4.6/bin: 添加到/etc/environment文件下,然后打開新終端或重啟虛擬機。
2、設置編譯安裝所需環(huán)境變量
$mkdir /usr/directfb ——創(chuàng)建安裝目錄
$export PREFIX=/usr/directfb ——設置安裝路徑
$export LDFLAGS=-L$PREFIX/lib ——設置庫文件路徑
$export CFLAGS="-g -I$PREFIX/include" ——設置頭文件路徑
$export CPPFLAGS="-g -I$PREFIX/include" ——設置頭文件路徑
$export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig ——設置配置信息文件路徑
3、編譯安裝zlib-1.2.5
$tar jxvf zlib-1.2.5.tar.bz2
$cd zlib-1.2.5
$./configure --prefix=$PREFIX --shared
——不能加“--host=mipsel-linux”,否則出錯。
$vi Makefile
——把Makfile里的gcc,ar,ranlib全都替換成mipsel-linux-gcc,mipsel-linux-ar, mipsel-linux-ranlib。
$make
$make install
4、編譯安裝freetype‐2.3.5
$tar jxvf freetype‐2.3.5.tar.bz2
$cd freetype‐2.3.5
$./configure --host=mipsel-linux --prefix=$PREFIX
$make
$make install
5、編譯安裝libpng-1.2.40
$tar jxvf libpng-1.2.40.tar.bz2
$cd libpng-1.2.40
$./configure --host=mipsel-linux --prefix=$PREFIX --with-gnu-ld
$make
$make install
6、編譯安裝jpegsrc.v6b
$tar zxvf jpegsrc.v6b.tar.gz
$cd jpeg-6b
$./configure --host=mipsel-linux --prefix=$PREFIX --enable-shared
$vi Makefile
——把Makefile里的gcc替換成mipsel-linux-gcc
$make
$make install
可能有出錯提示:
無法創(chuàng)建普通文件"/usr/directfb/man/man1/cjpeg.1"
參考解決:
$mkdir /usr/directfb/man /usr/directfb/man/man1
$make install
7、編譯安裝DirectFB-1.3.0
$tar zxvf DirectFB-1.3.0.tar.gz
$cd DirectFB-1.3.0
$./configure --prefix=$PREFIX --host=mipsel-linux --enable-sdl=no --enable-x11=no --enable-jpeg --enable-freetype --enable-png --with-gfxdrivers=none
參考:如果需要關閉jpeg的支持,可以加上--enable-jpeg=no。
$make
注意:可能會有出錯提示
/opt/gcc-3.4.6/bin/../lib/gcc/mipsel-linux/3.4.6/../../../../mipsel-linux/b in/ld: warning: libz.so.1, needed by /usr/directfb/lib/libpng12.so, not found (try using -rpath or -rpath-link)
/usr/directfb/lib/libpng12.so: undefined reference to `deflate'
……
/usr/directfb/lib/libpng12.so: undefined reference to `deflateEnd'
collect2: ld returned 1 exit status
make[2]: *** [directfb-csource] 錯誤 1
make[2]:正在離開目錄 `/……/DirectFB-1.3.0/tools'
參考解決辦法:
$cp /usr/directfb/lib/lib* /opt/gcc-3.4.6/mipsel-linux/lib/
——主要是用第五步的libpng-1.2.40所編譯出來的庫文件
來更新交叉編譯工具鏈的動態(tài)庫文件libpng12.so
$make
$make install
8、編譯安裝DirectFB樣例DirectFB-examples-1.2.0
$tar zxvf DirectFB-examples-1.2.0.tar.gz
$cd DirectFB-examples-1.2.0
$./configure --host=mipsel-linux --prefix=$PREFIX
$make
$make install
DirectFB與樣例交叉編譯完成。
三、移植、運行測試
1、制作文件系統(tǒng)
制作一個新的文件系統(tǒng)有利于移植到開發(fā)板上。
$cd ramdisk ——進入根文件系統(tǒng)ramdisk中。ramdisk的制作參考SOC3210文檔
$cp /usr/directfb usr ——必須把交叉編譯后的directfb放于此目錄,因為DirectFB編譯時 已經(jīng)把這個目錄編譯到程序中,無法后期設置。
$vi etc/profile
把export LD_LIBRARY_PATH=/lib:/usr/lib改為:
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/directfb/lib
——設置directfb程序所需庫文件路徑
否則在SOC3210運行時會報錯,如“error while loading shared libraries: libdirectfb-1.3.so.0”
保存退出。
$mknod dev/fb0 c 29 0
——創(chuàng)建frame buffer的設備文件
否則在SOC3210運行時會報錯:
(!) DirectFB/FBDev: Error opening '/dev/fb0'!
--> No such file or directory
(!) DirectFB/Core: Could not initialize 'system_core' core!
--> File not found!
$cd dev
$ln -s console tty0
——鏈接終端
否則在SOC3210運行時會報錯:
(!) DirectFB/core/vt: Couldn't open neither `/dev/tty0' nor `/dev/vc/0'!
--> No such file or directory
(!) DirectFB/Core: Could not initialize 'system_core' core!
--> Initialization error!
$cd .. ——退到上一層
$vi usr/directfb/etc/directfbrc
directfbrc是directfb程序運行時的配置文件。其具體參數(shù)可以參考:
http://www.directfb.org/docs/directfbrc.5.html
或http://blog.chinaunix.net/u3/104335/showart_2061486.html
或者在終端上查看$man directfbrc
改為:
system = fbdev ——設定使用的圖形系統(tǒng)為linux frame buffer
fbdev = /dev/fb0 ——打開設定的frame buffer (/dev/fb0)
wm = default ——設定窗口管理層,默認default(0)
mode = 320x240 ——設定默認的屏幕顯示320x240
depth = 16 ——使用二進制位數(shù)設置每像素默認的像素深度為16位
pixelformat = RGB16 ——設置默認的像素格式
mouse-protocol = IMPS/2 ——為一個串口鼠標指定使用的協(xié)議
bg-color = 00FFFF ——控制背景的顏色
no-vt ——取消虛擬終端
保存退出。
$cd .. ——退到上一層
$mkfs.cramfs ramdisk ramdisk-cramfs.img
文件系統(tǒng)制作完成,得到文件系統(tǒng)的鏡像文件ramdisk-cramfs.img。
2、燒寫文件系統(tǒng)到SOC3210
SOC3210上電。
在SecureCRT終端中
PMON> set append 'g root=/dev/mtdblock1 rootfstype=cramfs noinitrd init=/linuxrc console=ttyS0,115200 display=truly320'
——設置啟動參數(shù)
PMON> devcp tftp://192.168.3.113/ramdisk-cramfs.img /dev/mtd1
——通過tftp把文件系統(tǒng)鏡像文件ramdisk-cramfs.img燒寫到SOC3210的mtd1分區(qū)上。
關于TFTP的使用參考《Ubuntu-10.04下安裝與使用TFTP》
完成后重啟,輸入命令reboot。
3、在SOC3210上運行測試DirectFB樣例
進到SOC3210的文件系統(tǒng)
#cd /usr/directfb/bin
#ls
#./df_andi
顯示許多移動的企鵝。
類似運行測試其他例子,穩(wěn)定通過。
重啟SOC3210,再運行測試,穩(wěn)定通過。
至此移植完成。