21
2009
1

[春天]DirectFB v1.3.0图形库在嵌入式linux上的移植

来了北方才知道,如果没有冬天,也就没有春天。

因为要参加2009年的某比赛(暂时小小的保密一下),我们的项目要做的是——使用了水平倾角传感器和加速度传感器的——具有简单物理引擎的——健身益智类游戏。

这个项目的第一站和第二站就是解决图形库和传感器的问题。
qt是个好东西,封装完善,还有诺基亚这个牛后台狂顶它……
可惜我们的板子没有一颗4核的core2处理器,也没有nVidia的4核显卡,所以,鉴于QT的超低执行速度带来的噩梦,绣球不给她。
移植什么库呢?
我第一想到的是allegro,这个是一个专业的、跨平台的、牛的游戏开发库,它已经不只是图形库了,只要是游戏的各个方面他都有。它的demo很爽。哈哈。而且,我恰好用过
它支持framebuffer。
可是移植它遇到了很多困难,现在想想,好像是找不到模块的问题,而且这个库是为pc写的,为x86架构做了很多优化,而且不支持触摸屏(鼠标驱动没有触摸屏设备或者封装tslib,要改也不是不行,只是麻烦得很)。最终我放弃了。

搜阿搜阿,好了正题到了,终于到DirectFB了。

DirectFB是一个基于framebuffer的“图形库”,它的主要领域是嵌入式,GTK+有针对与DirectFB的实现噢!DFB做底层。
当然我们暂时永不到gtk+。他还支持触摸屏,tslib是当初移植小板的qt时候顺便移的,就用它吧。
现在跑几个demo看看,速度刚刚滴~哈哈

好了说移植:
先是环境
博创的 pxa270 板子
博创的 pxa270A 编译链3.4.6不带软浮点,注意噢,多了一个A
博创的 pxa270A blob无源码
我修改的博创的 pxa270内核2.6.9 修改了网卡驱动,暂时没改flash分区
下载吧首先:
DirectFB 1.3.0 源码
DirectFB example 1.2 例子
freetype 2.3.9 它依赖的矢量font库
giflib 4.1.6 gif库,可选,跑demo必须
jpegsrc v6b jpeg库同上
libpng 1.2.35 png库同上
tslib 1.4 小板内核必须,触摸屏库

tslib就不说了,根据小板的触摸屏走向修改了几个xy,太久了,忘了。

tslib其实可以不需要的,因为DirectFB支持一些常用的触摸屏,但是我们手上的内核使用的是input event

看到有人搜索tslib1.4下载,链接到这里了,那么就在这里放一下下载链接好了。

这个其实是用svn同步下来的,trunk里面正好是1.4的版本号。

svn co svn://svn.berlios.de/tslib/trunk/tslib tslib

下载tslib1.4点这里!

其他的无非就是指定一下编译链CC什么的,指定一下编译选项CFLAGS.LIBS什么的
configure make make install 老一套了
我习惯用脚本来干,这是例子
#!/bin/sh
export CC=arm-linux-gcc
export AR=arm-linux-ar
export LD=arm-linux-ld
export RANLIB=arm-linux-ranlib
export PREFIX=/mnt/yaffs/libjpeg
export EXEC_PREFIX=/mnt/nfs/libjpeg

./configure –prefix=${PREFIX}
–exec-prefix=${EXEC_PREFIX}
–host=arm-linux
–target=arm-linux

下面是重头戏,DirectFB的配置与修改
这个库的configure里面有个地方有逻辑问题

这一段是我的分析过程,急着去买菜或者去食堂或者约会的同学可以跳过了。
问题是运行后提示 can’t find system,大概是这样,systems是一些模块的目录,fbdev之类的实现图形的底层接口模块。
也就是说找不到目录。好类,我调试,我grep -R “上面的错误提示” .
进去,找了一下具体path是哪个变量,我看到模块加载的函数在lib/direct/modules.c里,156行 dir = opendir( directory->path );
我直接printf directory->path,好发现问题,它的路径合并了prefix和exec_prefix,寻找宏,在modules.h里75行处,有个宏MODULEDIR,又grep,这个宏是gcc传进来的,
根据我gcc的经验,传全局宏的方法是-DXXXXX于是我搜索,发现在lib/direct/Makefile的296297行,添加了一个SYSROOT的变量在MODULEDIR的前面,于是再grep SYSROOT,发现了,这个值与prefix重合,按理说这个变量只有在configure时启用–with-sysroot的时候才有的,我再grep,好了,问题所在,configure的27714-27723行,逻辑错误,直接全部#注释,空留一个SYSROOT=,搞定

好了,跳过上一段的朋友,如果你是着急去约会,我就要说你了,约会在乎这几分钟吗?难道(他、她)没有放你鸽子过吗?

好了编译,依然是脚本,请注意这些选项,是锤炼过的,注意修改路径,还有我打开debug选项,因为我是nfs挂载调试的,正式使用需要关掉并且strip它们

#!/bin/sh
export CC=arm-linux-gcc
export AR=arm-linux-ar
export LD=arm-linux-ld
export RANLIB=arm-linux-ranlib
export TSLIB_CFLAGS="-I/home/cat/tslib-1.4/build/include"
export TSLIB_LIBS="-L/home/cat/tslib-1.4/build/lib -lts"
export FREETYPE_LIBS="`/mnt/nfs/freetype/bin/freetype-config --libs`"
export FREETYPE_CFLAGS="`/mnt/nfs/freetype/bin/freetype-config --cflags`"
export CFLAGS="-I/mnt/yaffs/libpng/include -I/home/cat/workspace/jpeg-6b -I/mnt/yaffs/libgif/include"
export LDFLAGS="-L/mnt/yaffs/libpng/lib -L/home/cat/workspace/jpeg-6b"
export LIBS="-lpng -ljpeg"
./configure --prefix=/mnt/yaffs/DirectFB/
--exec-prefix=/mnt/nfs/DirectFB
--with-sysroot=/mnt
--host=arm-linux
--target=arm-linux
--enable-x11=no
--enable-osx=no
--enable-voodoo=no
--enable-mmx=no
--enable-sse=no
--enable-fbdev=yes
--enable-gif=yes
--enable-jpeg=yes
--enable-video4linux=no
--with-gfxdrivers=none
--with-inputdrivers=keyboard,linuxinput,tslib
--with-tests
--with-sysroot=/mnt/yaffs/DirectFB
--without-smooth-scaling
--enable-freetype=yes
--enable-debug

下面是example

#!/bin/sh
export CC=arm-linux-gcc
export AR=arm-linux-ar
export LD=arm-linux-ld
export RANLIB=arm-linux-ranlib
export DIRECTFB_CFLAGS="-I/mnt/yaffs/DirectFB//include/directfb -D_REENTRANT"
export DIRECTFB_LIBS="-L/mnt/nfs/DirectFB/lib -ldirectfb -lfusion -ldirect -lpthread"
export CFLAGS="-I/mnt/yaffs/libpng/include"
export LDFLAGS="-L/mnt/yaffs/libpng/lib"
export LIBS="-lpng"
./configure --prefix=/mnt/yaffs/DirectFB-example/
--exec-prefix=/mnt/nfs/DirectFB-example
--host=arm-linux
--target=arm-linux
--enable-debug

好了,打开板子,把目录nfs挂上去,设置LD_LIBRARY_PATH
执行例子,我建议首先执行df_dok这个是测benchmark的,需要移好了png和jpeg和gif,效果不错,很快。

我这个运行警告,设置ywrap参数非法的问题(panning error),google了一下,开发者说有些嵌入式不支持,警告很正常:
===================================
On Sun, Nov 02, 2008 at 12:28:34PM +0100, Collin Gregory wrote:
> Hi everyone,
>
> I know this problem has been treated so many times, but i didn’t find any
> tips to solve it…
>
> I’m using uvesafb for my fb manager, and when i try to launch vlc with
> directfb , i have always the same error : Panning Display failed (x=0 y=0
> ywrap=0 vbl=1)

It is simply a warning and it used to be printed even when the fb driver
didn’t support panning. Your application should still work (albeit
without page flipping).

I just pushed some fixes yesterday which should also prevent the
warning from being printed when the driver doesn’t support panning.

> What is annoying me is the ywrap=0 , does it means that ywrap is not
> activated ?

Yes.
=====================================
我的有CreatSuface失败的问题,不知道是哪个模块没打开的缘故,不过很多都可以跑了

也可以df_input,测试输入的,键盘和触摸屏都可以。

这时候是不是完了呢?不是,还要校准触摸屏。运行arm-linux-dfbpenmount(不知道在哪?死了算了),屏幕出现两个十字,点完了出现让你吧minx miny maxx maxy之类的填到inputdrivers/penmount/penmount.c 99行,rebuild。

好了,可以开始DirectFB之旅了,谢谢观赏

Written by ChuangBo in: 图形库 | 标签:, , , ,

14
2008
9

[学无前后,达者为师]Xscale的软浮点问题及基于该芯片的linux上QT4编译移植过程分析详解”Xscale soft-float transplanting QT4 to linux on Xscale”

Xscale的软浮点问题及基于该芯片的linux上QT4编译移植过程分析详解

“Xscale soft-float transplanting QT4 to linux on Xscale”

update 2008-12-16

看到站长统计里有人搜索tslib1.4下载,链接到这里了,那么就在这里放一下下载链接好了。

这个其实是用svn同步下来的,trunk里面正好是1.4的版本号。

svn co svn://svn.berlios.de/tslib/trunk/tslib tslib

下载tslib1.4点这里!
又是很久没更新blog,不是因为没内容,而恰好是因为内容太多,干不过来,现在每天除了上课的时间和逃课的时间,基本上全天候呆在实验室,每天头昏脑胀(虽然很快乐很开心^_^),实在是没时间写了……不过总结写文档是个好习惯,好处有:
1)理清头绪。整理资料可以让自己发现知识遗漏点,因为做的时候忙于实现,为了避免打乱思路很多暂时无用的技术细节是被忽略的。
2)造福后人。这里的后人不是我的后人……而是实验室里在我之后想学这个的人。很多东西都缺乏中文资料,或者中文资料版本解决方案不匹配,只能适用于我当时的情况,而不能让其他人受益。资料可以让后人快速入门。
3)锻炼文笔。对于IT人士,“文笔”这个词实在有点过分了,因为技术文档讲究严谨又清晰易懂,不能太“文采”了,但是又可以有一定的幽默感,也就是写作风格可以比较随意。在实际开放中,因为必须写文档总结,测试文档,技术文档,需求文档,甚至对员工培训,文档的写作必不可少,现在可以加紧锻炼。
4)可以显得自己比较牛。^_^

来到实验室以后,并没有立即开始学习工作,而是花了很多时间和大家相识,了解大家。

先说说老师,老师很牛很牛,他们一定不介意我说出他们的名字,贾世祥老师和潘辉老师,一搜就知道,有书有论文。

成员呢有12人目前,只有我一个是07级的,奇怪的是,大三大四的学长们都很年轻,没几个比我大的……
实验室老大快毕业了,叫他老大不是因为他老,而是因为他足够牛。我很佩服他,他的简历上写的能力特长都能让你看晕了。老大掌管实验室大小事,关心学弟学妹们的工作进度,提出指导意见和方向,相当平易近人,他女友还是前学生会副主席。对我来说,他就是一个老师,太佩服了。和他聊5分钟,等于自己看一天书。

暑假的时候他们一起做了基于s2410的linux的智能家居服务系统,获得了全国QT特等奖,十分厉害,这是计算机系的首次拿奖……

女生挺多的其实,有4个,至于她们的能力水平,我还不清楚,就不多说了。

好像每次都跑题好多好多阿……不过我知道其实大多数看我blog的其实也就看看这些花边新闻,看技术的看累了一般也比较愿意看看八卦……所以我才废话比较多……

本文没有源码下载,没有诙谐的语言,没有透露隐私,也没有赏心悦目、搞笑的图片,甚至也没有美女出现。

本文只有技术……如果各位看官没有耐心,请登录www.zhetengmaomao.com.cn观看其余日志,谢谢。

(全文…)

Written by ChuangBo in: 嵌入式, 技术 | 标签:, , , , ,

Powered by WordPress | Aeros Theme | TheBuckmaker.com | 鲁ICP备08103482号