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 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 2.6.26.3 image: arroyo-linux-2.6.26.3. 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-x.y.z.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 2.6.26.3
- 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)
- 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 blog articles that my alter-ego, Chip Overclock, has written about Arroyo:

