基于OpenWrt平台的进程间通信
OpenWrt是一款基于Linux内核的开源路由器操作系统,文章研究内容是,利用Linux进程间通信中的命名管道方法,设计一系列接口函数,提供消息的注册、注销、发送、接收。使消息传递在简单、方便的同时,也能满足路由器系统的要求。这种函数库称为消息总线。
标签:进程间通信(IPC);Linux;消息总线
1 消息总线设计需求
D-Bus消息总线是面向桌面系统设计,接口丰富,但占用资源较多。重新设计的消息总线将满足占用系统资源少,且可以满足路由器软件系统的消息转发需求。消息总线(Message Bus,以后简称M-Bus)模块作为路由器软件系统的基础软件模块,M-Bus被设计成了一个为路由器操作系统各应用程序提供模块间通信的唯一上层平台。M-Bus自身被抽象化成一个提供进程间通信方法的函数功能库,负责路由器软件系统各模块间的消息转发和消息广播,实现的方式是向整个系统提供C的API接口以供其他应用程序调用。M-Bus底层是使用套接字、信号量、管道等Linux基本进程间通信方法进行封装。M-Bus在消息处理方式是消息的直接转发。消息的直
接转发使用命名管道来实现,参与通信的各个进程直接调用M-Bus库函数,各个应用程序根据自身注册到消息总线上的消息处理函数,做出下一步的动作。进程通信方式
2 消息总线总体设计
消息总线被设计成了一个为路由器操作系统各应用程序提供模块间通信的唯一上层平台。消息总线自身被抽象化成一个提供进程间通信方法的函数功能库,负责路由器软件系统各模块间的消息转发和消息广播,实现的方式是向整个系统提供C的API接口以供其他应用程序调用。消息总线底层是使用套接字、信号量、管道等Linux基本进程间通信方法进行封装。消息总线在消息处理方式是消息的直接转发。消息的直接转发使用命名管道来实现,参与通信的各个进程直接调用消息总线库函数,各个应用程序根据自身注册到消息总线上的消息处理函数,做出下一步的动作。消息总线包括以下三个子模块:(1)消息总线的接口集合,包括消息的发送、消息的接收、消息发送者与接收者的登记等一系列消息总线能够提供的API函数。(2)消息总线的守护进程。(3)消息总线内部工作处理,为上层API函数提供基础。路由器的各应用程序通过调用消息总线的API函数来使用消息总线的功能。消息总线提供了本地资源初始化、销毁本地资源、注册、卸载、发送消息、接收消息、登记消息处理等API
函数。消息总线中所定义的消息,是进程间传递数据的载体,消息的定义遵循以下原则:(1)每个消息都有自身的名字,消息的名字表示要发送的消息是什么命令。(2)消息的名字在系统中是唯一的。(3)系统能处理消息的种类的能力是有限的。各个模块收到消息后会跟据消息的名字执行相应的处理函数,(4)消息具有统一定义的数据结构,包括消息头、携带数据、消息上下文(Context)。消息的名字(也可称为消息的类型)作为消息头中的一个数据域的形式存在。