全部博文(40)
2011年(40)
分类: 嵌入式
2011-02-15 13:56:17
编译平台:x86、VMware上Ubuntu-10.04
目标平台:SOC3210
交叉编译工具链:gcc-3.4.6(mipsel)
一、获取源码包
1、zlib-1.2.5.tar.bz2
2、freetype‐2.3.5.tar.bz2
3、libpng-1.2.40.tar.bz2
4、jpegsrc.v6b.tar.gz
5、DirectFB-1.3.0.tar.gz
6、DirectFB-examples-1.2.0.tar.gz
二、交叉编译与安装步骤
1、搭建交叉编译工具链
$tar zxvf gcc-3.4.6.tgz -C /opt ——需要解压到/opt目录下
$export PATH=/opt/gcc-3.4.6/bin:$PATH ——设置工具链的环境变量
另外:如果需要在另外的终端和重启机子后都包含这环境变量的话,可以把/opt/gcc-3.4.6/bin: 添加到/etc/environment文件下,然后打开新终端或重启虚拟机。
2、设置编译安装所需环境变量
$mkdir /usr/directfb ——创建安装目录
$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
可能有出错提示:
无法创建普通文件"/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所编译出来的库文件
来更新交叉编译工具链的动态库文件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、制作文件系统
制作一个新的文件系统有利于移植到开发板上。
$cd ramdisk ——进入根文件系统ramdisk中。ramdisk的制作参考SOC3210文档
$cp /usr/directfb usr ——必须把交叉编译后的directfb放于此目录,因为DirectFB编译时 已经把这个目录编译到程序中,无法后期设置。
$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
——创建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程序运行时的配置文件。其具体参数可以参考:
或http://blog.chinaunix.net/u3/104335/showart_2061486.html
或者在终端上查看$man directfbrc
改为:
system = fbdev ——设定使用的图形系统为linux frame buffer
fbdev = /dev/fb0 ——打开设定的frame buffer (/dev/fb0)
wm = default ——设定窗口管理层,默认default(0)
mode = 320x240 ——设定默认的屏幕显示320x240
depth = 16 ——使用二进制位数设置每像素默认的像素深度为16位
pixelformat = RGB16 ——设置默认的像素格式
mouse-protocol = IMPS/2 ——为一个串口鼠标指定使用的协议
bg-color = 00FFFF ——控制背景的颜色
no-vt ——取消虚拟终端
保存退出。
$cd .. ——退到上一层
$mkfs.cramfs ramdisk ramdisk-cramfs.img
文件系统制作完成,得到文件系统的镜像文件ramdisk-cramfs.img。
2、烧写文件系统到SOC3210
SOC3210上电。
在SecureCRT终端中
PMON> set append 'g root=/dev/mtdblock1 rootfstype=cramfs noinitrd init=/linuxrc console=ttyS0,115200 display=truly320'
——设置启动参数
PMON> devcp tftp://192.168.3.113/ramdisk-cramfs.img /dev/mtd1
——通过tftp把文件系统镜像文件ramdisk-cramfs.img烧写到SOC3210的mtd1分区上。
关于TFTP的使用参考《Ubuntu-10.04下安装与使用TFTP》
完成后重启,输入命令reboot。
3、在SOC3210上运行测试DirectFB样例
进到SOC3210的文件系统
#cd /usr/directfb/bin
#ls
#./df_andi
显示许多移动的企鹅。
类似运行测试其他例子,稳定通过。
重启SOC3210,再运行测试,稳定通过。
至此移植完成。
ai011h
2011-02-15