当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]SIP协议栈在嵌入式环境下的设计方法

会话初始协议(SIP协议)是一种用于IP网络多媒体通信的应用层控制协议,可建立、修改、和终止多媒体会话。SIP具有良好的互操作性和开放性,支持多种服务且具有多媒体协商能力,能够在不同设备之间通过SIP服务器或其他网络服务器进行交互。同时SIP易于扩展,支持用户移动性,能够充分满足设备对移动性服务的需求,而且SIP简单灵活,计算量小,尤其适合在嵌入式应用环境中应用。因此,将SIP引入到嵌入式应用中,凭借SIP自身的特性可有效提高嵌入式网络设备的互操作性和接入网络的便利性。但SIP协议本身只给出SIP消息的文法定义以及自然语言描述的消息处理,并未给出SIP协议栈的实现机制。这里讨论在嵌入式终端设备上建立嵌入式Linux系统,并完成SIP的嵌入式,以及代码的嵌入式移植和测试。

  1 嵌入式LilIHX系统开发

  1.1 建立交叉编译环境

  本文使用的是实验室的ARMSYS2410-B开发板。准备好必要的软件包后,建立交叉编译环境实际上就是对cross2.95.3.tar.bz2的解压过程。具体过程如下:

  1)在编译Linux之前,先安装交叉编译toolclhain,在/usr/local目录下建立名为ann的目录,进入该目录,执行解包:

  cd/usr/local/armtar xjvf/mnf/cdrom/linux/toolchain/cross-2.95.3.tar.bz2

  2)编辑/etc/profile,找到pathmunge/usr/local/sbin,在其下面添加一行:

  Pathmunge/usr/local/arm/2.95.3/bin这样,内核或其他应用程序均可使用arm-linux-来指定使用该交叉编译器。

  1.2 Boot Loader移植

  Boot Loader是在嵌入式Linux操作系统内核运行之前运行的一段小程序。通过这段程序可以将内核从Flash存储器拷贝到RAM,并执行内核。还要完成初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态。用烧录软件jflash-s3c2410通过JTAG口向硬件板下载Boot Loader二进制文件,向硬件板Flash中下载引导程序,这样Boot Loader就可以成功运行。

  1.3 重新编译内核

  从官方网站上下载的内核不能直接在硬件平台上运行,需要根据具体的硬件平台重新裁剪、编译内核,根据硬件平台特性编写相关代码,将Linux移植到平台上。以下是对内核代码的修改:1)修改内核目录树根下的Makefile,指明交叉编译器;2)配置Flash分区,修改arch-/arm/mach-s3c2410/devs.c,用以指明分区信息,该文件的内容建立Nand Flash分区表;修改arch/arm/machs3c2410/machsmdk241-0.c文件指定启动时初始化,kernel启动时依据对分区的设置进行初始配置:3)配置和编译内核,在Linux源文件目录下,执行make menuc-onfig命令,配置内核产生config文件。然后依次运行#make clean;#make dep;#make zImage,完成对内核的编译。

  2 嵌入式SIP协议栈的设计与实现

  2.1 嵌入式下实现SIP协议栈

  嵌入式环境下SIP协议的开发,主要需要考虑嵌入式系统资源有限的局限性,需根据系统应用的特点,在设计时充分考虑CPU、存储空间等系统资源的利用。由于资源的限制,嵌入式系统一般作为用户终端设备,故这里主要实现协议栈中用户代理(UAC/UAS)的功能。

  首先是协议栈的简化。根据RFC3261中定义的SIP协议栈模型可知,SIP是一个分层体系结构的协议。该协议主要由4层组成,底层为语法编解码层(Syntax&Encoding);第2层是传输层(TransportLayer),该层定义网络上的客户机和服务器如何接收请求和发送响应;第3层为事务层(TransacTIon),负责事务处理;最上面一层为事务用户层(Transaction User),每个SIP实体都是事务用户,当一个事务用户希望发送请求时,就创建一个客户机事务实例以发送请求。

  这种协议栈的设计实现方法应用到嵌入式环境中有以下不足:1)协议栈设计层次过多会增加系统堆栈的开销。为了不过多占用堆栈,在系统资源分配时需分配较大的堆栈空间。而嵌入式环境下的空间资源是有限的,SIP模块占用过多的堆栈空间,会造成其他任务空间分配受到限制。2)层次与层次之间的调用会增加系统的延时,降低系统的实效性。而作为用户终端设备,快速响应是设计的重要准则。

  2.2 SIP协议栈的总体结构

  根据以上分析,在设计中需对SIP协议栈进行修改和裁剪,使其尽量少地占用资源并能最大限度地实现快速响应。本文设计的嵌入式SIP协议栈模型如图1所示。

  


  协议栈主要分成传输层和事务层。传输层主要负责收发消息,它管理套接字(socket)和网络连接,使用TCP或UDP传送数据。事务层则负责创建并管理事务对象。每个事务对象负责维持状态,并发消息和使用传输层重传消息。事务层也需要将从传输层传来的消息映射到相应的事务。

  SIP协议栈管理层负责系统配置、分配内管理资源、提供登录协议栈和进行管理的命令以及所有其他层的初始化和关闭。应用程序使用该协议栈前,必须先调用该层的初始化接口以初始化要使用的层,在结束应用程序前,必须调用该层的关闭接口关闭相应的层。

  SIP编码解析是协议栈运行过程中比较耗费时间的一个模块,为满足嵌入式环境,该协议栈使用了一种“懒汉”解析策略,当从网络上收到一个原始的SIP消息时,消息被解析成很多“关键字和关键字值对”,关键字是请求行或SIP头域名,关键字值是没有解析的请求行和头域值。到事务层,在应用程序要访问请求行或某个头域时,才会对其完全解析,这种策略可有效提高SIP解码的速度,极大提高那些需要处理繁重网络流量的应用。

  2.3 事务层和传输层的实现

  图2为事务层和传输层的软件结构。这2层都使用SIP消息编码解析层的功能处理SIP消息。其中传输层包含3个模块:1)TcpConn模块使用TCP实现收发消息功能;2)UdpConn模块使用UDP现收发消息功能;3)SipMessageSendRcv模块利用TcpConn和UdpConn向应用程序提供统一的消息收发接口。在TcpConn和UdpConn中,都会创建2个线程,分别负责接收和发送SIP消息。

  

[!--empirenews.page--]

  事务层创建并管理事务对象。TransacTIonSendRcv提供发送不同SIP消息的接口,并以回调函数的方式在收到消息时通知应用程序。Tr-ansactionSendRcv使用传输SipMessageSendRcv提供的收发消息功能收发SIP消息,并根据收发的消息类型产生事件,将事件以及事件体(主要是SIP消息)作为参数传递给相应模块UACTransactFSM和UASTransactlFSM。事务层的核心就是这2个模块,分别表示UA客户端和服务器端收到不同消息的处理流程,具体的状态转换如图3所示。

  

  3 SIP协议栈的测试结果

  本文实现的系统将在ARM9平台的设备终端上运行,将交叉调试好的程序烧写到ARM9的Flash存储模块中,再进行调试和运行测试。其测试方法是在ARM9平台上实现一个简单的SIP终端系统,该系统利用SIP侦听程序,当一段用户发起呼叫时,双发的SIP模块开始通信。利用SIP信令主动发起呼叫或接收对方呼叫建立会话连接,连接建立好后传送RTP数据,直到一方用户提出结束请求,终止该次会话,系统恢复SIP侦听状态。SIP终端之间呼叫流程如图4所示,开始时主叫(IP=192.168.36.1)向代理服务器(IP=192.168.51.24)发起呼叫,当主叫与被叫的链路搭建成功后,主叫与被叫开始语音通信,语音通信采用的标准是G.729,主叫发送SIP信令给代理服务器采用UDP传输协议,主叫与代理服务器之间在SIP呼叫过程中也同时进行媒体协商,采用网络协议分析工具Ethereal抓包分析,结果如表l~表3所示。

  

  

[!--empirenews.page--]

  由表2可见,代理服务器向被叫发起呼叫,并同时对主叫作出响应。被叫对呼叫代理作出响应主要采用SIP/SDP协议,是为了使主叫和被叫的媒体协商达成一致。由表3可见,被叫对主叫所发起的呼叫能够作出响应,主叫与被叫之间能够实现SIP呼叫,并进行语音通信。测试结果证明,SIP协议栈在嵌入式Linux系统平台下,运行良好,基本满足设计需要。

  4 结束语

  本文探讨了SIP协议在嵌入式环境下的应用,讨论了嵌入式SIP协议栈的设计方法。完成了在ARMSYS2410-B的实验室开发板上建立嵌入式Linux系统并在其上实现SIP协议栈主要模块的主要工作。测试结果表明:该协议栈占用空间小,呼叫建立时间短,呼叫成功率高,满足嵌入式式设备对实时性、可靠性和存储空间小的要求,具有良好的性能。

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

经过几十年发展,嵌入式技术已经用在了我们生活中的方方面面,但是嵌入式始终都带有小众,专业性强的属性,让很多非嵌入式领域的同学望而却步。近十几年的发展,物联网覆盖了越来越多领域,包括了家居,商业,工业,农业等领域,不仅吸引...

关键字: 嵌入式 物联网 技术

随着IT技术飞速发展,互联网已经进入了“物联网”时代。物联网中需要的大量设备不在依赖人与人之间的交互产生联系,更多通过协议、通信、程序设计等方式连接到一处。即 “物联网”的目的则是让所有的物品都具有计算机的智能但并不以通...

关键字: 嵌入式 物联网 计算机

最近看到APP上,给我推送了很多类似的回答,借此机会,也想着重新审视一下自己的学习历程,以及结合自身和大牛,分享一些学习经验,希望对大家有所启发和帮助。

关键字: APP 嵌入式 C语言

凭借其全新的功能丰富的移动交易应用程序,屡获殊荣的经纪商HFM让客户实现触手可及的全方位交易体验。 毛里求斯路易港2022年10月14日 /美通社/ -- 全球多资产经纪商...

关键字: 应用程序 FM 移动应用 ADI

伦敦2022年10月13日 /美通社/ -- Ubuntu Pro是扩展式安全维护和合规订阅服务,目前针对数据中心和工作站已推出公开测试Beta版本。Canonical将按照...

关键字: UBUNTU CANONICAL BSP 应用程序

北京2022年10月11日 /美通社/ -- 在四川大凉山深处,有一只"凉山黑鹰"少年篮球队:队员平均年龄12岁,平均身高1米3,球队刚成立时,连个像样的球场都没有。然而,凭着一腔热情和惊人天赋,这只...

关键字: 网络 BSP 内核 腾讯

万物智联时代,嵌入式技术及其应用的形态将更加丰富和多元,同时也将日益呈现深度物理融合、混合架构共存、群体智能协同、网络安全攸关等诸多新的计算特性。显然,经典的嵌入式系统体系结构、软硬件技术和开发方法都已很难应对新趋势下的...

关键字: 嵌入式 物联网 计算机

物联网是新一代信息技术的重要组成部分,是互联网与嵌入式系统发展到高级阶段的融合。通用计算机经历了从智慧平台到互联网的独立发展道路;嵌入式系统则经历了智慧物联到局域智慧物联的独立发展道路。

关键字: 嵌入式 物联网 计算机

今天,小编将在这篇文章中为大家带来工控主板的有关报道,通过阅读这篇文章,大家可以对工控主板具备清晰的认识,主要内容如下。

关键字: 工控主板 嵌入式 主板

随着工业4.0、医疗电子、智能家居、物流管理和电力控制等快速的发展和推进,嵌入式系统利用自身的技术特点,逐渐成为众多行业的标配产品。嵌入式系统具有可控制、可编程、成本低等,它在未来的工业和生活中有着广阔的应用前景。在现在...

关键字: 嵌入式 物联网 人工智能

嵌入式教程

6897 篇文章

关注

发布文章

编辑精选

技术子站

关闭