RCE/COB Gen3 MiniWorkshop: May 2, 2014

There will be a mini-workshop at SLAC on May 2, 2014.

See RCE/COB Gen3 MiniWorkshop for more information.

  --Jim Panetta and Gregg Thayer

Tag core2.2b created

Yesterday I tagged all projects in the DAT SVN repository with the tag core2.2b. This tag was made to take a snapshot of the current state of affairs with respect to the DPM 440 development so that DTM 440 development can proceed. It is not a milestone release and is not thoroughly tested.

Execute /afs/slac/g/cci/cobdb/bin/interpreter to start the DB front end. This will be our production database so you'll need to be reasonably careful with it, though it is backed up by db-admin once a day.

The 'help' command will open this Confluence page as a tab in your default browser.

- Steve

New tag core2.2 --- COB (dpm,dtm) compatibility

At 2:30 or so today, I tagged the packages IPMC, bin, bootstrap, cm, configuration, firmware, gdb, oldPpi, platform, ppi, rtems, service, tool, workspace and xmd as 'core2.2'

Changes from core2.1:

All projects

Support for bldInfo (Saving build information in the modules)


New project: IPMC core code and build system


New project: Scripts for /afs/slac/g/cci/bin


ELF file support, BSI support, I2C support


New project: Transitional package for old CIM code – Support for foundry switch configuration


ELF file support, CM module support, FCI moved to service


New project: Scripts and bmm/ncd files for building loadable firmware images (.bit/.mcs) files using bootstrap


New project: Useful scriptlets for GDB debugger


CM support, feature tests.


BSI support, rescue core, use native Threads


Small bugfixes (CCI-30, CCI-31, CCI-32, CCI-38)


Split start() into startDl() and startBl(), RTEMS improvements


BSI support, CM support, FCI moved from configuration, runTask overhaul, bugfixes (CCI-9, CCI-34, CCI-41, CCI-42)


CM support, linux thread support bugfixes (CCI-9, CCI-36)


CM support, Link scripts moved to make/, bldInfo support, MsgLog/Syslog sections in linker scripts, Removed managers (obsolete)


New project: Useful scriptlets for XMD debugger

– Jim

I've modified the build system so that all our executables, modules and libraries now contain their build date and svn compact 'version number' (see svnversion). You can retrieve these values using the bldDate() and bldRevision() functions in the appropriate namespace. For executables, the appropriate namespace is the default one.

I've also modified initTasks() to print out these values to the syslog at initialization time.

RTEMS 4.10.2 is available

I updated, built and installed RTEMS 4.10.2 at /afs/ The source is in AFS, but the build and installation (target) directories are located on the Lab 1 server (rdsrv101), which are accessible via soft links from the AFS location (these are of course only valid from Lab 1 machines).

Let me know if you have any problems with this installation.


At about 12:25 today I made a core2.1 tag from the trunk of each of the projects workspace bootstrap, configuration, oldPpi, platform, ppi, rtems, service and tool. Then I checked in some changes to service/shell and configuration/fci that make the System container burn the entire ELF object to flash without unpacking it.

  • Steve
CTK Development rack page

The CTK Development Rack page has been created to contain docs on what crates/RCEs are in the CTK development rack at SLAC.

I've just added a tag named "core2.0" to all projects in the new repository. It corresponds to revisions no later than 154, being the state of the repository at 00:00 on 2011 June 1. I'll shortly be committing changes to configuration/fci which eliminate the dependence on the configuration flash routines in block RAM. I'm also incrementing the core version at the head to 2.1.

RTEMS 4.10 gnu tools now on AFS

The powerpc-rtems4.10-* tools are now available on AFS under /afs/slac/g/cci/packages/gnu (which is a softlink into a new volume). The versions installed for LAB 1 are linked to /afs/slac/g/cci/packages/gnu_lab1, but are really on /reg/common/package/gnu which is local to LAB 1.

A copy of the development core (2.0+) was built with these tools and booted successfully on rce54.


The head of the repository for rceapp/ now makes the experimental core version 2.0.


  • Tasks started with runTask from the shell now inherit the shell's definitions of the C stdio streams stdin, stdout and stderr. printf(), fprintf() et al. used from the child task now output to the telnet socket instead of to the in-memory syslog.
  • If you use the version of Logger() now in RCE::service it too will output to the telnet socket. Modules run with runTask no longer need to initialize the logging package.
  • New services in rce/service (namespace RCE::service):
    • EnumInfo. A template designed to make it easier to work with enumeration types. See rce/ppi/PortType.hh for an example of how to use it.
    • Logging service.
      • I've copied classes Logger, LoggerImpl and LogMessage from quarks.
      • You no longer need to initialize logging in modules run using runTask.
      • PtyLogger isn't copied, instead there is StderrLogger which is active by default.
      • Use class LoggingGuard to change the logging implementation or the severity threshold for a block of code.
    • Notepad. Each instance of Notepad tries to allocate one of the 16 notepad slots available under RTEMS; the class tracks which slots are in use. Each slot is a 32-bit value inside the task control block which therefore varies from task to task without the extra overhead of RTEMS task-variables.
    • Once. Runs an initialization function exactly once no matter how many tasks are competing for it.
    • Semaphore (Semaphore-new.hh). A re-implementation of the old Semaphore class.
    • SemaphoreGuard. Makes sure that a Semaphore is held only as long as the guard instance exists. Used to guarantee that a Semaphore is released when a block of code is exited in many places (throws, returns, gotos).
    • StringBuffer. Assembles a dynamically allocated C-string from smaller pieces, with formatting.
    • readAll(), writeAll() (rwall.hh). Used with devices like sockets which may exit from read() and write() without transferring all the data you asked them to (even when no error occurs).
    • Thread (Thread-new.hh). An abstract base class for managing tasks; you derive a class and implement the virtual function body(). New Threads inherit the C stdio streams from the creating task. If that task is also managed by Thread the new Thread can inherit the logging implementation and RTEMS priority as well. Class Thread uses a Notepad slot to keep a pointer to the Thread instance used to manage a task; the slot can be read with the static member function currentThread() even in code that is not in a Thread-derived class, e.g., library code. In your derived classes you can place extra data members which gives you thread-local storage without the overhead incurred by RTEMS' task variables. If your code fails to catch a C++ exception even at top level then the underlying RTEMS task is suspended.
SVN repository now on AFS

Yesterday we moved our SVN repository. There is a symbolic link at the old location pointing to the new. I've updated the Confluence page on the repository.

The e-mail from Jim:

Hi all,

Currently the SVN repo for the RCE is in /reg/g/npa/svnrepo on the main server
in the rack. This does not seem to be well backed up, so we are going to move
it to an AFS partition that Ric set up.

Your SVNROOT variable is currently: file:///reg/g/npa/svnrepo
The new location will be file:///afs/slac/g/cci/svnrepo

I plan on making this move after COB today (probably starting around 6:30) if
there are no objections.


Core 1.6 tagged

I've just made the tags "core1.6" from the heads of release/, rce/, rceusr/, rceapp/ and quarks/.

Features of the new core:

  • Revamped and better documented rtems_configure_*.cc.
  • The core version and RTEMS object quotas are printed in the syslog just after a reboot.
  • The addCommand command in the shell allows you to add shell commands dynamically.
  • PGP init code can be called more than once; it will kill and restart existing service tasks.

The plain, optimized and debugging versions of the core all build and run.

I've copied the current head of rce/trunk to rce/branches/new-ppi-interface to create a branch for the code described here. The branch appears starting at revision 1313 of the repository. For now only the RCE project has such a branch but I may have to add it to other projects later on.

The new package ppi/ will contain the actual interface code. The logging service code from quarks will be moved into rce/service. The core-making code from rceapp/ will be moved to rce/core since the core will no longer be built in the same way as an application (see the JIRA issue PTC-13).

Third party code area for RCE project

I've set up an area on the lab1 system for third party code that we use for the RCE project. The directory /reg/g/rce/packages/ is set up like a /usr/local, and currently contains the following 3rd party packages:

  • rtems 4.9.2
    • Copied from /afs/slac/g/npa/package/rtems/4.9.2 so that we can actually see the source on the .6 subnet...
  • gdb 6.8
    • With RTEMS stub patch so we can use gdb over TCP with an RCE
  • libxml2 2.7.7
  • python 2.6.6
  • swig 2.0.1
  • QT 4.7.0
  • sip 4.11.1
  • PyQT 4.7.7
  • cfitsio 3.25.0
  • numpy 1.5.0
  • pyfits 2.3.1
  • ds9 9.6.2
    • ds9 is an astronomy package that reads and displays FITS image files

To use these:
setenv PATH /reg/g/rce/packages/bin:$PATH
setenv LD_LIBRARY_PATH /reg/g/rce/packages/lib:$LD_LIBRARY_PATH