为了构建一个Linux-PDA的开发环境,您需要以下前提:
(1) Linux内核支持Frame Buffer
此项需要是为使用DirectFB而准备的。
(2) 有一个可运行的Linux发行版本,支持chroot
此项是为运行Linux-PDA编译环境而准备的。
(3) Linux内核支持devfs(可选)
在最新版的2.4.x内核里有这一项,2.6内核也支持,不过改为obsolescent了,未来考虑改为udev
此项方便在编译环境中使用外部设备。
具体的构建步骤为:
1、从http://www.uclibc.org/downloads/下载最新版的root_fs_i386
网址(http://www.uclibc.org/downloads/)我使用的是25-Jul-2004版的,写作本文时最新版是03-Jan-2005,具体操作时可能会有一些差异,但安装过程应该大体一致。
2、chroot到解压后的root_fs中,以后的工作将在此环境中进行
如果需要下载,可以打开另一个控制台,在其下完成下载任务,然后复制到root_fs目录中。
3、下载perl-5.8.5源码,编译并安装
网址(http://www.cpan.org/src/stable.tar.gz)上述网址在本文写作时所对应的是perl-5.8.6版本,未测试,但应该不会有太大问题。请使用:$/bin/bash Configure -d -e -O -Uuseperlio以避免使用uclibc编译perl时的perlio错误。
4、下载pkgconfig-0.15.0源码,编译并安装
网址(http://www.freedesktop.org/softw ... onfig-0.15.0.tar.gz)
5、下载libiconv-1.9.2源码,编译并安装
网址(http://ftp.gnu.org/gnu/libiconv/libiconv-1.9.2.tar.gz)
6、下载gettext-0.13源码,编译并安装
网址(http://ftp.gnu.org/gnu/gettext/gettext-0.13.tar.gz)glib-2.4.8需要这个软件包,uclibc中有该软件包所提供的函数接口,不过还没有真正实现。
7、下载glib-2.4.8源码,编译并安装
网址(ftp://ftp.gtk.org/pub/gtk/v2.4/glib-2.4.8.tar.bz2)
8、下载expat-1.95.8源码,编译并安装
网址(http://sourceforge.net/projects/expat/)
9、下载freetype-2.1.4源码,编译并安装
网址(http://sourceforge.net/project/showfiles.php?group_id=3157)请不要使用更新版本的freetype-2,例如freetype-2.1.9,否则可能引起与fontconfig软件包的兼容性问题。
10、下载fontconfig-2.2.90源码,编译并安装
网址(http://freedesktop.org/software/ ... onfig-2.2.90.tar.gz)您可能需要将本地目录/usrs/share/fonts/下的内容复制到您的开发目录的$your_develop_dir/usr/share/fonts/下,以便让fontconfig正常运行。
11、下载pango-1.4.1源码,编译并安装
网址(ftp://ftp.gtk.org/pub/gtk/v2.4/pango-1.4.1.tar.bz2)
12、下载atk-1.6.1源码,编译并安装
网址(ftp://ftp.gtk.org/pub/gtk/v2.4/atk-1.6.1.tar.bz2)
13、下载libpng-1.2.7源码,编译并安装
网址(http://sourceforge.net/project/showfiles.php?group_id=5624)libpng1.2.7有两个版本,一个是支持configure的,一个是不支持的,按你自己的喜好选择吧。写本文时看到有关libpng安全性的一个警告(http://www.libpng.org/pub/png/libpng.html)请尝试使用libpng-1.2.8编译并安装。
14、下载jpeg-6b源码,编译并安装
网址(ftp://ftp.gtk.org/pub/gtk/v2.4/dependencies/jpegsrc.v6b.tar.gz)
15、下载tiff-v3.6.1源码,编译并安装
网址(ftp://ftp.gtk.org/pub/gtk/v2.4/dependencies/tiff-v3.6.1.tar.gz)
16、下载libtool-1.5.10源码,编译并安装
网址(http://ftp.gnu.org/gnu/libtool/libtool-1.5.10.tar.gz)在安装DirectFB软件包是需要用到libtool。
download 于 2006-11-14 10:15:19发表:
该系统构架用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就是这样简单,一起来玩吧。
download 于 2006-11-14 10:14:48发表:
24、首先来试试GTK自带的demo程序
如果您刚才是在X window system(或者桌面环境下)工作,请先退出X window,回到控制台状态。
在运行gtk-demo前,请将gpm关闭,因为gpm与DirectFB产生冲突,致使鼠标不能正常工作。
警告!!!作者至今还没有找到在640x480模式下如何退出gtk-demo的办法,每次运行后,都使用另外一个控制台重启机器:p运行gtk-demo后您可以尝试着打开各种widget,试验完后重启机器。好了,现在可以试试GPE了,有关GPE的详细资料请浏览(http://gpe.handhelds.org/)
25、下载SQLite-2.8.15源码,编译并运行
网址(http://www.sqlite.org/sqlite-2.8.15.tar.gz)GPE使用SQLite作为数据管理工具,已做的试验中还没有用到该软件包,但是还是先装上吧。
26、下载gpe-icon-0.24并安装
网址(ftp://gpe.handhelds.org/projects/gpe/source/gpe-icons-0.24.tar.gz)
27、下载libschedule-0.13源码,编译并安装
网址(ftp://gpe.handhelds.org/projects ... chedule-0.13.tar.gz)
28、下载libgpewidget-0.95,作为参考
网址(ftp://gpe.handhelds.org/projects ... ewidget-0.95.tar.gz)本文写作时libgpewidget已经发布0.97版本了,本文作者是基于libgpewidget-0.95进行修改,使其可以在GTK/DirectFB下运行。
修改的主要工作是将原libgpewidget中的Xlib函数用GDK中的函数替换,因为只是想验证可行性,修改比较简单,存在很多bug,使用者请小心,请下载本文附录文件,解压并安装libgpewidget-0.95-dfb。
29、下载gpe-clock-0.9,作为参考
网址(ftp://gpe.handhelds.org/projects/gpe/source/gpe-clock-0.9.tar.gz)我们将尝试修改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 |
+----------------------------------------------+
download 于 2006-11-14 10:14:17发表:
17、下载DirectFB-0.9.21源码,编译并安装
网址(http://www.directfb.org/downloads/Core/DirectFB-0.9.21.tar.gz)运行autogen.sh自动产生配置文件并做第一次默认编译,以后再编译的时候不需要运行autogen.sh,可以直接使用configure来配置。
18、从www.directfb.org的cvs服务器上co最新版的gdk-directfb
仔细阅读README。
19、下载gtk+-2.4.14源码,解压
网址(ftp://ftp.gtk.org/pub/gtk/v2.4/gtk+-2.4.14.tar.bz2)假设您解压到/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网址(http://ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.bz2)和automake-1.7网址(http://ftp.gnu.org/gnu/autoconf/automake-1.7.9.tar.bz2)同时还需要编辑configure.in文件,加入:
AM_CONDITIONAL(ENABLE_GTK_DOC, false)
AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, false)
有关automake、autoconf和libtool的资料可以参阅autobook网址(http://sources.redhat.com/autobook/)以及Learning the GNU development tools
网址(http://autotoolset.sourceforge.net/tutorial.html)
23、编译并安装GTK/DirectFB
$./configure --with-gdktarget=directfb
$make
$make install
致此,您的基于uclibc+directfb+gtk+的Linux-PDA开发环境已经搭建好了,下边您就可以尝试在GTK基础上开发Linux-PDA的应用程序了。