《基于嵌入式Linux的挪动终端的软件设计.docx》由会员分享,可在线阅读,更多相关《基于嵌入式Linux的挪动终端的软件设计.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于嵌入式Linux的挪动终端的软件设计dujing导语:本方案充分利用了嵌入式Linux平台所提供的系统功能,大大简化了应用程序的开发,并且具有良好的可扩展性。1引言实时操纵系统RTOS是嵌入式应用软件的根底和开发平台,应用程序都是建立在它之上。实时嵌入式操纵系统的种类繁多,大体上可分为两种:商用型和免费型。商用型的实时操纵系统功能稳定、可靠,有完善的技术支持和售后效劳,但价格昂贵。免费型的实时操纵系统在价格方面具有上风,目前主要有Linux、C/OS等。与其它嵌入式操纵系统相比,嵌入式Linux具有开放源代码、高可靠性以及强大的网络功能等上风,因此选用了嵌入式Linux系统作为挪动终端的软
2、件平台。2车辆监控系统概述车辆监控系统是融全球定位技术GPS、地理信息技术GIS和通用分组无线业务GPRS于一体的高科技系统,由挪动终端、GPRS网络和监控中心组成1。挪动终端安装在各个挪动车辆上,其上的GPS接收器实时收集卫星定位信息,然后通过串口1传送给ARM处理器。ARM处理器先解算出有用的数据经纬度、速度、状态等,然后按照TCP/UDP协议的格式封装成TCP/UDP数据包,接着加上IP报头和报尾封装成IP数据报。由于ARM处理器与Gtabletrtd/td/tr/tablePRS通讯模块之间的通讯遵循PPPPointtoPointProtocol,点对点协议,因此,需要将IP数据报按照
3、PPP帧的帧格式封装成PPP帧,然后传递给接在串口2上的GPRS通讯模块。GPRS通讯模块通过无线链路将数据进一步发送到SGSNServingGPRSSupportNode,GPRS业务支持节点。SGSN进展相应的协议转换,并按照GPRS特有的GTPGPRSTunnelProtocol,GPRS隧道协议将数据封装成GTP包,然后通过GPRS骨干网传送到相应的GGSNGatewayGPRSSupportNode,GPRS网关支持节点。GGSN也进展相应的协议转换,再根据外部数据网的协议格式对数据进展新的封装,并且根据其目的IP地址选择路由进展传送,进而最终传送到监控中心。监控中心在具有地理信息处
4、理和查询功能的电子地图上进展车辆运动轨迹的显示,并对被监控车辆的准确位置、速度、运动方向、行车状态等参数进展监控和查询。同时,监控中心也可以向挪动终端发送文本信息和控制命令。由此可见,挪动终端的核心功能是接收GPS信号、处理GPS数据以及通过GPRS网络与监控中心进展通讯包括向监控中心发送定位信息和接收监控中心的指令。3挪动终端软件系统的设计3.1总体设计在挪动终端上,软件系统主要由三个局部组成:GPS信号接收程序、GPS数据处理程序和GPRS通讯程序。在嵌入式Linux系统平台下,挪动终端的软件系统构造如图1所示。图1挪动终端的软件系统构造3.2GPS信号接收程序对于挪动终端,它的第一个任务
5、就是接收GPS信号。在嵌入式Linux系统平台下,GPS信号接收程序的层次构造如图2所示。图2GPS信号接收程序的层次构造其中,tty层、N_TTY行规程LineDiscipline层和低层驱动程序是嵌入式Linux系统中串行通讯驱动模块三个固有的逻辑层,这三层之间有互相调用的接口函数。嵌入式Linux系统提供了多种行规程供各类设备进展选择,如:TTY行规程N_TTY用于连接终端输入驱动设备和终端显示驱动设备,而PPP行规程N_PPP用来连接终端驱动设备和网络驱动设备。GPS信号接收程序使用了N_TTY行规程,GPS接收器接收到的数据必须经过N_TTY行规程模块进展标准处理。低层驱动程序用来直
6、接对硬件进展操纵,而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行规
7、程模块中的函数n_tty_receive_buf对数据进展标准化处理后将其存入tty缓冲区中,供给用层的GPS信号接收程序来读取。当应用层的GPS信号接收程序开场运行时,它会向文件系统发出读恳求,文件系统发现此恳求的对象为tty设备,于是调用函数tty_read,接着调用函数read_chan读取tty缓冲区中的数据。3.3GPS数据处理程序GPS接收器与嵌入式Linux平台之间的通讯协议有很多种,这里采用的通讯协议是NMEA-0183,它规定了GPS数据的输出速率为4,800波特,其输出都是ASCII字符,工作形式为8-N-1。通讯协议NMEA-0183中包含的语句有GPGGA、GPGLL、
8、GPGSA、GPGSV、GPRMC、GPVTG等,要想知道车辆的位置信息,至少要提取出GPGGA、GPGLL、GPRMC中的一种。NMEA-0183协议报文的语句格式如图3所示。图3NMEA0183的报文格式其中,$为串头,表示串的开场;AA为识别符;XXX为语句名;dddddd为数据字段,字母或者数字;表示串尾;hh表示$与之间所有tabletrtd/td/tr/table字符代码的校验和;为回车控制符;为换行控制符。在车辆监控系统中,主要关心的是时间、车辆的位置和速度等信息。因此,在挪动终端上,GPS数据处理程序的主要功能是从GPS接收器接收到的数据中提取出GPRMC定位语句,忽略掉其他信
9、息3。此后,挪动终端上的GPRS通讯程序负责将相关的数据发送给监控中心。3.4GPRS通讯程序3.4.1拨号到GPRS网络的根本原理挪动终端要想通过GPRS通讯模块访问Internet,首先得附着在GPRS网络上,然后提议PDPPacketDataProtocol,分组数据协议上下文激活经过4,如图4所示。只有通过此经过,GPRS通讯模块才能与GGSN建立一条逻辑通路,进而访问Internet。图4PDP上下文激活经过示意图3.4.2挪动终端上拨号程序的实现在嵌入式Linux系统平台下,挪动终端利用pppd包含chat拨号到GPRS网络。pppd是一个用户空间的后台效劳进程daemon,而ch
10、at是pppd所带一个辅助工具,用来与GPRS通讯模块建立会话。在PDP上下文激活经过中,chat完成了第步,而pppd完成了第、步。pppd拨号程序的层次构造如图5所示。图5pppd拨号程序的层次构造其中,N_PPP层就是PPP协议层。PPP协议模块不仅提供简单的数据链路层功能,它还提供诸如鉴权如PAP/CHAP,数据压缩/解压如CCP和数据加密/解密如ECP等扩展功能。由于GPRS通讯程序要求透明化地使用这些扩展功能,而PPP协议模块本身无法对各种策略进展选择,于是pppd应运而生。PPP协议模块中策略性的内容都移到了pppd中,由pppd完成对鉴权、压缩/解压和加密/解密等扩展功能的选用
11、。在运行pppd的时候,pppd首先读取配置文件中的配置信息,其中包含了设置PPP协议模块的参数、GPRS通讯模块连接的端口/dev/ttyS1以及对chat进展调用的语句,等等。随后pppd调用chat,chat也会读取相应的配置文件其中包含一些应答语句对和AT命令,然后使用默认的行规程N_TTY向GPRS通讯模块发送AT命令,接着chat将控制权返还给pppd。pppd将行规程切换为N_PPP,而pppd与PPP协议模块之间采用了设备文件来进展通讯,设备文件名是/dev/ppp。通过read系统调用,pppd可以读取PPP协议模块的数据包当然,PPP协议模块只会把应该由pppd处理的数据包
12、发给pppd。通过write系统调用,pppd可以把要发送的数据包传递给PPP协议模块,而通过ioctl系统调用,pppd可以设置PPP协议模块的参数,可以建立/关闭连接。此后,pppd执行了PDP上下文激活经过的第、步。等PDP上下文激活经过的第步与挪动终端不直接相关完成之后,pppd执行第步,在函数make_ppp_unit中调用ioctlPPPIOCNEWUNIT创立一个网络接口如ppp0。当PPP协议模块在处理PPPIOCNEWUNIT时,调用函数register_netdev向内核注册PPP网络接口,该网络接口的传输函数指向函数ppp_start_xmit。值得留意的一点是,假如关闭
13、进程pppd,行规程会由N_PPP切换回默认的N_TTY,因此,在挪动终端与监控中心通讯的经过中不能关闭pppd进程。至此,挪动终端完成了向GPRS网络的拨号,这样它就拥有了一个可以用于与监控中心进展通讯的网络接口如ppp0。3.4.3挪动终端与监控中心的数据交互前面,挪动终端已经与监控中心建立了网络链接。接下来,挪动终端就可以与监控中心进展通讯了。GPRS通讯程序的层次构造如图1的右半局部所示。在挪动终端向监控中心发送定位信息的经过中,挪动终端上的GPRS通讯程序通过socket接口发送TCP/IP数据包,内核根据IP地址和路由表,找到PPP网络接口,然后调用函数ppp_start_xmit
14、,此时控制权就转移到了PPP协议模块。函数ppp_start_xmit调用函数ppp_xmit_process去发送队列中的所tabletrtd/td/tr/table有数据包,而函数ppp_xmit_process会进一步调用函数ppp_send_frame去发送单个数据包。函数ppp_send_frame根据前面pppd对PPP协议模块的设置调用压缩等扩展功能之后,又经函数ppp_push调用函数pch-chan-ops-start_xmit发送数据包。函数pch-chan-ops-start_xmit是详细的传输方式,对于串口发送方式,那么是ppp_async.c:ppp_asynctt
15、y_open中注册的函数ppp_async_send,函数ppp_async_send经函数ppp_async_push调用函数tty-driver-write定义在低层驱动程序中把数据发送到串口2GPRS通讯模块接在串口2上。ppp_async.c在初始化时ppp_async_init,调用函数tty_register_ldisc向tty注册了行规程N_PPP的处理接口,也就是一组回调函数。在挪动终端接收监控中心指令的经过中,当GPRS通讯模块收到数据时,就会回调N_PPP行规程中的函数ppp_asynctty_receive来接收数据。函数ppp_asynctty_receive调用函数p
16、pp_async_input把数据buffer转换成sk_buff,并放入接收队列ap-rqueue中。ppp_async另外有一个taskletppp_async_process专门处理接收队列ap-rqueue中的数据包,ppp_async_process一直挂在接收队列ap-rqueue上,一旦被唤醒,它就调用函数ppp_input让PPP协议模块处理该数据包。在函数ppp_input中,数据被分成两路,一路是协议控制数据包,放入队列pch-file.rqb中,交给pppd处理。另外一路是用户数据包,经函数ppp_do_recv、ppp_receive_frame进展PPP协议相关的处理
17、后,再由函数netif_rx提交给上层的TCP/IP协议模块进展处理,最后经socket接口传递给应用层的GPRS通讯程序。4总结近几年,智能交通系统包括车辆监控系统开展非常迅速,因此,挪动终端将会有非常广泛的应用前景。随着市场需求的不断扩大,更加丰富的功能将会被集成到挪动终端上,而嵌入式Linux系统凭借其自身的上风将会被越来越多地应用到这个领域。本文作者创新点:本方案充分利用了嵌入式Linux平台所提供的系统功能,大大简化了应用程序的开发,并且具有良好的可扩展性。在具体介绍GPS信号的接收经过并给出一个简洁的GPS数据处理方法后,本文提供了一种实在可行的拨号到GPRS网络的方法,进而实现了挪动终端跨越GPRS网络与Internet上监控中心的通讯。参考文献:1李艳晴等基于GPRS/GPS的车辆监控系统的设计J微计算机信息,2004,20-4:39-402AlessandroRubini等LINUX设备驱动程序第三版M中国电力出版社20053成洁,路欣嵌入式Linux平台的GPS数据收集研究J江西理工大学学报,2006,vol.27,No.34刘旭,张其善一种基于GPRS的车辆监控系统J遥测遥控,2003,1,42-45