• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 作文范文 > 正文

    [基于Dbus总线的手机通信及调试系统]飞控系统通信总线

    时间:2020-03-05 07:23:07 来源:雅意学习网 本文已影响 雅意学习网手机站

       摘要:本文主要研究基于Dbus总线的通信机制在智能手机中的应用,并设计了一个基于Dbus的调试跟踪工具:Dbus-ghost。此工具能为开发人员提供一个很好的方法来追踪系统的运行状况。 Dbus-ghost采用Python语言实现,采用GTK+作为GUI的开发框架,数据传输采用TCP/IP方式,物理接口支持USB、以太网等。此外这个工具还非常便于部署,不管在PC端还是在手机端,只要支持Python的运行环境都能非常方便得运行Dbus-ghost工具。
       关键词:Dbus 通信 GTK Python 智能手机 Android
       DOI:10.3969/j.issn.1672-8289.2010.10.056
      
      0. 引言
      近年来,随着手机产业的飞速发展,越来越多的科研人员投身到了手机或者与手机相关的行业中来。 由于手机系统属于嵌入式系统的一个典型的子类,而嵌入式系统的技术复杂度比较高,所以很多研发人员都容易对手机系统的开发工作产生了一些畏惧心理。这和手机系统的相对封闭性和复杂性有一定关系。本文旨在通过研究基于Linux的手机系统,向大家介绍一种很有前景的通信方式和基于这种通信方式而开发的调试系统。了解了本文介绍的通信机制后,读者很容易能够理解当前的一些优秀手机系统的通信方式,比如谷歌的Android系统,Palm的Web OS。这些系统中就用到了本文中提到的通信机制。
      1. 智能手机系统架构
       文中提到的设计所运行的手机系统由两个CPU组成,即一个应用处理器加上一个协议处理器架构。这也是当前普遍的智能手机架构。用户界面及应用程序都在应用处理器端实现,而协议处理器实现了GSM/GPRS的Layer1到Layer3部分(如图1-1所示)。左边的框图中包含的模块为应用处理器上的主要软件模块,右边的Modem则实现了手机通信的协议栈功能。
      图1-1 GSM/GPRS 智能手机体系架构
      在应用处理器上搭建的是Linux for arm的平台,版本为2.6.12.,采用GPE phone edition作为中间件。在GPE phone edition中,主要由以下几个模块构成:
       * Phone server
      监听电话,短信,电话本这3个模块的Dbus请求,根据请求构造AT命令并通过串口发送到modem, 监听modem返回给串口的数据或者监听未知事件(如来电,来短信)的数据到来,并通过Dbus发给电话短信息等基本应用如:voicecall,sms等。
       * Gpe-applauncher
      Gpe-applauncher为模块间互相调用提供服务,如一个模块可以通过gpe-applauncher调用另外一个模块。当然,这里的调用主要是通过Dbus接口。
       * 基础应用
      如语音通话模块(Voicecall),短消息模块(SMS),电话本模块(Phonebook), 其它应用如通话记录,日历,备忘录,闹铃等。
      2. 手机中各模块间的通信机制
       手机系统中存在很多模块间的通信机制,常见的通信机制有信号,信号量,消息队列,共享内存等。这些通信机制都有各自的特色,并且使用的环境也各不相同,本文想要介绍一种基于Dbus总线的任务间通信方式,并且会介绍一下基于此通信方式下的调试系统的设计。
       Dbus是一种进程间的通信系统,它提供了同一台设备上的不同进程间的交互。Dbus被定义为快速、轻量级的进程通信系统。目前Dbus已经被广泛应用于Linux系统中,充当主要的通信系统。 Dbus的一个特点就是通用性,不论我们在什么平台上开发,只要是涉及到Dbus通信部分,其概念都是一样的,只有不同的编程语言上的差别,比如Glib和QT,Python等应用,彼此用Dbus通信的语句可能不同,但基本要素都是一样的。
      3. 手机的常见Debug方式
      一般来说,对于嵌入式设备常用的调试方法,在手机开发中也是通用的。这里介绍几种大家比较熟悉的调试方法。
      当系统还处在没有LCD的情况下,或者LCD驱动还没有正常工作时,有几个方法可以做调试,一种就是用示波器或者逻辑分析仪来分析一些测量点上的数据输出。这样的调试方法虽然比较麻烦(需要仪器),但确实非常有效的。当在仪器比较缺乏的时候,还可以通过“点灯法”来监视测量点的数据输出。所谓“点灯法”就是用LED的亮灭来表示测量点的数据值。此法成本较低但却比较繁琐。需要频繁飞线改变电路,以达到不同的测量目的。且测量的值没有办法保存和产生Log,如果眼不明,手不快,很可能需要从头来一次,重新观察。对开发测试人员要求很高。
      上面谈到的是在系统开发的初级阶段,而一般情况下,我们的调试都环境都没有这么糟糕。一般在手机开发中的调试都是用比较高端的调试器进行源代码级调试。这个时候可以借用一些调试工具的断点功能,单步跟踪功能,甚至可以查看函数调用栈来查看函数的调用关系。这种情况下,经常用到的调试环境通常为Trace32+适配器+硬件,或者Visual Studio+Simulator。前者是在真实硬件环境下用高级调试工具进行的源代码级别的调试,可以实现和PC上调试代码一样的功能。但是Trace32的调试需要硬件支持,且需要专门飞线留JTEG接口,所以不是每一个硬件都可以快速用Trace32做调试的。而后者虽然是在PC环境上模拟硬件环境,但毕竟是模拟出来的,和真实环境还有比较大的差别,特别是在解决一些问题时,在模拟器和实际硬件上的表现可能完全不同。在这种情况下,一般我们会采用手机开发平台自身带的其他方法。比如用Print类接口作串口打印来输出调试信息。这类方法通用且非常易用,是比较方便的一种方法,特别是在排查一些逻辑问题时,特别有用。另外,这类Print方法可以被改写为打印到屏幕,打印到串口,打印到文件等变种接口。方便不同场合下应用。
      除以上之外,一般成熟的手机开发平台都会提供一套Trace的工具,该类工具可以Log到任务间交互的信息。这在多任务系统的高层应用调试中是非常重要的,特别是手机系统,涉及到众多协议。有了这类Trace工具,对了解掌握系统的运行机制非常有帮助。但是这样的Trace系统也有一些缺点,比如说扩展性较差,因为这个系统能够识别出来的信号或者是消息类型不是统一的,所以需要重构能够被这个Trace系统识别出来的数据库,以使这个Trace系统能够捕获和显示出系统的各任务间的通信细节。
      在Linux系统中,由于各模块数量众多且各模块间的通信方式不统一,因此也就没有一套Debug系统能Trace到系统中所有任务间通信的信息。那么我们在设计Linux产品时,引入了Dbus总线并把相关应用间的通信方式从原先的Linux原生通信方式移植到Dbus总线通信机制上。而总线上的通信理论上是可以被完成Log下来的。这也为我们设计基于Dbus的Debug系统提供了可能。
      4. Dbus debug系统的设计
      1) Dbus debug系统设计目标
      Dbus debug系统希望能在PC和手机端能够实现一个实时的调试系统,由手机端的Dbus debug工具来跟踪手机上的各模块交互信息。甚至模拟手机上的任务向其他任务发送测试消息。这样的工具需要具备方便实用,有图形化的界面,且部署方便等特性。对于这些要求,我们将在设计过程中一一体现。
      在系统设计之初,我们需要对系统采用什么开发语言,什么框架及哪些技术做一系列的调研。通过考虑兼容性和可移植性以及系统的可实现性,我们选择了Python作为主要开发语言,选择GTK作为GUI的框架,以及采用TCP/IP作为PC端与目标端(手机)的通信方式。此外,我们还给这个Dbus debug系统取了个名字:Dbus-ghost.
      2) 开发环境
      开发环境分为PC和手机两个部分,对于PC来讲,建议在Linux的发行版如Fedora,Ubuntu等的环境下开发,并安装Pygtk开发包,此开发包包含了Python库及运行环境和GTK的开发环境。Target端和PC端类似, 需要支持Python,GTK+。
      要测试是否已经安装了Python运行环境(PC或者手机),可以打开一个shell程序然后输入如下所示的命令:
      $ python �V
      如果返回值为Python版本号,则说明已经安装了Python运行环境。
      3) Dbus-ghost设计与实现
      一切环境都安装就绪后,我们将进入Dbus-ghost工具的设计阶段。前面提到了Dbus-ghost的设计目的和什么是Dbus-ghost。它将是一个基于Dbus的总线Debug工具。或者说是一个总线Trace工具。在整体框架上,我们将Dbus的GUI部分和数据连接部分分开来分别开发。这个是一个主要的模块划分,因为我们知道数据连接可能因为PC系统和手机等target系统的通信方式不同而不同。
      图4-1 Dbus-ghost架构
      其中的数据通信层,我们设计时考虑到手机系统为Linux系统,而Linux系统手机,一般的通信协议都是支持的。主要就是考虑硬件端口所能支持的形式。 此款手机的手机硬件端口为USB形式。基于USB形式的数据端口,首先想到的就是将手机端口识别为USB,将手机识别为USB client,而将PC识别为USB host。从而实现通信。在PC端,USB协议可以通过安装第三方工具实现。然后我们可以在Dbus-ghost中调用相关USB协议的驱动程序,这些驱动程序都是由Win32API或者Linux的系统调用实现的。这种方法的典型应用之一是将USB虚拟成串口。这样的话,对于PC上的Dbus-ghost软件开发和控制数据将会变得比较容易。这也是目前手机Debug系统常用的方式。
      使用串口通信方式可以做到Debug系统中的PC和目标机的数据互通。 不过串口通信也有它的局限性, 比如一个明显的问题就是目标机和PC必须是直接互联的,且必须配置一至的波特率等基本参数。为了增加数据通信层的通用性,我们想到了用TCP/IP作为数据传输的协议。对于PC端来说,只要配置了网卡加上OS自带TCP/IP协议就可以了,但是手机端就比较麻烦。因为手机上不可能有网络端口(受限于手机的尺寸)。因此我们如果想用TCP/IP协议的话,必须找到一种不用网络端口可以传输TCP/IP协议的方法。在手持设备中进行数据传输一般可以通过各种串口,网卡,红外以及USB接口等。其中,USB以快速、同步、动态连接且价格低廉,越来越受到欢迎。随着USB的广泛应用,在嵌入式Linux系统中越来越多地增加了对USB的支持。随着网络功能的逐渐普及、强大,通常的做法是在底层将USB接口模拟成一个以太网接口,实现基于Ethernet的网络连接。从而在上层进行同步数据,实现文件传输以及文件备份等。涉及的理论就是Ethernet Over USB或者也可以称作TCP/IP over USB。
      有了这个基于USB的通信基础,我们的数据传输层就可以采用TCP/IP方式来实现,并且由于TCP/IP具有数据路由能力,我们也能做到分布式Debug/Log。因此,对应与数据通信层,我们设计了Dbusghostconnector这个模块。并把所有与调试器界面部分的代码,封装到Dbusghost这个模块中。另外还有一个重要模块是运行在Target端的Dbus-monitor模块。这三个模块的关系如下:
      图4-2 Dbus-ghost模块组成
      如上图所示,在PC端运行的是Dbus-ghost-main模块和Dbusghostconnector模块,前者是PC侧的主程序,负责UI,输入输出,数据处理。而后者主要是数据连通的部分(基于TCP/IP的传输方式)。在target端(手机)上则运行Dbus-monitor和Dbusghostconnector两个模块。 前者是Dbus总线的接口,提供监听Dbus总线功能和传送监听数据回PC端的功能;后者则和PC端一样,是数据连接层,提供基于TCP/IP的数据传输服务。
       * Dbusghostconnector
      Dbusghostconnector是一个类,这个类提供了基于TCP/IP的数据传输服务,且可以运行在PC和target端。这个类设计了如下几个重要成员函数: __init__m。
      该函数作为类实例化时运行的第一个函数,有四个参数。第一个参数是Mode,这个参数的概念是区分传输需要用TCP协议还是用UDP协议。对于不同协议,他们的连接形式会不同。第二个参数是pSendAdd, 这个参数是接收端的地址信息。 第三个参数是pHost参数,这个参数的含义是发送端的IP地址。第四第五个参数分别是接收端的端口号和发送端的端口号。初始化时,首先判断pSendAdd是否是broadcast, 如果是broadcast则调用get_local_broadcast_addr获取当前局域网的广播地址。接下来就根据模式参数,决定建立TCP还是UDP的链接。同时,由于每一个应用除了需要发送数据外,还要接受数据,所以,同时需要建立端口信息的监听。
      4) Dbus-ghost使用
      整套Dbus-ghost的部署非常简单方便,只需要将Pygtk环境在PC端正确安装,在Target手机上有Python运行环境。就可以使用Dbus-ghost功能。在使用时,对Dbus-ghost-main.py和Dbus-monitor.py两个文件中的IP地址和端口号做好设定,就能使得PC和Target手机通过USB线进行通信。下面看一看Dbus-ghost系统的使用方法。
      第一步,打开PC上的命令行模式,输入如下指令运行Dbus-ghost-main主程序。
      图4-3 Dbus-ghost 主界面
       运行后的界面如上图所示,这时候看到状态栏还是现实Disconnected状态。这时候还不能去连接。应该执行第二步曲开启Dbus-monitor.py
      第二步,打开Linux手机端的命令行界面,输入如下指令,运行Dbus-monitor.py程序,此程序运行后,没有图形界面。仅开启监听PC的线程。当正常运行了Dbus-monitor.py后,则可以进入第三步建立连接了。
      
      第三步,点击 “连接”按钮,看到状态栏显示”Connected”则表示连接成功。此时点击“Log”按钮,就可以Log手机端的Dbus上的消息了。
      完成了以上三步,就可以看到Dbus上的消息了。由于运用Dbus的模块很多,如果在做一些过滤器的功能的话还能去掉一些不关心的消息。
      为了演示一下Dbus上log的有意义信息,这里从手机环境连接MSN做了一次聊天,并用Dbus-ghost记录到了在Dbus上传送的聊天信息。
      下图显示的是在Linux手机端运行的MSN终端,并向其他好友发送一条消息,内容为”test”。
      图4-4 MSN聊天窗口
      从Dbus-ghost记录到的手机Dbus总线上就看到了一条这样的消息,里面有对方的MSN地址信息,和聊天信息“test”。
      图4-5 Dbus-Ghost 记录的MSN聊天信息
      以上演示步骤显示了如何使用Dbus-ghost来Log手机上的Dbus总线的通信数据。可以看出,部署和使用这套log系统是非常方便的,且只要是支持python的运行环境,都可以很快运行起来。此调试方法能达到了监控和调试手机Dbus上的应用程序通信的目的,在实际项目开发中,非常实用。
      5. 结束语
       本文介绍了Dbus总线在智能手机系统中的应用,并详细阐述了基于Dbus总线的一套调试系统的设计和应用。当前Dbus已经被越来越多的智能手机所采用,包括谷歌的Android操作系统,所以本文所研究的给予Dbus总线的调试系统在当前和未来的手机系统开发上,将起到非常重要的作用。
      
      参考文献
      [1] Ryan Paul,KDE goes cross-platform with Windows, Mac OS X support,Ars Technica,2008
      [2] http://www.省略/wiki/IntroductionToDBus
      [3] http://dbus.省略/doc/dbus-specification.html
      [4] Mark Lutz, Programming Python[M]. 3rd Edition, O"Reilly Media, Inc., 2006, ISBN 978-0-596-00925-0
      
      作者简介:
      郭维科,男,江苏无锡人,上海华勤通讯技术有限公司,软件总监,主要研究方向为手机软件架构及应用开发。

    推荐访问:总线 调试 通信 基于Dbus总线的手机通信及调试系统 基于现场总线的监控系统设计 基于现场总线的水厂控制系统设计

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章