2011年(96)
分类:
2011-05-24 10:58:38
摘要:移动终端是车辆监控系统的重要组成部分,主要用来接收GPS信号并对其进行处理,然后通过GPRS网络发送给监控中心。本文先容了一种嵌进式Linux系统平台下,移动终端软件的设计方案及其相关实现。
关键词:移动终端;嵌进式Linux;全球定位系统;通用分组无线业务;车辆监控系统
1 引言
实时操纵系统(RTOS)是嵌进式应用软件的基础和开发平台,应用程序都是建立在它之上。实时嵌进式操纵系统的种类繁多,大体上可分为两种:商用型和免费型。商用型的实时操纵系统功能稳定、可靠,有完善的技术支持和售后服务,但价格昂贵。免费型的实时操纵系统在价格方面具有上风,目前主要有 Linux、μC/OS 等。
与其它嵌进式操纵系统相比,嵌进式 Linux 具有开放源代码、高可靠性以及强大的网络功能等上风,因此选用了嵌进式 Linux 系统作为移动终真个软件平台。
2 车辆监控系统概述
车辆监控系统是融全球定位技术(GPS)、地理信息技术(GIS)和通用分组无线业务(GPRS)于一体的高科技系统,由移动终端、GPRS 网络和监控中心组成[1]。移动终端安装在各个移动车辆上,其上的 GPS 接收器实时采集卫星定位信息,然后通过串口 1 传送给 ARM 处理器。ARM 处理器先解算出有用的数据(经纬度、速度、状态等),然后按照 TCP/UDP 协议的格式封装成 TCP/UDP 数据包,接着加上 IP 报头和报尾封装成 IP 数据报。由于 ARM 处理器与 GPRS 通讯模块之间的通讯遵循 PPP(Point to Point Protocol,点对点协议),因而,需要将 IP 数据报按照 PPP 帧的帧格式封装成 PPP 帧,然后传递给接在串口 2 上的 GPRS 通讯模块。GPRS 通讯模块通过无线链路将数据进一步发送到 SGSN(Serving GPRS Support Node,GPRS 业务支持节点)。SGSN 进行相应的协议转换,并按照 GPRS 特有的 GTP(GPRS Tunnel Protocol,GPRS 隧道协议)将数据封装成 GTP 包,然后通过 GPRS 骨干网传送到相应的 GGSN(Gateway GPRS Support Node,GPRS 网关支持节点)。GGSN 也进行相应的协议转换,再根据外部数据网的协议格式对数据进行新的封装,并且根据其目的 IP 地址选择路由进行传送,从而终极传送到监控中心。监控中心在具有地理信息处理和查询功能的电子舆图上进行车辆运动轨迹的显示,并对被监控车辆的正确位置、速度、运动方向、行车状态等参数进行监控和查询。同时,监控中心也可以向移动终端发送文本信息和控制命令。
由此可见,移动终真个核心功能是接收 GPS 信号、处理 GPS 数据以及通过 GPRS 网络与监控中心进行通讯(包括向监控中心发送定位信息和接收监控中心的指令)。
3 移动终端软件系统的设计
3.1 总体设计
在移动终端上,软件系统主要由三个部分组成:GPS 信号接收程序、GPS 数据处理程序和 GPRS 通讯程序。在嵌进式 Linux 系统平台下,移动终真个软件系统结构如图 1 所示。
图 1 移动终真个软件系统结构
图 2 GPS 信号接收程序的层次结构
3.2 GPS 信号接收程序
对于移动终端,它的第一个任务就是接收 GPS 信号。在嵌进式 Linux 系统平台下,GPS 信号接收程序的层次结构如图 2 所示。
其中,tty 层、N_TTY 行规程(Line Discipline)层和低层驱动程序是嵌进式 Linux 系统中串行通讯驱动模块三个固有的逻辑层,这三层之间有相互调用的接口函数。嵌进式 Linux 系统提供了多种行规程供各类设备进行选择,如:TTY 行规程(N_TTY)用于连接终端输进驱动设备和终端显示驱动设备,而 PPP 行规程(N_PPP)用来连接终端驱动设备和网络驱动设备。GPS 信号接收程序使用了 N_TTY 行规程,GPS 接收器接收到的数据必须经过 N_TTY 行规程模块进行规范处理。低层驱动程序用来直接对硬件进行操纵,而 flip_buffer 是低层驱动程序和 N_TTY 行规程之间的高速接口,它保存 GPS 接收器接收到的数据。
在嵌进式 Linux 系统中,内核给接在串口 1 上的 GPS 接收器提供了一个设备节点 /dev/ttyS0 以及标准的文件系统接口[2]。这样,GPS 信号接收程序对设备节点 /dev/ttyS0 的操纵就会被内核映射成对 GPS 接收器的操纵。当 GPS 接收器接收到卫星信号时,会触发低层驱动程序事先注册到系统中的中断处理函数,从而调用函数 receive_chars( ) 把数据填充到 flip_buffer 中,然后调用函数 tty_flip_buffer_push( ) 将数据传递给 N_TTY 行规程模块。N_TTY 行规程模块中的函数 n_tty_receive_buf( ) 对数据进行规范化处理后将其存进 tty 缓冲区中,供给用层的 GPS 信号接收程序来读取。
当应用层的 GPS 信号接收程序开始运行
匀唀倀?????倀????倀????????蝎??????潏???ⅹ??爰概????塦????????倀????倀????????蝎??桎蒈靶????鞋??皈?靎?橓?葒?潏??倀????倀????????蝎葥???層累慛????偒?地卛??﹏???????癓??蝎?潏???倀????倀?????轺?骋葛???潏???幖??‰?獜?豼??檐???????倀????倀???????????????????????????灑?????????????倀????倀?????蝎葥并??驑虛?獧???灑艥啙?屝葏?艾??????灑鑥??轺????く??????扷?????豗癔荑???扖???N???睎卑葏鍶???卙?华???倀????倀????????????????缀??????????????????豈慛蒌?灑?????????????倀????倀?匀?????灑??翿?卵?????蝎???葢???豈慛斌????????焀????偒?地卛??﹏???豗?醐?犌羂浧?漏慛???倀????倀??謀艏??????爀攀愀琀攀倀攀渀ā‰?爀攀愀琀攀倀攀渀?渀搀椀爀攀挀琀??砀琀?爀攀愀琀攀倀攀渀?灑??驣?鮏祎腲敟??z??醐????鮏?灑??V??醐??葻???脰羉???????腜?卵攀氀攀挀琀伀戀樀攀挀琀?????????蕙???????啎??羐???????????術??蕙??葎?????盿?摮??糧慛??摮??糧慛??腟蒉?????驻?恎?虵??蒑蕶塑穛????倀????倀??搀蚖????????豈慛??蹵??歺敘????著???地卛??﹏?????萀癶荑[魎?扥???倀???????????蠀潭??????????倀?愀氀椀最渀?氀攀昀琀???????葵衶潭?腎?????讕?衎潭?估??表潭??骁?衎潭?????????????????????潎???????????????????ā???貕?????摵???掠鑛葞????罓??袕潭???蒕?????????讕??刺???桸麗??讕????????捓湫葸??袕潭???袕潭?衾潭????肐卟???靰???匀??伀??表潭????獧???葵?肐衟潭??葒佶??表潭??腎?兦?譾??????葠?鑔衞潭?????不卛??愀?儰????????衷潭?葻?鑔衞潭?估??表潭`??ゐ?躍??靾?幓?葠靶???靏?癓?N膗黎?k祎侘??表潭??????鵓湏靣??灑葥睶卑幏?驠???袈潭?鑔???倀????倀?愀氀椀最渀?氀攀昀琀??唀???衵潭煠????諿?扎?鮏衎潭???W?衎潭????????鮏衎潭??驔?桥豖??衵潭`睎?敥鑑??轺衞潭????鐰??轺衞潭???幦蹜ю?鑎??轺??葧?????????驦?桥衖潭豠??衵潭?奏?????ぶ鑒??轺??豴??癧荑衛潭??衢?ю???唀??幜蹜N?祎驲鑛??轺葞衶潭?敥?钋??轺葞衶潭??????鑔??轺???鮏衎潭?盿?荜?????鑶葞靶??灑???倀????倀??唀???魧衎潭?????鑾??轺葞靶??灑?????荜??敥け鑒??轺??????葨衶潭??幎銗?袖潭????廿銗?袖潭??鮐?煎??鞋?葓衶潭?細???灙补潭???唀?????鑏??轺彞??????葝衶潭癠?癜?敒け鑒??轺??????倀????倀?
进目标目录的include和lib中,用以支持mde中程序在ARM下的交叉编译。
然后执行./autogen.sh,重新天生configure脚本,使用上面配置的脚本然后执行make命令,即可完成实例程序的编译。
4拷贝MiniGUI资源到开发板
编译完MiniGUI和实例程序之后,需要把MiniGUI库、资源和应用程序拷贝到为目标机器预备的文件系统目录中,然后天生文件系统映像,再下载到目标板上运行。可以通过串口、USB口或以太网口将文件系统映像下载到目标机器中。在执行程序之前,还有一件重要的事情要做,就是在开发板上的Linux中配置好MiniGUI的运行环境。
5板载Linux的环境配置
MiniGUI可以使用多种图形引擎进行图像显示,有qvfb、SVGALib、LibGGI等等,当然也可以自己编写一个图形引擎供MiniGUI使用。这里我们使用qvfb来作为MiniGUI的图形引擎进行图像显示。qvfb(vitural framebuffer)是在宿主机上模拟帧缓冲的,它是X Window用来运行和测试应用程序的系统程序,使用了共享存储区域(虚拟的帧缓冲)来模拟帧缓冲并且在一个窗口中模拟一个应用来显示帧缓冲。
首先对qvfb进行安装,可以从这里下载(
-1.0.tar.gz),下载下来后进行解压:tar zxf qvfb-1.0.tar.gz并进进到qvfb-1.0目录,执行./configure脚本后即可用make和make install命令进行编译安装。
更改MiniGUI的配置文件MiniGUI.cfg设置设备驱动程序,设置显示区域及字体等内容。修改/usr/local/etc目录下的配置文件MiniGUI.cfg,将其中的驱动引擎gal_engine和ial_engine设置为qvfb,再将其中qvfb的defaultmode设置为合适的显示模式。然后把qvfb加到可执行路径中往,执行vi .bashrc命令,在 .bashrc最后面加上export PATH=/usr/local/arm/2.95.3/bin -:$PATH,保存退出后用source .bashrc命令执行一下即可。
在X Window中,打开一个终端仿真程序,执行qvfb 命令。在qvfb中选中File Configure,将qvfb设置成嵌进式开发系统的液晶屏的大小。公道设置MiniGUI的配置文件后,接着就可以运行MiniGUI应用程序了。
执行应用程序顺利的话,屏幕上可以看到程序的运行界面。至此,MiniGUI已经成功移植到目标系统上。此后,我们可以根据需要,继续修改MiniGUI库函数及各种资源,并且编写自己的应用程序,使图形用户界面更加完善。
6结束语
随着嵌进式产品应用领域的日益增长,开发出优秀的人机交互界面,是嵌进式发展的趋势,拥有广阔的市场远景。MiniGUI可以稳定可靠的运行在Linux系统下,通过上述具体的移植和后续的MiniGUI下嵌进式软件的开发过程,能快速构建一个嵌进式可视化软件系统,相信这种嵌进式系统将会得到越来越多的应用。
本文作者创新点:成功实现了图形用户界面MiniGUI的移植开发和对开发板H2410EB的支持,这也适用于其他多种开发板,完成了构建嵌进式图形界面系统的前期工作。
参考文献:
[1] 北京飞漫软件.MiniGUI用户手册.
[2] Beijing Feynman Software Technology Co. Ltd.
[3] 北京恒颐高科技术有限公司. H2410EB用户手册.
[4] 方宁,马忠梅.MiniGUI在AT91RM9200开发板上的移植[J].单片机与嵌进式系统应用,2004(8):75-77.
[5] 李善平,刘文峰,王焕龙等.Linux与嵌进式系统[M].北京:清华大学出版社,2003.
[6] 陈雷,钟书毅等译. 嵌进式Linux-硬件、软件与接口[M].北京:电子产业出版社,2003.
[7] 王文启,韩秀玲,孙波. 基于MiniGUI的多进程图形用户界面的研究[J].微计算机信息,2007,8(3-2):78-80.
* 基金项目:国家863项目,编号为2003AA430200
(
给主人留下些什么吧!~~
|