Arroyo is basically Diminuto Phase II. It runs on the same hardware and firmware as Diminuto, an Atmel AT91RM9200-EK Evaluation Kit (EK) Single Board Computer (SBC).

Arroyo/Diminuto with Three "Disk" Drives

Arroyo differs from Diminuto in a few important respects.

  • Where Diminuto has a RAM-resident root file system, Arroyo has a EXT3 journaled root file system that lives on a Secure Digital (SD) card or a USB thumb drive.
  • Where Diminuto is built around the uClibc library which has a reduced memory footprint, Arroyo is built around the full Standard C Library.
  • Where Diminuto depends on the busybox shell, Arroyo incorporates a full bash interpreter.
  • Where Diminuto uses the Buildroot GNU-based tool chain, Arroyo uses a free, pre-built GNU-based tool chain, Sourcery G++ Lite, from CodeSourcery.
  • Where Diminuto is based on the ARM Old Application Binary Interface (OABI), Arroyo is based on the newer ARM Embedded Application Binary Interface (EABI).
  • Where Diminuto lacks tools to manage its storage devices, Arroyo includes the e2fstools file system utilities and the fdisk partitioning tool.

Arroyo is identical to Diminuto in other useful respects.

  • Arroyo runs on the identical hardware and firmware as Diminuto.
  • Arroyo is built using the same Linux server and booted using the same TFTP server as Diminuto.
  • Arroyo uses all open source software just like Diminuto.
  • Arroyo runs the Desperado embedded C++ library and John Sadler's embedded Forth interpreter Ficl just like Diminuto.
  • Arroyo is provisioned identically to Diminuto using the same U-Boot environmental variables which can be saved persistently to flash.

Arroyo comes in two basic pieces: the kernel that is booted via TFTP, and the root file system image that is installed on a Secure Digital (SD) card using a separate Linux server.

  • Here is the bootable Linux image: arroyo-linux- This kernel has a single patch applied to the very early boot code (the same patch as required by Diminuto).
  • Here is a compressed EXT2 file system image: arroyo-root.ext2.bz2. It can be easily installed on a SD card and used as a disk on Arroyo.
  • Here is a log of Arroyo booting: arroyo-boot.txt. It displays all of the U-Boot  environment too.
  • Here is a tarball of the patches and utility source code for Arroyo: arroyo-1.0.0.tgz. This includes the patch I made to the kernel, and a makefile that has the commands I used to install the root file system image on the SD card.
  • Desperado is an open source collection of C++ classes implementing design patterns I've found useful in embedded systems. It has been ported to Arroyo.
  • Here is a collection of photographs and screen snapshots of the board and the running system.

If you care to re-build Arroyo (and I encourage students to try this), you will need the following pre-requisites.

  • genext2fs  (which you will run on your host server to build the EXT2 root file system image)
  • bash 3.2
  • busybox1.11.2
  • e2fsprogs 1.41.2
  • fdisk 1.0
  • ficl 4.0.31
  • linux
  • parted 1.8.8 (solely for libparted.so which is used by fdisk)
  • strace 4.5.15 (later versions at least up to 4.5.18 are broken for the ARM EABI target)
  • Sourcery G++ Lite   arm-2008q1 (for both the toolchain and the pre-built libraries for the ARM EABI target)
  • Diminuto (Arroyo shares common utilities like getubenv and a shared library with Diminuto, although built with the Arroyo toolchain)   (N.B. The Diminuto library is a constantly moving target. The pre-built EXT2 root file system image probably has a much older version of the library. You should consider rebuilding the library and replacing it and the few binary executables that depend upon it in your EXT2 root file system image.)
  • Desperado (Arroyo makes use of the coreable utility from Desperado)

and examine closely the Makefile in the Arroyo tarball.

This distribution has the following open issues (that I know and care about, anyway):

  • I tried getting the Java Virtual Machine (JVM) in the Embedded ARM J2RE.from Sun Microsystems working, and it sorta does, partly. But a thread of it throws a SIGILL (Illegal Instruction). Haven't debugged this yet. (I've routinely run the Embedded PowerPC J2RE on a PowerPC-based embedded Linux system; cool stuff!)

Here are some articles that my alter-ego, Chip Overclock, has written about Arroyo:

Presentation: Implications of Memory Consistency (or Lack of It) Models for Java, C++, and C Developers (more)

Seminar Review: Jack Ganssle, Better Firmware Faster, 2006 (more)

Article: Depending Upon the Kindness of Strangers: Notes on Open Source and Free Software (more)

Article: Vaster than Empires and More Slow: The Dimensions of Scalability (more)

Article: In Praise of do-while (false) (more)

Book Review: Joel Spolsky, Best Software Writing I, Apress, 2005 (more)

Presentation: Robert Austin, Measuring and Managing Performance in Organizations, Dorset House, 1996 (more)

Book Review: Joel Spolsky, Joel on Software, Apress, 2004 (more)

Presentation: James Surowiecki, The Wisdom of Crowds, Doubleday, 2004 (more)

Travelogue: China Journal: Dancing with a Sleeping Giant (more)

Unless otherwise specified, all contents Copyright © 1995-2015 by the Digital Aggregates Corporation, Colorado, USA.
Such copyrighted content is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 License.