📄 基于嵌入式linux的移动终端的软件设计.htm
字号:
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_L_Summary>实时操作系统(RTOS)是嵌入式应用软件的基础和开发平台,应用程序都是建立在它之上。实时嵌入式操作系统的种类繁多,大体上可分为两种:商用型和免费型。商用型的实时操作系统功能稳定、可靠,有完善的技术支持和售后服务,但价格昂贵。免费型的实时操作系统在价格方面具有优势,目前主要有
Linux、μC/OS 等。</SPAN></DIV>
<DIV class=clear></DIV>
<DIV class=Adetail_content>区中,供应用层的 GPS 信号接收程序来读取。
<P></P>
<P><BR> 当应用层的 GPS 信号接收程序开始运行时,它会向文件系统发出读请求,文件系统发现此请求的对象为 tty 设备,于是调用函数
tty_read( ),接着调用函数 read_chan( ) 读取 tty 缓冲区中的数据。</P>
<P> <STRONG>3.3 GPS 数据处理程序</STRONG></P>
<P> 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 所示。</P>
<P align=center><IMG title="图 3 NMEA0183 的报文格式"
src="基于嵌入式Linux的移动终端的软件设计.files/233.jpg"></P>
<P align=center>图 3 NMEA0183 的报文格式</P>
<P> 其中,$ 为串头,表示串的开始;AA 为识别符;XXX 为语句名;ddd…ddd 为数据字段,字母或数字;* 表示串尾;hh 表示 $ 与 *
之间所有
<TABLE align=left>
<TBODY>
<TR>
<TD id=Adimg></TD></TR></TBODY></TABLE>字符代码的校验和;< CR > 为回车控制符;< LF >
为换行控制符。</P>
<P> 在车辆监控系统中,主要关心的是时间、车辆的位置和速度等信息。因此,在移动终端上,GPS 数据处理程序的主要功能是从 GPS 接收器接收到的数据中提取出
GPRMC 定位语句,忽略掉其他信息[3]。此后,移动终端上的 GPRS 通信程序负责将相关的数据发送给监控中心。</P>
<P> <STRONG> 3.4 GPRS 通信程序</STRONG></P>
<P> <STRONG>3.4.1 拨号到 GPRS 网络的基本原理</STRONG></P>
<P> 移动终端要想通过 GPRS 通信模块访问 Internet,首先得附着在 GPRS 网络上,然后发起 PDP(Packet Data
Protocol,分组数据协议)上下文激活过程[4],如图 4 所示。只有通过此过程,GPRS 通信模块才能与 GGSN 建立一条逻辑通路,从而访问
Internet。</P>
<P align=center><IMG title="图 4 PDP 上下文激活过程示意图"
src="基于嵌入式Linux的移动终端的软件设计.files/234.jpg"></P>
<P align=center>图 4 PDP 上下文激活过程示意图</P>
<P> <STRONG>3.4.2 移动终端上拨号程序的实现</STRONG></P>
<P> 在嵌入式 Linux 系统平台下,移动终端利用 pppd(包含 chat)拨号到 GPRS 网络。pppd
是一个用户空间的后台服务进程(daemon),而 chat 是 pppd 所带一个辅助工具,用来与 GPRS 通信模块建立会话。在 PDP
上下文激活过程中,chat 完成了第 ① 步,而 pppd 完成了第 ②、③、④、⑩ 步。pppd 拨号程序的层次结构如图 5 所示。</P>
<P align=center><IMG title="图 5 pppd 拨号程序的层次结构"
src="基于嵌入式Linux的移动终端的软件设计.files/235.jpg"></P>
<P align=center>图 5 pppd 拨号程序的层次结构</P>
<P> 其中,N_PPP 层就是 PPP 协议层。PPP
协议模块不仅提供简单的数据链路层功能,它还提供诸如鉴权(如PAP/CHAP),数据压缩/解压(如CCP)和数据加密/解密(如ECP)等扩展功能。由于 GPRS
通信程序要求透明化地使用这些扩展功能,而 PPP 协议模块本身无法对各种策略进行选择,于是 pppd 应运而生。PPP 协议模块中策略性的内容都移到了 pppd
中,由 pppd 完成对鉴权、压缩/解压和加密/解密等扩展功能的选用。</P>
<P> 在运行 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
协议模块的参数,可以建立/关闭连接。</P>
<P> 此后,pppd 执行了 PDP 上下文激活过程的第 ②、③、④ 步。等 PDP 上下文激活过程的第 ⑤-⑨
步(与移动终端不直接相关)完成之后,pppd 执行第 ⑩ 步,在函数 make_ppp_unit( ) 中调用 ioctl(PPPIOCNEWUNIT)
创建一个网络接口(如ppp0)。当 PPP 协议模块在处理 PPPIOCNEWUNIT 时,调用函数 r<!-- 2008-10-7 9:03:59-->
</P></DIV>
<UL class=art_Dfy>
<LI class=L>
<DIV id=PageNum><LABEL><A
href="http://article.cechina.cn/2008-10/2008107090358.htm">上一页</A></LABEL>【<A
href="http://article.cechina.cn/2008-10/2008107090358.htm">1</A>】【<SPAN>2</SPAN>】【<A
href="http://article.cechina.cn/2008-10/20081070903582.htm">3</A>】【<A
href="http://article.cechina.cn/2008-10/20081070903583.htm">4</A>】<LABEL><A
href="http://article.cechina.cn/2008-10/20081070903582.htm">下一页</A></LABEL></DIV>
<LI class=R>[<A href="javascript:window.close();">关闭</A>] [<A
href="javascript:window.print();">打印</A>] [<A
href="http://article.cechina.cn/2008-10/20081070903581.htm#clist">发表评论</A>]
<LI class=L>
<DIV
style="MARGIN-TOP: 2px; DISPLAY: inline; BACKGROUND: url(http://www.cechina.cn/images/commend.gif) no-repeat; FLOAT: left; MARGIN-LEFT: 180px; WIDTH: 46px; CURSOR: pointer; HEIGHT: 52px; TEXT-ALIGN: center"
onclick=artclick(1);><SPAN id=digg_num
style="FONT-SIZE: 14px; COLOR: #ff6600; FONT-FAMILY: verdana,宋体,sans-serif">0</SPAN>
</DIV>
<DIV
style="MARGIN-TOP: 2px; BACKGROUND: url(http://www.cechina.cn/images/Oppose.gif) no-repeat; FLOAT: left; MARGIN-LEFT: 20px; WIDTH: 46px; CURSOR: pointer; HEIGHT: 52px; TEXT-ALIGN: center"
onclick=artclick(0);><SPAN id=Oppose_num
style="FONT-SIZE: 14px; COLOR: #075db3; FONT-FAMILY: verdana,宋体,sans-serif">0</SPAN>
</DIV>
<DIV style="FLOAT: left; MARGIN-LEFT: 20px"><A
href="http://article.cechina.cn/2008-10/20081070903581.htm#"><IMG
style="PADDING-RIGHT: 16px" height=60 alt=收藏
src="基于嵌入式Linux的移动终端的软件设计.files/Adetail_pic06.gif" width=60 border=0></A> <A
href='javascript:copyInclipboard("http://article.cechina.cn/2008-10/20081070903581.htm"+"%20%20"+"基于嵌入式Linux的移动终端的软件设计")'><IMG
height=60 alt=分享 src="基于嵌入式Linux的移动终端的软件设计.files/Adetail_pic07.gif" width=60
border=0> </A> </DIV>
<DIV class=clear></DIV></LI></UL>
<DIV class=Statement><STRONG>版权声明:</STRONG>版权归控制工程网所有,转载请注明出处!</DIV>
<DIV class=Adetail_Relation style="DISPLAY: none">
<DIV>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=middle width=210>
<TABLE cellSpacing=5 cellPadding=0 width=200 align=center border=0>
<TBODY>
<TR>
<TD align=left height=32><SPAN class=grayB>您的姓名:</SPAN> <INPUT
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_txtName
style="WIDTH: 100px"
name=ctl00$ctl00$ctl00$cpMainWrapper$MainContent$Left$txtName><BR><SPAN
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_RequiredFieldValidator1
style="VISIBILITY: hidden; COLOR: red">请输入您的姓名</SPAN> </TD></TR>
<TR>
<TD align=left height=32><SPAN class=grayB>单位名称:</SPAN> <INPUT
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_txtCompany
style="WIDTH: 100px"
name=ctl00$ctl00$ctl00$cpMainWrapper$MainContent$Left$txtCompany><BR><SPAN
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_RequiredFieldValidator2
style="VISIBILITY: hidden; COLOR: red">请输入单位名称</SPAN> </TD></TR>
<TR>
<TD align=left height=32><SPAN class=grayB>联系电话:</SPAN> <INPUT
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_txtPhone
style="WIDTH: 100px"
name=ctl00$ctl00$ctl00$cpMainWrapper$MainContent$Left$txtPhone><BR><SPAN
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_RequiredFieldValidator3
style="VISIBILITY: hidden; COLOR: red">请输入联系电话</SPAN> </TD></TR>
<TR>
<TD align=left height=32><SPAN class=grayB>电子邮件:</SPAN> <INPUT
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_txtEmail
style="WIDTH: 100px"
name=ctl00$ctl00$ctl00$cpMainWrapper$MainContent$Left$txtEmail><BR><SPAN
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_RequiredFieldValidator4
style="VISIBILITY: hidden; COLOR: red">请输入电子信箱</SPAN> <SPAN
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_RegularExpressionValidator1
style="VISIBILITY: hidden; COLOR: red">Email格式错误</SPAN> </TD></TR>
<TR>
<TD align=left>本站注册会员请登录后填写反馈更快捷,每条反馈得3积分。 </TD></TR>
<TR>
<TD align=middle><A
href="http://article.cechina.cn/2008-10/20081070903581.htm#">登录</A>
<A
href="http://article.cechina.cn/2008-10/20081070903581.htm#"> 注册</A>
</TD></TR></TBODY></TABLE></TD>
<TD vAlign=top>
<TABLE id=InforTable cellSpacing=5 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD height=30><INPUT type=checkbox onchange=updateValue(this);
value=我想得到贵公司详细的技术资料 name=checkbox1> 我想得到贵公司详细的技术资料 </TD>
<TD height=30><INPUT type=checkbox onchange=updateValue(this);
value=我想得到贵公司的价格信息 name=checkbox2> 我想得到贵公司的价格信息 </TD></TR>
<TR>
<TD height=30><INPUT type=checkbox onchange=updateValue(this);
value=我让贵公司产品销售人员与我联系 name=checkbox3> 我让贵公司产品销售人员与我联系 </TD>
<TD height=30><INPUT type=checkbox onchange=updateValue(this);
value=我让贵公司技术支持人员与我联系 name=checkbox4> 我让贵公司技术支持人员与我联系 </TD></TR>
<TR>
<TD colSpan=2 height=30>
<P><STRONG>其他意向请在下面输入:</STRONG><STRONG> </STRONG></P></TD></TR>
<TR>
<TD align=middle colSpan=2><TEXTAREA id=FeedbackInfor name=textarea rows=4 cols=40></TEXTAREA>
</TD></TR>
<TR>
<TD align=middle colSpan=2 height=30><INPUT
id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_btnFeedBack
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; WIDTH: 117px; HEIGHT: 24px; BORDER-RIGHT-WIDTH: 0px"
onclick='if(!validateInfor()) return false;WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ctl00$ctl00$cpMainWrapper$MainContent$Left$btnFeedBack", "", true, "companyGroup", "", false, false))'
type=image src="基于嵌入式Linux的移动终端的软件设计.files/Adetail_btn.gif"
name=ctl00$ctl00$ctl00$cpMainWrapper$MainContent$Left$btnFeedBack>
<INPUT id=ctl00_ctl00_ctl00_cpMainWrapper_MainContent_Left_MySelect
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -