Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1381795
  • 博文数量: 343
  • 博客积分: 13098
  • 博客等级: 上将
  • 技术积分: 2862
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-06 00:35
文章存档

2012年(131)

2011年(31)

2010年(53)

2009年(23)

2008年(62)

2007年(2)

2006年(36)

2005年(5)

分类: LINUX

2006-08-30 21:19:14

对建立一个GUI(GTK)的FB开发环境有帮助,值得一看。

Linux-PDA软件开发环境的构建
提交人: hue 时间: 六, 2005-01-08 03:39
为了构建一个Linux-PDA的开发环境,您需要以下前提:
(1) Linux内核支持Frame Buffer
此项需要是为使用DirectFB而准备的
(2) 有一个可运行的Linux发行版本,支持chroot
此项是为运行Linux-PDA编译环境而准备的
(3) Linux内核支持devfs(可选)
在最新版的2.4.x内核里有这一项,2.6内核也支持,不过改为obsolescent了,未来考虑改为udev
此项方便在编译环境中使用外部设备
具体的构建步骤为:
1、从下载最新版的root_fs_i386
网址()
我使用的是25-Jul-2004版的,写作本文时最新版是03-Jan-2005,具体操作时可能会有一些差异,但安装过程应该大体一致
2、chroot到解压后的root_fs中,以后的工作将在此环境中进行
如果需要下载,可以打开另一个控制台,在其下完成下载任务,然后复制到root_fs目录中
3、下载perl-5.8.5源码,编译并安装
网址()
上述网址在本文写作时所对应的是perl-5.8.6版本,未测试,但应该不会有太大问题
请使用
$/bin/bash Configure -d -e -O -Uuseperlio
以避免使用uclibc编译perl时的perlio错误
4、下载pkgconfig-0.15.0源码,编译并安装
网址()
5、下载libiconv-1.9.2源码,编译并安装
网址()
6、下载gettext-0.13源码,编译并安装
网址()
glib-2.4.8需要这个软件包,uclibc中有该软件包所提供的函数接口,不过还没有真正实现。
7、下载glib-2.4.8源码,编译并安装
网址()
8、下载expat-1.95.8源码,编译并安装
网址()
9、下载freetype-2.1.4源码,编译并安装
网址()
请不要使用更新版本的freetype-2,例如freetype-2.1.9,否则可能引起与fontconfig软件包的兼容性问题
10、下载fontconfig-2.2.90源码,编译并安装
网址()
您可能需要将本地目录/usrs/share/fonts/下的内容复制到您的开发目录的$your_develop_dir/usr/share/fonts/下,以便让fontconfig正常运行
11、下载pango-1.4.1源码,编译并安装
网址()
12、下载atk-1.6.1源码,编译并安装
网址()
13、下载libpng-1.2.7源码,编译并安装
网址()
libpng1.2.7有两个版本,一个是支持configure的,一个是不支持的,按你自己的喜好选择吧
写本文时看到有关libpng安全性的一个警告()请尝试使用libpng-1.2.8编译并安装
14、下载jpeg-6b源码,编译并安装
网址()
15、下载tiff-v3.6.1源码,编译并安装
网址()
16、下载libtool-1.5.10源码,编译并安装
网址()
在安装DirectFB软件包是需要用到libtool
17、下载DirectFB-0.9.21源码,编译并安装
网址()
运行autogen.sh自动产生配置文件并做第一次默认编译,
以后再编译的时候不需要运行autogen.sh,可以直接使用configure来配置
18、从的cvs服务器上co最新版的gdk-directfb
仔细阅读
README
19、下载gtk+-2.4.14源码,解压
网址()
假设您解压到/root/gtk+-2.4.14/目录下
20、安装gdk-directfb的README所述将,gdk-directfb移到/root/gtk+-2.4.14/gdk/目录下,并改名为directfb
您会发现在/root/gtk-2.4.14/gdk/目录下,有x11、win32、linux-fb和directfb四个目录,这些都是gtk的图形接口bankend。我们将只用到directfb,但是可以参考其他目录,特别是linux-fb目录的内容
21、回到/root/gtk-2.4.14/目录下,并执行patch动作
$cd /root/gtk-2.4.14/
$patch -Np0 -i gdk/directfb/gtk-directfb.patch
系统会提示某些地方patch的位置偏移了,这个没关系,因为gtk-directfb.patch只是patch gtk+的配置文件,这个patch应该是为gtk-2.4.9做的,但不影响使用
22、重新生成配置文件
$aclocal
$automake --add-missing
$autoconf
这需要安装autoconf-2.59网址()和automake-1.7网址()
同时还需要编辑configure.in文件,加入
AM_CONDITIONAL(ENABLE_GTK_DOC, false)
AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, false)
有关automake、autoconf和libtool的资料可以参阅autobook网址()以及Learning the GNU development tools
网址()
23、编译并安装GTK/DirectFB
$./configure --with-gdktarget=directfb
$make
$make install
致此,您的基于uclibc+directfb+gtk+的Linux-PDA开发环境已经搭建好了
下边您就可以尝试在GTK基础上开发Linux-PDA的应用程序了。
24、首先来试试GTK自带的demo程序
如果您刚才是在X window system(或者桌面环境下)工作,请先退出X window,回到控制台状态。
在运行gtk-demo前,请将gpm关闭,因为gpm与DirectFB产生冲突,致使鼠标不能正常工作。
警告!!!作者至今还没有找到在640x480模式下如何退出gtk-demo的办法,每次运行后,都使用另外一个控制台重启机器:p
运行gtk-demo后您可以尝试着打开各种widget,试验完后重启机器。
好了,现在可以试试GPE了,有关GPE的详细资料请浏览()
25、下载SQLite-2.8.15源码,编译并运行
网址()
GPE使用SQLite作为数据管理工具,已做的试验中还没有用到该软件包,但是还是先装上吧
26、下载gpe-icon-0.24并安装
网址()
27、下载libschedule-0.13源码,编译并安装
网址()
28、下载libgpewidget-0.95,作为参考
网址()
本文写作时libgpewidget已经发布0.97版本了,本文作者是基于libgpewidget-0.95进行修改,使其可以在GTK/DirectFB下运行。
修改的主要工作是将原libgpewidget中的Xlib函数用GDK中的函数替换,因为只是想验证可行性,修改比较简单,存在很多bug,使用者请小心:p
请下载本文附录文件,解压并安装libgpewidget-0.95-dfb
29、下载gpe-clock-0.9,作为参考
网址()
我们将尝试修改gpe-clock使其运行在GTK/DirectFB下,作为GPE的试验。
请下载本文附录文件,解压并安装gpe-clock-0.9-dfb
30、运行gpe-clock,然后退出(如果不能退出请使用前述的重启大法)
您会看到在屏幕左上角有一个小时钟在运行,当然在Familiar发布版本里,它是在右下角的工具条上的。
/*
* 以下文字权当作者自我安慰的理由吧:-)
*/
通过上述步骤可以看到一个结构划分比较清晰的PDA软件系统已经构造出来了,其基本框架如下图所示:
+----------------------------------------------+
|             Application/GPE                  |
+--------------------------+-------------------+
|            GTK           |   other libs      |
+--------------+-----------+   libpng          |
| GDK/DirectFB |           |   libjpeg         |
+--------------+ pango/ATK |   libtiff         |
|    Glib      |           |   ......          |
+--------------+-----------+-------------------|
|              uclibc                          |
+----------------------------------------------+
|            DirectFB/Linux-kernel-fb          |
+----------------------------------------------+
该系统构架用DirectFB取代了X window system,将原有的GPE系统中与X window system交织在一块的部分分离出来,提高了各模块的聚合度,并将模块间的相互耦合的可能减小了。在获得硬件抽象的同时也得到了硬件加速的支持(这个有赖于DirectFB的实现)
其实这个趋势从GTK的发展计划也可以看到,现在GTK将不仅仅是构建在X window system上的ToolKit了,更有可能成为GUI抽象接口,通过GDK层来抹平底层不同windowing system的区别,为应用程序开发人员提供统一的接口。当然,如果要用到底层windowing system的特性,或许还要直接访问底层windowing system的api,但是,只要GDK做得足够好,这些都是可以解决的。
/*
* 以上文字属于纯净水类型,可以不予考虑
*/
未来的工作:
1、将现有的GPE应用程序移植到上述软件构架下
2、参与GPE项目未实现的功能开发
3、精简最终代码长度,实现将最终的基本系统放入8M/16M flash中
《Linux-PDA软件开发环境的构建》一文或许让大家看得迷迷糊糊的,有句古话说,"一个例子胜过一千遍的说教"(古代的老外说的,翻译过来大概意思是这样子的;-))
好了,今天就让我们来正式体验一下这个软件开发环境吧。
首先,说说我的系统环境吧
我的系统是Red Hat 9,运行在vmWare4.5.2上,cpu是Intel P4-2.4的
如果您使用的AMD的cpu,附件中提供的内核可能不适合您。
您需要一个支持Frame Buffer和devfs的Linux内核,如果您还没有或者不想自己动手编译一个,请下载附件中的boot.tar.bz2
解压到/boot目录下,如果您的引导程序使用的是GRUB,请在其中加入类似下文的一段title:
title Red Hat Linux (2.4.27-fb)
root (hd0,6)
kernel /vmlinuz-2.4.27-fb root=/dev/hda8 devfs=mount vga=785
initrd /initrd-2.4.27-fb.img
请注意在kernel后加入参数 devfs=mount vga=785
devfs=mount表示内核使用devfs
vga=785表示使用VESA Frame Buffer的VGA 640x480x64k色的模式
请参看下表
# VESA framebuffer console @ 1024x768x64k
vga = 791
# Normal VGA console
# vga = normal
# VESA framebuffer console @ 1024x768x64k
# vga=791
# VESA framebuffer console @ 1024x768x32k
# vga=790
# VESA framebuffer console @ 1024x768x256
# vga=773
# VESA framebuffer console @ 800x600x64k
# vga=788
# VESA framebuffer console @ 800x600x32k
# vga=787
# VESA framebuffer console @ 800x600x256
# vga=771
# VESA framebuffer console @ 640x480x64k
# vga=785
# VESA framebuffer console @ 640x480x32k
# vga=784
# VESA framebuffer console @ 640x480x256
# vga=769
如果您使用lilo,请查阅相关资料
如果您使用的是Red Hat发行版本,Red Hat已经为您做好有关devfs的一些配置了,如果是其它发行版本,请查阅相关资料
好了,假设您已经用新的内核成功启动并进入系统了,下边让我们来试试这个Linux-PDA的软件环境吧
请下载附件中的developroot.tar.bz2,并解压,假设您使用root用户工作
# tar jvxf developroot.tar.bz2
# chroot developroot
进入Linux-PDA软件环境
#./initroot.sh
挂接上devfs和proc准备好运行环境
接下来可以试试gtk-demo了,
#killall gpm
关掉gpm进程
#gtk-demo
这时您可以看到gtk-demo中的各种widget列表,一个个试试吧
好了,使用重启大法吧
如前的操作进入到Linux-PDA软件环境
#chroot developroot
#./initroot.sh
#killall gpm
#gpe-clock
您可以看到在屏幕的左上方有一个小时钟,点击它,会弹出一个菜单,看看各个选项吧,最后选择"remove from panel"退出程序。
如果您对这样的环境感兴趣,想了解是如何构造的,请下载附件中的root.tar.bz2,并在开发环境的根目录下(即/目录)解压,root.tar.bz2文件的内容将解压到/root目录中,您将看到您的开发环境中的/root目录下多了一些目录,这些目录的作用和功能,以及相应的软件包如何编译、安装请参阅《Linux-PDA软件开发环境的构建》一文。
是不是觉得没什么难的?呵呵,其实Linux就是这样简单,一起来玩吧。
 
阅读(2560) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-12-31 12:07:07

博主,你好,我在andlinux上面把gtk_demo也运行了起来,编译了几个小的范例,也都可以运行,我编译libgpewidget-0.95-dfb出错,就下了一个libgpewidget-0.10-dfb,再编译gpe-clock,运行./gpe-clock ,显示Xlib: extension "Generic Event Extension" missing on display "192.168.11.1:0.0" ,这个似乎是调用的xlib啊,怎么回事呢?