您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

基于嵌入式Linux 的移动终真个软件筹划

发布日期:2011-04-12

移动终端是车辆监控体系的告急构成部分,紧张用来汲取 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 信号汲取步调开始运行时,它会向文件体系发出读恳求,文件体系发明此恳求的东西为 tty 配置,于是调用函数 tty_read( ),接着调用函数 read_chan( ) 读取 tty 缓冲区中的数据。

  3.3 GPS 数据处理惩罚处罚步调

  GPS 汲取器与嵌入式 Linux 平台之间的通讯协议有很多种,这里采取的通讯协议是 NMEA-0183,它规定了 GPS 数据的输出速率为 4,800 波特,其输出都是 ASCII 字符,变乱模式为 8-N-1。通讯协议 NMEA-0183 中包括的语句有 GPGGA、GPGLL、GPGSA、GPGSV、GPRMC、GPVTG 等,要想知道车辆的位置信息,至少要提取出 GPGGA、GPGLL、GPRMC 中的一种。NMEA-0183 协议报文的语句格局如图 3 所示。


图 3    NMEA0183 的报文格局

  此中,$ 为串头,表现串的开始;AA 为辨认符;XXX 为语句名;ddd…ddd 为数据字段,字母或数字;* 表现串尾;hh 表现 $ 与 * 之间全部字符代码的校验和;< CR > 为回车控制符;< LF > 为换行控制符。

  在车辆监控体系中,紧张体贴的是时间、车辆的位置和速率等信息。因此,在移动终端上,GPS 数据处理惩罚处罚步调的紧张结果是从 GPS 汲取器汲取到的数据中提取出 GPRMC 定位语句,敷衍失其他信息[3]。以后,移动终端上的 GPRS 通讯步调认真将干系的数据发送给监控中间。

3.4   GPRS 通讯步调

  3.4.1 拨号到 GPRS 网络的基源头底子理

  移动终端要想通过 GPRS 通讯模块访问 Internet,起首得附着在 GPRS 网络上,然后提倡 PDP(Packet Data Protocol,分组数据协议)上下文激活进程[4],如图 4 所示。只有通过此进程,GPRS 通讯模块才华与 GGSN 创建一条逻辑通路,从而访问 Internet。


图 4    PDP 上下文激活进程表现图

  3.4.2 移动终端上拨号步调的实现

  在嵌入式 Linux 体系平台下,移动终端利用 pppd(包括 chat)拨号到 GPRS 网络。pppd 是一个用户空间的背景办事进程(daemon),而 chat 是 pppd 所带一个资助东西,用来与 GPRS 通讯模块创建会话。在 PDP 上下文激活进程中,chat 完成了第 ① 步,而 pppd 完成了第 ②、③、④、⑩ 步。pppd 拨号步调的层次布局如图 5 所示。


图 5 pppd 拨号步调的层次布局

  此中,N_PPP 层便是 PPP 协议层。PPP 协议模块不但提供大抵的数据链路层结果,它还提供诸如鉴权(如PAP/CHAP),数据压缩/解压(如CCP)和数据加密/解密(如ECP)等扩展结果。由于 GPRS 通讯步调恳求透明化地利用这些扩展结果,而 PPP 协议模块本身无法对种种战略举行选择,于是 pppd 应运而生。PPP 协议模块中战略性的内容都移到了 pppd 中,由 pppd 完成对鉴权、压缩/解压和加密/解密等扩展结果的选用。

  在运行 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 处理惩罚处罚的数据包发给 pppd)。通过 write 体系调用,pppd 可以把要发送的数据包转达给 PPP 协议模块,而通过 ioctl 体系调用,pppd 可以设置 PPP 协议模块的参数,可以创建/封闭连接。

  以后,pppd 实行了 PDP 上下文激活进程的第 ②、③、④ 步。等 PDP 上下文激活进程的第 ⑤-⑨ 步(与移动终端不直接干系)完成之后,pppd 实行第 ⑩ 步,在函数 make_ppp_unit( ) 中调用 ioctl(PPPIOCNEWUNIT) 创建一个网络接口(如ppp0)。当 PPP 协议模块在处理惩罚处罚 PPPIOCNEWUNIT 时,调用函数 register_netdev( ) 向内核注册 PPP 网络接口,该网络接口的传输函数指向函数 ppp_start_xmit( )。值得过细的一点是,要是封闭进程 pppd,行规程会由 N_PPP 切换回默认的 N_TTY,因此,在移动终端与监控中间通讯的进程中不克不及封闭 pppd 进程。

  至此,移动终端完成了向 GPRS 网络的拨号,如许它就拥有了一个可以用于与监控中间举行通讯的网络接口(如ppp0)。

  3.4.3 移动终端与监控中间的数据交互

  前面,移动终端已经与监控中间创建了网络链接。接下来,移动终端就可以与监控中间举行通讯了。GPRS 通讯步调的层次布局如图 1 的右半部分所示。

  在移动终端向监控中间发送定位信息的进程中,移动终端上的 GPRS 通讯步调通过 socket 接口发送 TCP/IP 数据包,内核根据 IP 地点和路由表,找到 PPP 网络接口,然后调用函数 ppp_start_xmit( ),此时控制权就转移到了 PPP 协议模块。函数 ppp_start_xmit( ) 调用函数 ppp_xmit_process( ) 去发送行列步队中的全部数据包,而函数 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_asynctty_open 中注册的函数 ppp_async_send( ),函数 ppp_async_send( ) 经函数 ppp_async_push( ) 调用函数 tty->driver->write( )(定义在低层驱动步调中)把数据发送到串口 2(GPRS 通讯模块接在串口 2 上)。

  ppp_async.c 在初始化时(ppp_async_init),调用函数 tty_register_ldisc( ) 向 tty 注册了行规程 N_PPP 的处理惩罚处罚接口,也便是一组回调函数。在移动终端汲取监控中间指令的进程中,当 GPRS 通讯模块收到数据时,就会回调 N_PPP 行规程中的函数 ppp_asynctty_receive( ) 来汲取数据。函数 ppp_asynctty_receive( ) 调用函数 ppp_async_input( ) 把数据 buffer 转换成 sk_buff,并放入汲取行列步队 ap->rqueue 中。ppp_async 别的有一个 tasklet(ppp_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 协议干系的处理惩罚处罚后,再由函数 netif_rx( ) 提交给上层的 TCP/IP 协议模块举行处理惩罚处罚,着末经 socket 接口转达给应用层的 GPRS 通讯步调。

  4   总结

  近几年,智能交通体系(包括车辆监控体系)生长非常敏捷,因此,移动终端将会有非常广泛的应用远景。随着市场需求的不绝扩大,越发丰富的结果将会被集成到移动终端上,而嵌入式 Linux 体系依附其自身的上风将会被越来越多地应用到这个范畴。

  本文作者创新点:本方案充分利用了嵌入式 Linux 平台所提供的体系结果,大大简化了应用步调的开辟,并且具有精良的可扩展性。在过细先容 GPS 信号的汲取进程并给出一个简便的 GPS 数据处理惩罚处罚步调后,本文提供了一种确切可行的拨号到 GPRS 网络的要领,从而实现了移动终端高出 GPRS 网络与 Internet 上监控中间的通讯。

  参考文献:

  [1]    李艳晴等.基于 GPRS/GPS 的车辆监控体系的筹划[J].微谋略机信息,2004,20-4:39-40.

  [2]      Alessandro Rubini等.LINUX 配置驱动步调(第三版)[M].中国电力出版社.2005.

  [3]      成洁,路欣.嵌入式Linux平台的GPS数据征求研究[J].江西理工大学学报,2006,vol.27,No.3.

  [4]      刘旭,张其善.一种基于 GPRS 的车辆监控体系[J].遥测遥控,2003,1,42-45.