Distribution Contents

< Building | OpenBinder | Authors >

The OpenBinder distribution is divided into a number of top-level directories for the different kinds of items that are included. This page is organized in the same way, providing a brief description of each of the items that are included.

build

This directory is not included in the distribution, but will created for you when you build OpenBinder. It contains all of the build outputs (except for the kernel module), and is thus safe to completely remove in which case the needed contents will be recreated at the next build. The build results are placed into a number of subdirectories here:

build_system

The OpenBinder make-based build system is here. This directory includes both a basic file (definitions.make) as well as various template files used to generate rules to create various types of output.

The subdirectory doxygen here contains files for generating the Doxygen documentation. Of particular note here is the front page of the documentation, in mainpage.h.

commands

Linux command-line tools related to working with the Binder.

components

This directory contains the implementation for various Binder components and Makefiles for compiling them into packages. It is organized in a series of sub-directories for different kinds of components.

kits

These are various components related to specific Binder kits. The only one currently included is CatalogMirror, a component wrapper for the BCatalogMirror class.

services

These are Binder components that are intended to be used as services i.e., published in the services directory.

tools

These components are command line tools.

docs

This directory contains top-level documentation on OpenBinder. The detailed documentation on the Binder itself is stored along with its implementation, in libraries/libbinder/docs.

headers

These are the shared header files for the OpenBinder APIs. They are organized into "kits", a collection of related APIs. One or more kits are bundled together into a library. Currently all kits are compiled into the libbinder.so library.

interfaces

These are IDL files describing public Binder interfaces. They are organized into kits exactly the same way as the headers, and the generated headers get built with the same structure into the build directory.

libraries

Code for the OpenBinder libraries, both shared and static.

modules

This directory contains the Binder kernel module, for performing IPC between processes. It is an optional part of the system; if not built, all of the other Binder features except for multi-process support will still work.

samples

Sample code.

scripts

These are various shell scripts, both for a normal Linux shell (using a .sh suffix) and the Binder shell (using a .bsh suffix).

Note:
You should not use these directly, but rather the corresponding outputs generated by the build system in build/scripts.

servers

These are standard Linux commands that are basic parts of the Binder runtime.

binderproc

This is the executable that the Binder runs when it is created a new process. It sets up the Binder environment and connection correctly so that the parent can get its IProcess to instantiate components inside of it.

smooved

The smooved executable is the main Binder server, and must be running for other Binder services to be available.

The smooved application itself does very little. Its main purpose is to:

  1. Create the root Binder context, basically by instantiating a BCatalog object.
  2. If the Binder kernel module is available, become the global host of the root namespace.
  3. Create and start the Package Manager, by instantiating the standard package manager class and adding it to the root context under /packages.
  4. Create a simple process manager and publish it in the root context under /processes. Note: This should be changed to a component that is created and published by the boot script.
  5. Say Bring It On, and run either a boot script such as scripts/boot_script.sh and/or start an interactive Binder shell session, depending on the arguments supplied on the command line.

Though smooved itself does not do a whole lot, there is often a significant amount of code running in its process since that is the initial default location in which components are instantiated. For example, the standard boot script creates all of the standard services and BCatalogMirror objects for the user context in the smooved process.

For more custom configurations, you can easily implement a replacement for smooved that only does as little or as much as you need. Note that, however, when multiprocess support is being used (that is, when the Binder kernel module is available), there can be only one process that is the host of the root SContext namespace. This is the process from which the SContext::UserContext() and SContext::SystemContext() methods retrieve their context object.

That said, there shouldn't be a reason why an application couldn't create its own root context and Package Manager, and simply ignore whatever multiprocess capability might be around by not trying to become the host of the root namespace. Provided that its components aren't using SContext::UserContext() or SContext::SystemContext(), that application could even still make use of the normal multiprocess APIs such as creating new processes with SContext::NewProcess() and instantiating components there.

tools

Linux command line tools that are used by the build system to generate other parts of the final system. When building OpenBinder for the first time, these tools will be created as they are needed to build other parts of the package.

makestrings

This command line tool generates string resources for inclusion in a package.

pidgen

The Binder IDL compiler. Takes IDL files as input, and generates C++ headers and implementations as output. See pidgen for more information.

Note that in the OpenBinder build system, as long as the pidgen tool is already available, it will not be considered as a prerequisite for generating sources from the IDL files. That is, if you modify the pidgen tool, this will not automatically cause it to be re-run on the IDL files. To force it to be run, you can use the pidgen goal, such as "make user pidgen".