嵌入式 linux GUI--DirectFB + GTK 至尊秘笈
嵌入式 linux GUI--DirectFB + GTK 至尊秘笈
版权申明: 本文档一切权利归本人(kendych@sina.com.cn)所有,用于商业用途徐征得本
人同意,如无法联系到本人,须征得 www.directfb.com.cn 所有者同意;用于非商业用途的,
无需任何许可,但请尊重本人的署名权,并注明出处 www.directfb.com.cn 及附加本申明。
关键词: 嵌入式 GUI arm linux DirecrFB GTK tslib
1 前言
数年前,曾经开发过一个嵌入式的产品,如今市场依然存在,但由于电子产品的升级换
代很快,许多元器件都采购不到了,为了延续产品的生命周期,计划在 linux 平台上开发新
的版本。而在 linux 上的 GUI 上成了大问题,最开始有用 Minigui 的打算,也同飞漫公司联
系过,但费用我这里无法承受。(Minigui 作为国产优秀的嵌入式 GUI,如果不是费用的问题,
应该是最优的选择。) QT 我也看了下,也是收费的,没有仔细研究。最开始我打算用
MicroWindow 的,但后来发现这个东西好久没有更新了,bug 一大堆。最后的目光停留在
GTK 上,最开始无从下手,不知道到底适合不适合做嵌入式 GUI,最后不知道在哪里看到
一个介绍说诺基亚有产品是用 GTK 的,觉得既然别人能做得,我也能做得。最开始做这个,
相关资料太少,一点底都没有,但经过两个月(长了点)的努力,终于解决了所有问题,才一
颗石头落地。个人认为,在本文的帮助下,如果你拥有初中级的嵌入式 linux 的知识,也许
一天就能解决问题,最长也不会超过一个星期。
2 准备工作
硬件环境:linux 主机一台,如果你喜欢用 windows,可以在 windows 主机上用 vmware
虚拟一个 linux 系统。嵌入式开发套件,包括嵌入式开发板、带触屏的液晶屏及相关连接电
缆。
软件环境:x86 linux 发行版,配置好 framebuffer,并安装好 ftp server、telnet server、tftp
server、nfs server、gcc 及相关软件、交叉编译器、开发套件的 kernel 2.6 的源码包。
本人用的是 Ubuntu 7.10 的发行版,嵌入式开发版采用三星的 2440 系列 cpu,如何搭建
开发环境不在本文讨论范围之类,请参考其他文档。交叉编译器用的是自己编译的 3.4.1,
最开始采用的是开发套件带的 3.4.1,为什么要用自己编译的而不用开发套件自带的呢? 这
里说本文第一个秘笈:由于 GTK 采用的矢量字体里一些算法使用了浮点运算,而 24xx 系
列的 cpu 硬浮点不支持(我没有相关知识,这是我的一个同事说得,是不是他本来意思,我
都不敢确定,如果你的 cpu 不是这个系列的,请查看相关资料),只要在交叉编译器里加上软
浮点运算支持,就应该没有问题了,所以在开始之前,先检查交叉编译器里有没有
--with-float=soft 这个选项。在我使用开发版自带的编译完成编译后,运行 gtk 的程序,总是
有这个提示” shape engine failure, expect ugly output. the offending font is”,而屏幕上所有字
符都显示不出来,button 由于字符无法显示,被压缩成一条线,这个问题困扰我好几天,我
开始以为是字库设置的问题,后来求助同事,他听了我的描述后,猜测可能是浮点运算的问
题,让我用我们自己编译的交叉编译器重新编译一下,看看能不能解决问题,结果真的解决
1-9