基于Linux操作系统的网络应用软件开发 联系客服

发布时间 : 星期日 文章基于Linux操作系统的网络应用软件开发更新完毕开始阅读b0c8b60b905f804d2b160b4e767f5acfa1c7837f

从宏观上给出软件的整体架构,这样才能保证软件设计工作有序进行,同时可以方便对软件进行维护和升级。

(一)系统硬件组成

本文的嵌入式Linux无线远程数据采集系统硬件结构如图2-1所示。

应用程序应用程序TCP/UDPIPTCP/UDPTQ2440IPPPP上位机GPRS网络InternetPPP 图2-1 系统结构图

嵌入式Linux数据采集终端使用天嵌科技的TQ2440开发板,这个开发板具备了丰富的外围设备,使用三星的S3C2440 ARM9芯片作为CPU,该芯片是现在嵌入式系统采用的主流芯片之一。数据传输通道通过GPRS接入Internet实现[3]。

(二)系统软件总体方案设计

本节详细说明系统各部分的软件组成。总体来看,软件的设计主要是为了更好的控制硬件并完成用户的需要,图2-2给出了硬件,内核和应用程序之间的关系。

4

应用程序系统调用接口内核空间内核子系统设备驱动程序硬件 图2-2 硬件,内核和应用程序的关系

1. 嵌入式Linux数据采集终端软件方案设计

嵌入式Linux数据采集终端的软件根据其与硬件相关的程度由深到浅

主要分为引导加载程序,Linux内核及应用软件。

引导加载程序是CPU上电后开始运行的第一段代码,这段代码初始化

硬件设备,建立内存映射表,为操作系统内核运行提供合适的软硬件环境。ARM平台上常用的引导加载程序有vivi和u-boot等,由于引导加载程序与硬件相关,目前硬件开发商一般都会提供相应的应到加载程序,本文采用天嵌科技提供的已移植好的u-boot作为引导加载程序[4]。

Linux系统内核构建的是否成功直接关系到嵌入式Linux系统能否正常

运行,因此,内核的构建在软件设计中占据着重要的地位。内核的构建主要包括Linux内核移植,文件系统构建和Linux设备驱动程序移植及开发。Linux内核移植应当着重考虑系统要求提供哪些功能,加入全部的内核功能,虽然可以保证系统更好的运行,适应各种应用场合的需要,但是它将使得内核变大,运行时占用内存空间增大,运行速度减慢;而加入的内核功能不全,很显然系统将无法满足需要。因此,对内核进行移植,必须清楚自己的系统需要哪些功能,并配置内核提供相应的功能。最好的方法是全面浏

5

览内核配置单,针对每一项内核提供的功能考虑系统是否需要,从而进行取舍[5]。

设备驱动程序关系到系统的硬件能否正常工作,它是内核的重要组成

部分。如果对于某个硬件资源,内核已经提供了它的驱动程序,直接对该驱动程序进行移植即可。对于其他一些硬件资源,若内核并未提供驱动程序,则需要自行编写。对设备驱动程序的移植与编写都应该遵循Linux驱动程序接口以及设备模型的规定,只有这样才能被内核识别。 2. 数据传输通道软件方案设计

所谓数据传输通道软件功能,指的是如何使数据传输通道两端的软件

实现数据传输。针对本文使用的GPRS网络,就是软件如何使嵌入式终端通过PPP拨号连入GPRS网络。由于刚构建的Linux操作系统只能完成操作系统最基本的功能,而其它功能的实现还需要移植相应的应用程序到嵌入式Linux操作系统当中[6]。对于PPP拨号,需要将ppp拨号程序移植到操作系统当中。

3. 上位机软件方案设计

上位机软件相比嵌入式数据采集终端要简单很多。上位机安装

Windows XP操作系统,已经具备了所有运行条件,只要为其编写相应的服务器程序即可。由于本文旨在设计一个方便多种应用环境使用的软件模型,应当考虑所设计的程序的通用性。上位机被设计为一个并发服务器。服务器应用程序的主要功能有:接受客户端的连接,获取客户端传来的数据并写入文件,分析数据并显示出错数据,向客户端发送命令,查询客户端运行状态等。除了接受客户端连接是属于主线程的任务,其他工作则都是隶属于某个客户端对应的线程的[7]。因此,有多少客户端连接在服务器上,服务器程序就有多少个线程在运行。

三 应用程序设计

(一) Qt简介

本节则重点介绍Qt的图形界面设计方法以及Qt所采用的通信机制,

6

这些设计方法以及通信机制将伴随应用程序开发的整个过程。 1.

Qt图形界面设计方法

Qt图形界面的设计方法主要有两种:利用Qt Creator通过代码设计及利用Qt Designe:进行可视化设计。两种方法各有利弊,Qt Creator使图形界面设计具有更强的可控性,使用户更方便的完成相应的设计;而Qt Designer为用户提供了更加快捷的图形界面设计方法,但无法对控件的全部特性进行操控。由于两种方式各有利弊,却又互相包含,本文采用两种方法相结合的方式进行设计,首先采用Qt Designer对图形界面做出设计,然后利用代码对其详细特性进行设定。 2.

Qt通信机制

Qt的通信机制常用的主要有两种[43]:信一号和槽以及事件。下面对两种机制进行说明。信号和槽机制是Qt编程的基础,可以说只要使用Qt进行编程,就不可避免的要使用信号和槽机制。它可以把互不相关的对象联系起来,实现了面向对象设计中对消息传递及响应的要求。槽是一个普通的函数,可以对其直接调用,也可将其与一个信号连接起来,用于对信号进行响应。通过下面的方式,将一个槽和信号关联起来: connect(sender, SIGNAL(signal), receiver, SLOT(slot));

其中的信号signal和槽slots在代码中由Qt的伪关键字signals和slots来标识。事件是由Qt窗口系统或者Qt自身产生的。一般情况下利用Qt进行编程不需要关注事件,因为Qt库中自带的控件已经将其转化为了信号,但当我们需要自定义控件,事件就变得非常有用了。在Qt中所有事件类都是 QEevent 类的子类,而事件就是对应事件类的一个实例。当一个事件发生时如图3-1所示,Qt首先调用QApplication::notify()发送一个事件,该事件被发送给qApp对象,该对象是一个应用程序中唯一一个QApplication类的对象,如果在该对象中注册了对应事件的事件过滤器,则事件一首先被发送到qApp对象的eventFilter()函数,如果该函数对事件进行了处理,事件将不再传递,否则,事件被传到该事件对应的对象的事件过滤器并执行该对象的eventFilter() ICI数,同样,如果该事件被处理,则不再下传,否则事件被传递到QObject::event()函数进

7