在Redhat9下构建TinyX+GTK图形环境 .
在Redhat9下构建TinyX+GTK图形环境 .概述
最近要将Redhat9.02移植到一块嵌入式586的主板上,空间有限,还要有图形环境,支持中文。所以,要建立一个精简的图像环境,先选择TinyX+GTK的方式进行研究。TinyX是XFree86针对嵌入式的编译选项,体积小,启动速度快。
本文使用虚拟机vmware安装Redhat-9.02文本系统,然后用XFree86-4.3.0编译TinyX,最后编译GTK+-2.0。
1.安装Redhat-9.02
在vmware上新建一个虚拟机,硬盘空间为4GB,内存512MB。开始安装Redhat-9.02,选择linux text模式,中文安装语言,swap分区为512MB,其余空间都挂载到根目录下。bootloader用Grub,自定义安装软件包,选择的软件包如下:Administration tools
Development Tools
Editors
Ftp Server
Kernel Development
NetWork Server
Printing Support
Server Configuration Tools
Sound and Video
System Tool选择系统支持的语言为Chinese+English。
安装后将/etc/sysconfig/下的i18n文件修改如下:LC_CTYPE="zh_CN.GB2312"
SUPPORTED="zh_CN.GB2312:en_US.UTF-8:en_US:en"
SYSFONT="latercyrheb-sun16"
SYSFONTACM="iso01"2.编译libpng-1.2.16
编译TinyX时需要png.h文件,所以要重新安装libpng。先删除原有的libpng:
rm -rf /usr/lib/libpng*
下载libpng-1.2.16.tar.bz2 ,复制到/root目录下解压:
tar -xvjflibpng-1.2.16.tar.bz2
源码包中的README和INSTALL文件有关于libpng的详细信息和编译安装方法,用如下命令编译安装:
cd /root/libpng-1.2.16
./configure
make
make install
默认安装在/usr/local/目录下,支持pkg-config,pkg-config文件放在/usr/lib/pkg-config/目录下。如果想卸载libpng,执行:make uninstall。
3.编译freetype-2.2.1
删除原有的freetype:
rm -rf /usr/lib/libfreetype*
下载freetype-2.2.1.tar.gz:
http://download.savannah.gnu.org/releases/freetype/
复制到/root/目录下解压:
tar -xvzffreetype-2.2.1.tar.gz
编译、安装:
cd /root/freetype-2.2.1
./configure
make
make install
默认安装到/usr/local/目录下,支持pkg-config。
4.编译TinyX
先删除原系统的X-window:
rm -rf /usr/X11R6
rm -rf /etc/X11
下载XFree86-4.3.0:ftp://ftp.xfree86.org/pub/XFree86/4.3.0/,共下载7个软件包:
X430src-1.tgz
X430src-2.tgz
X430src-3.tgz
X430src-4.tgz
X430src-5.tgz
X430src-6.tgz
X430src-7.tgz全部复制到/root下解压,解压后的源码都会放在/root/xc目录下。
先编译一个lndir工具:cd/root/xc/config/util
make -f Makefile.ini lndir
cd ../../../用lndir制作一个源文件的符号链接目录:mkdir build
cd build
../xc/config/util/lndir../xc用TinyX.cf的配置安装:
cd config/cf
cp -arf TinyX.cf host.def
修改host.def为:view plaincopy to clipboardprint?
01.#define KDriveXServerYES
02.#define TinyXServer YES
03.#define XfbdevServer YES
04.#define BuildLBX YES
05.#define BuildFonts YES
06.#define BuildAppgroup NO
07.#define BuildDBE NO
08.#define BuildXCSecurity YES
09.#define FontServerAccess NO
10.#undef BuildXF86RushExt
11.#define BuildXF86RushExt NO
12.#undef BuildRender
13.#define BuildRender YES
14.#define UseRgbTxt YES
15.#define BuildFontServer NO
#define KDriveXServerYES
#define TinyXServer YES
#define XfbdevServer YES
#define BuildLBX YES
#define BuildFonts YES
#define BuildAppgroup NO
#define BuildDBE NO
#define BuildXCSecurity YES
#define FontServerAccess NO
#undef BuildXF86RushExt
#define BuildXF86RushExt NO
#undef BuildRender
#define BuildRender YES
#define UseRgbTxt YES
#define BuildFontServer NO
cd ../../
touch xf86Date.h
touch xf86Version.h
make World
make install主要的库、头文件、可执行文件和配置文件等都安装了在/etc/X11和/usr/X11R6下。
TinyX依赖于framebuffer,要打开framebuffer。修改/etc/grub.conf文件,在kernel一行添加:
vga=0x311 fb:on
0x311为640x480,16bpp。
然后重启系统,启动时,屏幕左上方会出现一个企鹅Logo。
重启后运行/usr/X11R6/bin/Xfbdev,即可启动Xserver,可以看到灰色背景上有一个X形的鼠标。
为Xfbdev建立一个符号链接:
ln -s Xfbdev X
这样就可以用startx命令启动X-window。用Ctrl+Alt+Backspace组合键退出X-window。
这里可能出现加载链接库的错误,查看/etc/ld.so.conf文件中是否有/usr/X11R6/lib,然后执行ldconfig -v。
5.设置pkg-config
在/root/.bashrc文件中添加PKG_CONFIG_PATH环境变量:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/X11R6/lib/pkgconfig
6.编译Glib-2.0
先删除原有的glib:rm -rf /usr/lib/libglib*
rm -rf /usr/lib/libgmoudle*
rm -rf /usr/lib/libgobject*
rm -rf /usr/lib/gthread*下载glib-2.0.0.tar.bz2:
http://ftp.gnome.org/pub/gnome/sources/glib/2.0/
复制到/root/目录下解压:
tar -xvjfglib-2.0.0.tar.bz2
编译、安装:
cd /root/glib-2.0.0
./configure
make
make install
默认安装到/usr/local/目录下,支持pkg-config。
7.编译atk-1.0.0
删除原有的atk:
rm -rf /usr/lib/libatk*
修改/etc/ld.so.conf文件,添加:
/usr/local/lib
下载atk-1.0.0.tar.bz2:
http://ftp.gnome.org/pub/gnome/sources/atk/1.0/
复制到/root/目录下解压:
tar -xvjfatk-1.0.0.tar.bz2
编译、安装:
cd /root/atk-1.0.0
./configure
make
make install
默认安装到/usr/local/目录下,支持pkg-config。
8.编译pango-1.0.0
删除原有的pango:rm -rf /usr/lib/libpango*
rm -rf /usr/lib/pango下载pango-1.0.0.tar.bz2:
http://ftp.gnome.org/pub/gnome/sources/pango/1.0/
复制到/root/目录下解压:
tar -xvjfpango-1.0.0.tar.bz2
编译、安装:cd/root/pango-1.0.0
./configure
make
make install默认安装到/usr/local/目录下,支持pkg-config。
9.编译libjpeg-6b
删除原有的libjpeg:
rm -rf/usr/lib/libjpeg*
下载libjpeg-6b.tar.gz:
http://jaist.dl.sourceforge.net/project/cross-stuff/cross-stuff/1.0/libjpeg-6b.tar.gz
复制到/root/目录下解压:
tar -xvzflibjpeg-6b.tar.gz
编译、安装:cd/root/libjpeg-6b
./configure--enable-shared
make
make install默认安装到/usr/local/目录下。
10.编译gtk+-2.0
删除原有的gtk:rm -rf/etc/gtk*
rm -rf/etc/gnome
rm -rf/usr/bin/*gtk*
rm -rf/usr/lib/libgtk*
rm -rf/usr/lib/gtk*下载gtk+-2.0.0.tar.bz2:
http://ftp.gnome.org/pub/gnome/sources/gtk+/2.0/
复制到/root/目录下解压:
tar -xvjfgtk+-2.0.0.tar.bz2
编译、安装:cd/root/gtk+-2.0.0
./configure--without-libtiff
make
make install默认安装到/usr/local/目录下,支持pkg-config。
11.测试
运行startx,可以启动X-window。
然后运行gtk-demo,可以启动gtk-demo程序。
编写demo.c文件:
view plaincopy to clipboardprint?01.//demo.c
02.#include <gtk/gtk.h>
03.char *_(char *c)
04.{
05. return(g_locale_to_utf8(c,-1,0,0,0));
06.}
07.intmain(int argc,char *argv[])
08.{
09. GtkWidget *window;
10. gtk_init(&argc,&argv);
11. window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
12. gtk_window_set_title(GTK_WINDOW(window),_("中文窗口")); //定义窗口的标题
13. gtk_window_set_default_size(GTK_WINDOW(window),200,200); //设置窗口的大小
14. gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_MOUSE); //设置窗口显示的位置为鼠标的位置
15. gtk_widget_show(window);
16. gtk_main();
17. return 1;
18.}
//demo.c
#include <gtk/gtk.h>
char *_(char *c)
{
return(g_locale_to_utf8(c,-1,0,0,0));
}
intmain(int argc,char *argv[])
{
GtkWidget *window;
gtk_init(&argc,&argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),_("中文窗口")); //定义窗口的标题
gtk_window_set_default_size(GTK_WINDOW(window),200,200); //设置窗口的大小
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_MOUSE); //设置窗口显示的位置为鼠标的位置
gtk_widget_show(window);
gtk_main();
return 1;
}编译:
gcc -Wall -o demo demo.c `pkg-config --cflags --libs gtk+-2.0`
执行:
./demo
效果:
****END***
页:
[1]