当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于嵌入式Linux 的移动终端的软件设计

 引言

  实时操作系统(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 通信程序负责将相关的数据发送给监控中心。[!--empirenews.page--]


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 上监控中心的通信。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

摘要:随着农业生产中对水资源利用率重视程度的不断提升,农业用水的灌溉效率与灌溉渗漏系数测定准确化与规范化越来越重要。为实现渠道水位测量的精确化与自动化,研制开发出一种基于GPRS的渠道水位监测系统。对投入式压力水位检测方...

关键字: GPRS 水位监测 上位机设计

近日,信通院公布的移动终端行业数据表明,2022年上半年国内智能手机出货量为1.34亿部,同比下降了21.7%,这个数据成为了7年以来最低数据。而小米等一些手机厂商逐步进入新能源汽车领域,一定程度上表明了移动终端市场的低...

关键字: 手机 新能源汽车 移动终端

GPS和GPRS,字面上仅仅多了个G,按照中国人捂住一半,读一半的猜字逻辑来看,这两者区别应该是不多的,GPS模块能做的,GPRS模块应该也能干,这显然是个美丽的误会。

关键字: GPS GPRS 通信

摘要:在工业领域供配电设计过程中,设计一次接线图时,每台配电柜安装几个供电回路、安装哪些供电回路需要花费较多精力来确定。对此,编制一款软件自动计算各回路断路器宽度,模拟断路器置入配电柜,最终算出总共需要的GGD配电柜数量...

关键字: GGD配电柜 断路器排列 软件设计

摘要:近年来,越来越多的智能锁控系统应用于电力系统中,有效提升了电力系统在设备安全方面的管理水平,提高了工作效率。但当前所采用的智能锁控系统并没有针对智能钥匙的远程授权问题提供一个安全高效的解决方案。现介绍一种移动终端远...

关键字: 智能锁控 移动终端 远程授权

摘要:随着农业生产中对水资源利用率重视程度的不断提升,农业用水的灌溉效率与灌溉渗漏系数测定准确化与规范化越来越重要。为实现渠道水位测量的精确化与自动化,研制开发出一种基于GPRS的渠道水位监测系统。对投入式压力水位检测方...

关键字: GPRS 水位监测 上位机设计

摘要:随着工业自动化行业科技水平的提升,大量先进的仪器及设备得到广泛应用,使污水处理厂的工作效率大大提升,但大量污水处理仪器和设备的使用也给日常设备管理带来了麻烦,据此设计了一种基于Android平台的污水处理设备监控系...

关键字: 设备监控 Android平台 移动终端

摘要:根据四旋翼飞行器工作原理,以STM32控制器为基础,对四旋翼飞行器飞行控制系统的软硬件设计进行了分析,可有效调整四旋翼飞行器飞行姿态与飞行位置,实现了控制模块与地面站的有效联系。

关键字: STM32 控制系统 软件设计

摘要:针对目前城市道路井盖安全存在的问题,提出了一种基于ZigBee组网技术监测井盖破损或移位以及丢失的实时监测系统,其由井盖数据采集系统和上位机监测系统两部分构成。井盖数据采集系统由多个ZigBee节点构成,同一个Zi...

关键字: 井盖管理 Zigbee GPRS 实时监测

摘 要:设计一种运行在嵌入式Linux平台下的智能家居控制系统的实现方案,该系统采用ARM9微处理器S3C2440作 为主处理器,通过传感器模块对温度、湿度、烟雾信息等进行检测;通辻USB接口的摄像头采集视频信息,采用J...

关键字: S3C2440 Linux 传感器 GPRS 远程监控

嵌入式教程

6897 篇文章

关注

发布文章

编辑精选

技术子站

关闭