Details
-
Feature
-
Resolution: Unresolved
-
Low
-
None
-
None
Description
Automotive Message Broker (AMB) has been the GENIVI component of choice to make vehicle signals available to applications. AMB is a daemon process that brokers messages between local applications on the same node and remote applications on a networked node. AMB's messaging mechanisms are based on dBus which provides an RPC-style mechanism. dBus has many advantages but unfortunately its performance is rather desirable. The use of UNIX domain sockets (local) and IP (remote) adds context switching overhead in particular for local applications. There have been attempts to replace the user-space dBus with an implementation in the Linux kernel:
- AF_BUS - Adds a socket address family to the Linux kernel's networking stack. Development was funded by GENIVI. However, the kernel community rejected the rather large patchset.
- kdbus - A kernel dbus implementation started by Greg Kroah-Hartman and redesigned by Lennart Poettering and Kai Sievers. This approach was also never fully accepted into the Linux kernel.
To provide a user-space solution to the performance problem, Vehicle Signal Interface (VSI) was created. VSI is based on a shared-memory segment that organizes signals in a binary tree for quick access. VSI itself is a library written in C that can easily be linked to any C/C++ program.
Any program that uses the VSI library attaches to the shared memory segment and accesses the signals via the library. This makes it easy to write applications and adapters for hardware buses such as CAN as well as software buses such as dBus. VSI provides functions to subscribe to changes of individual signals or to changes of signals in groups via a callback mechanism.
The idea is to develop an application that replaces AMB by using VSI instead. This application sets up the VSI shared memory segment using the Vehicle Signal Specification (VSS) and eventually provides additional interfaces;
- dBus Interface
- RVI Interface
Other interfaces such as CAN can then easily be added by other applications.