您的位置 首页 新能源

嵌入式体系中进程间通讯的监督办法

本文详细描述了一种利用 ptrace 系统调用,实现嵌入式系统内部进程通信的监视方法,并提供了相应的实现方案。概述复杂的嵌入式系统中,常常同时运

本文具体描述了一种运用 ptrace 体系调用,完结嵌入式体系内部进程通讯的监督办法,并供给了相应的完结计划。

概述

杂乱的嵌入式体系中,常常一起作业着相当多的进程。这些进程之间频频的进行着很多的通讯动作。进程的作业状况与这些不断产生的通讯有着直接和严密的联络。经过对进程间通讯的监督,开发人员能够掌控体系内部作业的状况。发现错误时,运用获取到的进程间通讯的信息,调试工程师更简单发现问题之地点。

可是,嵌入式体系与开发人员的接口往往较为单一。开发人员广泛运用一般是根据串口或是网络接口的终端( console )办法。在这个形式下,开发人员难以详尽精确的调查进程间的通讯。并且关于核算才能单薄的嵌入式体系来说,在终端上打印出通讯报文既会影响体系内部的作业,一起,也会使屏幕上充满的过多的无用信息,使开发人员的剖析作业无从下手。

为了处理这个问题,在嵌入式 Linux 的平台上,咱们开发了一整套用于监督嵌入式体系内进程间通讯的软件,用于调试咱们开发的嵌入式产品。本文具体介绍了监督嵌入式体系内进程间通讯的技能原理和完结监督软件的引荐计划。

监督办法的基本原理

Linux 中的 ptrace 体系调用是监督进程间通讯的要害。 ptrace 为咱们供给了一种调查和操控其它进程的办法。运用 ptrace ,咱们能够截获正在作业的进程的一切的体系调用。所谓截获是指,监督程序能够在这些体系调用产生和退出时,取得体系调用的参数,乃至修正参数。这些体系调用包含: read , write , sendto, recv 等等。在 Linux 中,用户能够经过“ man syscalls ”来检查当时版别的 Linux 所支撑的体系调用。

在咱们的 Linux 嵌入式产品中, AF_UNIX 域的 socket 被广泛运用。它被用来完结进程间通讯的作业。 AF_UNIX 域的 socket 的编程模型与一般的 socket 编程模型完全相同。咱们的运用办法是:接纳进程创立一个 AF_UNIX 域的 socket ,设定其形式为数据报( SOCK_DGRAM )。在这之后,为其绑定一个含途径的文件名,例如: /var/tmp/receive.unix 。这个文件名被内核用于标识socket。发送进程创立一个相同形式的 AF_UNIX 域的 socket 。然后,调用 sendto 向接纳进程发送音讯。用来标识接纳进程 socket 的便是前面说到的文件名,也便是 /var/tmp/receive.unix 。而接纳进程运用 recvfrom 体系调用,就能够收到发送进程宣布的音讯。

因而,经过 ptrace ,一旦咱们接管了被监督进程的 sendto 和 recvfrom 体系调用,将使咱们能够截获到运用这两个体系调用进行通讯的数据。

ptrace 体系调用的界说如下:

       #include sys/ptrace.h> 
       long int ptrace(enum __ptrace_request request, pid_t pid, \
                       void * addr, void * data);

它共有四个参数。 request 的值决议 ptrace 履行什么样的使命。 pid 指明被追寻的进程的 id 。 request 参数决议了是否需求一个有用的 addr 参数,仍是仅用 NULL 即可。假如有必要运用有用的 addr 参数,它的意义是被追寻的进程的进程空间的偏移量。 data 类似于 addr 参数,有时也能够运用 NULL 来替代。假如它被运用,它的意义是指向一些数据,这些数据期望被放置到被监督的进程的用户空间中。

一个完好的示例代码将向咱们展现监督进程间通讯的技能细节和要害点。代码按前后次序分段阐明。

               #include stdio.h>
               #include stdlib.h>                           

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/297687.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们