CYGPKG_RBINIT — provide extra RedBoot initialization


The RedBoot Extra Initialisation (RBINIT) package provides extra default initialization for RedBoot. This may be used to execute a set of initial commands, or to perform any additional platform or system specific initialization. The RBINIT package is aimed primarily at field deployment of production systems rather than at application development.

Building RedBoot

The first step in building RedBoot with RBINIT support is to create a RedBoot configuration appropriate for the target platform. This is somewhat target specific so the appropriate platform HAL or RedBoot documentation should be consulted for further details. Typically RedBoot should be configured for ROM startup.

Given this initial configuration the RBINIT package CYGPKG_RBINIT should now be added to the configuration, using one of the eCos configuration tools. For example with the command line tool this involves using ecosconfig add rbinit.

There are a number of other configuration options which may be changed at this point:

This option causes all output generated during the extra initialization to be discarded. Turn this option off to get output for debugging purposes.
This option selects the priority of the extra initialization routine. The value of this option may either be RedBoot_INIT_BEFORE_NET or RedBoot_INIT_AFTER_NET which, as the names imply, cause the extra initialization to occur either before or after any network device is initialized.

Once RedBoot has been appropriately configured it can be built and installed as usual for the target platform.

Extra Initialization Function

The purpose of the extra initialization package is to execute the rbinit_exec() function. A default version of this function is contained in the rbinit_exec.c file within this package in the source repository.

The default content of this function provides support for loading and executing primary or secondary applications from a filesystem. The default function will first attempt to mount a JFFS2 filesystem named “jffs2” in the RedBoot FIS table. If that fails it will attempt to mount the first partition of an IDE hard disk using a FAT filesystem. Finally if that fails it will attempt to mount a RAM filesystem, although it will be empty. If a filesystem has been successfully mounted, it will attempt to load into RAM and run a program named “app.primary” from the root of the filesystem, and if that fails, a program named “app.secondary”.

A customized version of this function may be provided instead by using one of the following methods:

  • Editing the file directly in the source repository.
  • Adding an equivalent function in your application build and ensure its object file is linked into your application. This will cause the default implementation of rbinit_exec() provided in this package to be overridden. You may wish to use the version in this package as a template to start with.
  • By copying the rbinit_exec.c file into the configuration's build tree and editing it there.