- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
监视嵌入式系统内进程间通信的技术原理
sendto 系统调用的定义是:
#include <sys/types.h>
#include <sys/socket.h>
size_t sendto(int s, const void *msg, size_t len, int flags,
const struct sockaddr *to, socket len_t tolen);
sendto 包含了六个参数,特别是 msg 参数指出了发送的数据内容。参数 to 指出了发送的目标。利用 PTRACE_PEEKDATA 参数的 ptrace ,监视程序将可以获得 sendto 的全部的六个参数。这样监视程序就完全获得了被监视进程要向外发送的数据和发送目标。具体的实现细节在此不再展开论述。请参考 man ptrace 说明手册。监视系统的体系和应用
利用上面讨论的技术,我们开发了可以运行在 mips 目标板上的监视程序,名为 ipcmsg 。它是一个命令行程序。在我们的应用环境中,它的使用方法是:
root@host:~$ ipcmsg -p pid -l xxx.xxx.xxx.xxx -b 6000
pid 是被监视进程的 pid ,可以通过 ps 命令获得。 -l 参数后面指定 PC 主机的 IP 地址。 -b 参数指明了接收的端口号。
最初进行监视时, ipcmsg 是没有 IP 地址和端口号参数的。所有信息是输出到串口控制台中。这既影响了运行的效率(大量的在串口上的输出会影响目标板的运行速度),也不利于信息的处理。由于我们的目标板具备以太网接口,我们很容易的想到将 ipcmsg 截获的数据包转发到 PC 主机上。使用 PC 主机更便于对进程间通信的数据包进行分析。在 PC 主机上,我们使用 wireshark 这个非常流行的开源的网络报文分析软件接收来自目标板的信息。
在实际的使用过程中,我们使用以太网线将目标板与 PC 主机相连。然后,在目标板上启动 ipcmsg ,并为其指定监视进程的 pid 。 ipcmsg运行后,我们在PC主机上启动 wireshark 接收来自 ipcmsg 的数据包。这些数据包中包含了 mips 目标板上进程间通信的信息。利用我们为 ipcmsg 专门开发的 wireshark 插件,在 wireshark 上,我们可以详细的分解 ipcmsg 转发来的数据包,非常直观的分析进程间通信的过程和可能存在的问题。下面是 wireshark 分解 ipcmsg 数据包的实际运行图:
运行图
从图中可以看到,我们从 ipcmsg 获得了进程间通信的方式,参数( path 是 AF_UNIX域 socket 地址参数),方向和内容,以及进程名称。这些信息帮助我们对嵌入式系统的运行状态进行分析。而这一切非常直观和便于操作。
上一篇:基于功率分配的H.264空时编码方案
下一篇:多路独立供电的半桥变换器的设计