在很早以前,有类似嵌入式GUI的应用程序出现,不过它们都十分简单,只可称之为嵌入式GUI 的雏形。近几年来,随着数字电子技术与网络技术的发展,面向嵌入式的硬件种类越来越多,性能越来越好,同时人们对嵌入式系统的要求也越来越高,于是开发嵌入式GUI应用程序成为嵌入式系统的一个必然发要求。
引用一个概念,所谓GUI(Graphics User Interface)即图形用户界面。其广泛流行是当今计算机技术的重大成就之一,它极大地方便用户的使用,人们可以不再像在DOS时代那样要记一大堆枯燥的指令来操作计算机,而只要通过鼠标轻点几下,就可以完成大部分工作。如今大部分GUI都是指在PC机上工作的,可它们并适合用于嵌入式系统。由于嵌入资源有严格的限制,它对GUI也有特殊的要求。
一、用GTK开发嵌入式GUI应用程序
GTK是GIMP Toolkit的缩写,是目前编写图形界面比较流行的高层函数库之一。Linux的主流桌面系统之一的GNOME就是用GTK开发出来的。GTK本是在通用PC机上使用,不是专为嵌入式系统开发的。但由于它的模块化设计和全C编写的特性,兼容性好,运行稳定,且它的库也比较小,GTK加上X服务器仅占用2.9M的硬盘空间,兼顾考虑性能和存储空间,它完全可以用于开发嵌入式的GUI应用程序,且具有免费从网上获取源代码的优点。
要开发GTK应用程序,最先做的是当然是从网上下载一份源代码并安装。安装步骤如下:
-
从网上下载GTK源代码包,将其拷贝到开发平台的指定目录下。
-
进入Linux操作系统,打开终端应用程序,在控制台下切换当前目录至GTK的源代码包的目录下。
-
键入以下命令:
% gzip -cd gtk-1.2.10.tar.gz | tar xvf - # 在当前目录下解开源代码压缩包
% cd gtk-1.2.10 # 进入GTK源代码包的最高层目录
% ./configure # 产生Makefile文件
% make # 编译GTK源代码
(以下必要时必须切换到ROOT管理权限)
% rm -rf /install-prefix/include/gtk /install-prefix/include/gdk
# 删除旧版本的GTK(若有)
% make install # 进行安装
4、为加快图形程序开发的速度,还要安装glade1.2这个GTK开发的辅助工具,其源代码包可从相关网站下载。若用RedHat操作系统,可以通过选择软件组件来安装它。
GTK需要的支持库主要有GLIB图形底层函数库、GDK函数库及一些图形显示处理和数学库。前两者在GTK源代码中已经包含,其他的库一般的Linux系统内核均带有。
二、用GLADE解决GTK界面布局问题
在Linux下开发GUI应用程序不像在Windows下那样方便,因为它没有集成开发环境,要自己定好编译文件Makefile,就像开发DOS程序那样。又由于GUI的特点,必须定位显示在屏幕上控件的位置,而如果没有集成开发环境,光用程序定位就十分烦琐,因此必须借助第三方的开发工具。
glade是专为开发GTK应用程序而设计的辅助工具,虽然它不像Windows下的VB、VC++那样本身带有编译调试系统,但是对布局GTK的控件、调整界面的大小却十分有用,它可以生成界面布局的源代码。
Glade生成的源代码主要有main.c, interface.c, callbacks.c, support.c和相关的编译所需的文件如Makefile等,这些代码生成了整个应用程序的主要框架,其中main.c是主引导程序很简单,主要完成初始化的工作。interface.c是界面布局程序,support.c包含有一些必要的支持函数,callbacks.c是回调函数文件,也是整个应用程序的主体,glade只能生成相关的函数名,绝大部分靠人工手写,它完成了应用程序的主体功能。
用glade新建一个工程,布局好控件界面后,在控制台下切换到该工程所在的最高层目录,鍵入./autogen.sh即可生成Makefile,下次改程序时,只要在callbacks.c里面编辑即可,编辑完程序后切换到工程所在的src目录下,那里有一个Makefile文件,在命令行键入make命令便可以编译出可执行程序。也可以自己写Makefile,那样比glade自动生成的要简洁得多,根据嵌入式目标系统的特点,本文采用了后者这种方法。
三、 编写Makefile文件编译程序
程序写好后,要真正运行起来还有赖于编译系统的编译,而Makefile文件是不可缺少的一环。如今一般的软件工程都使用多文件的项目,它将完成功能类似的源代码集中到一个文件里,通过头文件及声明来相互联系。这样做的目的是减少编译的时间,不至于每次为了一个小小的改动而编译整个项目,同时维护和修改代码时也比较容易。
为了实现多文件项目的管理和编译,现在的Linux系统主要用的是GNU MAKE工具,由软件项目的Makefile文件来实现。编译程序时,GNU MAKE会读入其对应的Makefile文件,该文件主要是指定各个目标文件(常指执行程序、二进制模块和动静态库)是从哪些源代码文件(也称依靠文件)产生,用什么样的命令和规则来进行这个产生过程。有了相关的信息,Make工具就会检查硬盘上的文件,如果目的文件的时间戳比至少一个它的依靠文件旧的话,Make就会重新编译这个依靠文件以生成新的目标文件。Make默认找的文件名是Makefile,也可以在命令行指定别的文件名。关于Makefile文件的语法规则请参考相关文献[]。
由glade产生的Makefile文件太过繁杂,采用自编写的Makefile文件维护和升级都比较容易。对GTK+采用动态编译的方式,也可采用静态方式。如本嵌入式系统GTK要用到GDK_PIXBUF函数库就要用静态编译,因为嵌入式系统的C库版本太低。如要编译的目标文件名为initform,则Makefile文件内容如下所示:
#THE FOLLOWING IS MY MAKEFILE
CC = gcc
CFLAGS= -Wall -O3 -g
GTK_CONFIG_CFLAGS=`gtk-config --cflags` -I/usr/include/gdk-pixbuf-1.0/
GTK_CONFIG_LIBS= `gtk-config --libs` -Wl,-Bstatic -lgdk_pixbuf
initform: main.o support.o interface.o callbacks.o
$(CC) main.o support.o interface.o callbacks.o -o initform $(GTK_CONFIG_LIBS)
main.o: main.c support.h interface.h callbacks.h
$(CC) $(CFLAGS) -c main.c -o main.o $(GTK_CONFIG_CFLAGS)
support.o: support.c support.h
$(CC) $(CFLAGS) -c support.c -o support.o $(GTK_CONFIG_CFLAGS)
interface.o: interface.c interface.h support.h callbacks.h
$(CC) $(CFLAGS) -c interface.c -o interface.o $(GTK_CONFIG_CFLAGS)
callbacks.o: callbacks.c callbacks.h support.h interface.h
$(CC) $(CFLAGS) -c callbacks.c -o callbacks.o $(GTK_CONFIG_CFLAGS)
clean:
rm -f *.o initform
其中-Wl,-Bstatic是静态编译的选项,GTK用默认的配置程序gtk-config –libs 设置库和头文件的路径,它使用动态编译方式。生成Makefile文件后,在控制台下输入make命令,嵌入式的GUI应用程序就生成了。
参考文献
1 李善平,刘文峰,王焕龙. Linux与嵌入式系统. 清华大学出版社,2002
2 邹思轶. 嵌入式Linux设计与应用. 清华大学出版社,2002
3 王学龙. 嵌入式Linux系统设计与应用. 清华大学出版社,2001
4 于明俭,陈向明,方汉. Linux程序设计权威指南. 机械工业出版社,2001
5 联想软件超星空工作室. 精通Linux系统管理与应用开发技术. 清华大学出版社,2001
6 李主琛. Linux面向对象窗口高级编程. 科学出版社,20015
7 徐千洋. Linux 函数库参考手册. 中国青年出版社,200
8 吴向峰. GNOME/GTK+编程宝典. Arthur Griffith. 电子工业出版社,2000
Developing the Linux Embedded GUI Application using GTK
Luo XianQuan Shang ChaoXuan Gao Qin
(ordnance engineering college , shijiazhuang 050003)
Abstract: Human has come into the digital age along with the development of the digital information technology and the network technology. The embedded system based which has entered every side of people life including the science study, engineering design, military affairs, etc. Because the embedded system is more and more complex, developing embedded GUI application has being a trend. The article will study the technique of embedded GUI and the method to develop it using GTK in Linux.
Keywords: Embedded GUI GTK Linux
作者简介:罗贤全,男,1977年生,汉族,导航制导与控制专业硕士,主要研究方向:电子装备性能测试和故障诊断,联系电话:0311-7994633。
作者:罗贤全 尚朝轩 高勤 更新日期:2006-07-10
来源:autocontrol.com.cn
|