综合资讯 在线阅读 原文阅读 在线商城 下载专区 DATASHEET 技术论坛 商务频道

嵌入式系统  单片机  D S P  EDA/PLD  接口电路  存储技术  显示光电  电源技术
传感/控制  模拟技术  通信网络  无线通信  电测仪表  消费电子  汽车电子

所在的位置:首页技术文章嵌入式系统正文
 
用GTK开发Linux嵌入式GUI应用程序
发布日期:2005-06-27 作者:罗贤全 尚朝轩 高勤 来源:微计算机信息

    随着数字信息技术和网络技术的发展,人们已经进入数码时代。建立在它们基础之上的嵌入式系统已经广泛地渗透到科学研究、工程设计、军事技术以及人们的日常生活等方方面面。由于嵌入式系统越来越复杂、功能也越来越多,开发嵌入式的GUI应用程序已经成为一种必然的趋势。本文将讨论开发嵌入式GUI的技巧和用GTK工具开发Linux嵌入式GUI应用程序的方法和步骤。

关键词   嵌入式   GUI   GTK   Linux

在很早以前,有类似嵌入式GUI的应用程序出现,不过它们都十分简单,只可称之为嵌入式GUI的雏形。近几年来,随着数字电子技术与网络技术的发展,面向嵌入式的硬件种类越来越多,性能越来越好,同时人们对嵌入式系统的要求也越来越高,于是开发嵌入式GUI应用程序成为嵌入式系统的一个必然发要求。

引用一个概念,所谓GUI(Graphics User Interface)即图形用户界面。其广泛流行是当今计算机技术的重大成就之一,它极大地方便用户的使用,人们可以不再像在DOS时代那样要记一大堆枯燥的指令来操作计算机,而只要通过鼠标轻点几下,就可以完成大部分工作。如今大部分GUI都是指在PC机上工作的,可它们并适合用于嵌入式系统。由于嵌入资源有严格的限制,它对GUI也有特殊的要求。

一、用GTK开发嵌入式GUI应用程序

       GTKGIMP Toolkit的缩写,是目前编写图形界面比较流行的高层函数库之一。Linux的主流桌面系统之一的GNOME就是用GTK开发出来的。GTK本是在通用PC机上使用,不是专为嵌入式系统开发的。但由于它的模块化设计和全C编写的特性,兼容性好,运行稳定,且它的库也比较小,GTK加上X服务器仅占用2.9M的硬盘空间,兼顾考虑性能和存储空间,它完全可以用于开发嵌入式的GUI应用程序,且具有免费从网上获取源代码的优点。

       要开发GTK应用程序,最先做的是当然是从网上下载一份源代码并安装。安装步骤如下:

1、  从民网上下载GTK源代码包,将其拷贝到开发平台的指定目录下。

2、  进入Linux操作系统,打开终端应用程序,在控制台下切换当前目录至GTK的源代码包的目录下。

3、  键入以下命令:

% 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下的VBVC++那样本身带有编译调试系统,但是对布局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


 (全文结束)

信息发布:   转引自: 【 】 【打印】 【关闭
 相 关 文 章
多路嵌入式H.264视频服务器的设计 (03-26)
一种远程网络摄像机系统的设计与实现 (03-26)
ZigBee车辆自动识别系统的设计 (03-26)
基于GSM技术的远程监控系统 (03-26)
公共汽车实时显示及定位系统的研究 (昨天)
数字化幅度调制电路的实现 (03-26)
嵌入式Linux实时技术改进与实现 (03-26)
基于多传感器数据融合的智能机器人设计 (03-26)
基于单片机智能机器人控制系统研究设计 (03-26)
基于嵌入式Linux的短信收发系统设计 (03-26)
基于嵌入式控制器的远程监控系统的开发 (03-26)
基于微处理器的车流量数据的检测与分析 (03-26)
基于CAN总线的温度检测节点设计 (昨天)
基于嵌入式微处理器的张力控制器 (03-26)
电流/压力传感器的记录校正方法 (昨天)
画中画技术在车载娱乐系统中的应用 (昨天)
WiMAX接收链使用集成旁路开关低噪声放大器的优势 (昨天)
用于工业自动化的灵活I/O连接器 (昨天)
实现高效HVAC的电源转换器 (昨天)
AVS-M与H.264(Baseline)视频解码器结构的分析 (昨天)
Linux PC和51系列单片机串行通信的设计 (11-29)
CAN通信卡的Linux设备驱动程序设计实现 (11-30)
Clinux在MIPS上的移植 (12-12)
基于Linux的TCP/IP协议栈安全性研究 (11-25)
基于嵌入式Linux的图像采集系统的设计与实现 (12-12)
uClinux 平台下的Flash存储技术 (11-30)
基于UCL INUX的嵌入工式系统设计 (11-16)
基于EP7312的新型嵌入式系统的实现 (11-13)
一个嵌入式系统的启动分析 (11-11)
定制嵌入式Linux系统的启动程序 (11-13)
基于ARM-Linux的SQLite嵌入式数据库技术 (12-12)
Linux操作系统实时性分析及改进策略 (11-21)
基于ARM和Ethernet的现场实时信号采集分析系统 (11-21)
ARM嵌入式系统软件实时时钟的设计 (11-21)
基于嵌入式WEB的网络视频监控系统的设计与实现 (02-15)
用动作识别控制GUI输入的研究及其实现 (12-12)
嵌入式Linux系统GUI设计分析 (09-18)
MiniGUI在车载导航终端中的应用 (06-16)
MiniGUI:跨操作系统的嵌入式图形支持系统 (04-25)
嵌入式Linux的MiniGUI研究和移植 (01-04)
基于ARM微处理器的uC/OS-II的移植研究 (09-23)
嵌入式系统的图形用户界面设计研究 (09-29)
Linux下的UDP协议编程 (01-06)
在多处理器及多刀片式环境中用Linux和OSE实现实时性能和高可用性 (01-03)
Linux 2.6 内核的嵌入式系统应用 (03-16)
基于ARM与μClinux的RTU设计 (04-03)
μClinux下基于MiniGUI的监控终端的实现 (10-11)
μC/OS的应用和扩展 (12-17)
关于我们 ┋ 友情链接


深圳市福田区海滨广场恒福花园恒华阁11F
电话:0755-88305872 传真:0755-88305880
Copyright©2005-2007 无忧电子开发网版权所有

粤ICP备05064233号