Boot Linux on the Beagle Board
Creating a functional Linux single-board computer on the cheap
The Beagle Board is a pocket-sized reference board (see Figure 1) containing a Texas Instruments OMAP3530 system-on-a-chip (SoC) processor (ARM Cortex A-8 core) running at up to 600MHz. (Find a link to more system specs in Related topics later in this article.) Tiny reference boards are not themselves necessarily newsworthy—companies such as Gumstix have been providing similar boards for several years, including some based on the OMAP3530 processor. I picked the Beagle Board because it is an inexpensive platform for learning how Linux and small systems work. It is a reasonable alternative for hobbyists designing projects for themselves, academics creating projects for classes, and professionals designing low-cost appliances or thin clients.
Figure 1. The Beagle Board
Building your development environment
Three items are required to boot the Beagle Board:
- A desktop or laptop computer with a serial port (see the sidebar Notes on host platforms for more information)
- A serial connector
- A USB device cable, standard-A to mini-A
The Beagle Board comes with no cables or connectors. See the Beagle Board Shopping List (in Related topics) for a list of required and optional items, as well as links to them. Most of the items shown here are available individually or as a package.
For the serial connection, you need the following components:
- IDC10-to-DB9M serial cable
- DB9F-to-DB9F null modem cable
- DB9M-to-USB cable (optional if your host platform has an RS-232 port)
- USB mini-B male-to-USB A male cable
The combination of the first three cables gives you a serial connection, which enables you to watch and interact with the board's bootloader and operating system through a terminal emulation program on your host platform.
Input and output
For input and output, you need the following items:
- Powered USB 3-port hub with Ethernet
- 5mm barrel power plug-to-USB A male adapter
- USB mini-A-to-USB A female On-The-Go (OTG) cable (optional; lets it be powered over its USB connection)
These items give you the maximum benefit from using a Linux distribution on your Beagle Board. The built-in Ethernet gives you a network connection. The hub itself gives you a USB port for providing power to the Beagle Board with the 5mm power plug.
Keyboard, video, mouse
For keyboard-video-mouse (KVM) functionality, you need the following items:
- HDMI male-to-DVI-D male cable
- Digital monitor
- USB keyboard
- USB mouse
You may be tempted to use a PS/2 keyboard with a converter. Take my advice: buy a USB keyboard. A PS/2 keyboard would probably work with the Ångström Linux distribution, the demo described in this article, but you may well go further than this in the future, and not all distributions include a PS/2 driver.
You may also be tempted to try to use an analog (VGA) monitor or a DVI-D-to-VGA conversion cable. The Beagle Board does not emit the analog signal that would drive this setup, so using a converter or analog monitor would be fruitless. If your monitor does not accept digital (HDMI or DVI-D) input, consider using a TV and a 4-pin S-video cable, instead. Also note that audio does not work acceptably yet on Ångström, so don't spend too much time trying to track down speakers or headphones.
You need at least one SD card to store Linux and its bootloaders. If you do not want to go through the process of downloading the software and partitioning the card, Special Computing (see Related topics for a link) has a deal: You can order a 4GB SD card with the Ångström demo preloaded.
Connecting the components
When you have all of the parts, it's time to start plugging things in. First, connect the serial port by performing the following steps:
- Plug the IDC10 cable into the Beagle Board with the cable's pin 1 going to pin 1 of the connector (the pink wire on the ribbon cable faces the outer corner of the board).
- Plug the DB9M end into the null-modem DB9F/DB9F cable.
- Plug the DB9F/DB9F cable into your host platform, if it has a DB9 port. Otherwise, plug the cable into a DB9M/USB cable, then plug that into the host.
Next, connect USB and power:
- Plug the USB mini-A end of the mini-A/USB A female cable into the Beagle Board's USB mini-A connector.
- Plug the powered USB hub into the USB A female end of the same cable.
- Plug the USB end of the USB/5mm barrel cable into the hub.
- Plug the 5mm barrel end into the Beagle Board's barrel connector.
Note: Do not connect power to the hub yet.
Now, connect the keyboard, mouse, and video:
- Plug the HDMI end of video cable into the Beagle Board's HDMI connector.
- Plug the DVI-D end into your monitor.
- Plug the USB keyboard into the hub.
- Plug the USB mouse into the hub.
Figure 2 shows the connected components.
Figure 2. The connected Beagle Board
Now, you're ready to set up the console.
Setting up the console
The only way to know what's happening on the board is to watch and interact with its serial output through a console. You do this by setting up a terminal emulation program. When the serial port is configured on the host platform, any activity on the board is displayed on the console, including prompts for bootloader commands, operating system login prompts, and error messages.
Setting up the console on Linux
To set up a serial console under Linux, use a terminal emulation program such as minicom, as shown here:
- Install minicom on your system (see Related topics for a link).
- Launch into setup as root by running the command
sudo minicom -s.
- Select Serial Port Setup, and then press Return.
- Set the serial port by typing
Ato select Serial Device, change to the /dev/ttyS0 directory, then press Return.
- Ensure that communications settings (
E) are 115200 8N1.
- Turn Hardware Flow Control off by typing
- Ensure that Software Flow Control is also off.
- Press Return to go back to the main menu.
- Choose Save Setup as dfl to use these settings by default.
- Choose Exit to exit the setup section and launch minicom with these settings.
Setting up the console on Windows
To set up a serial console under Windows XP or Vista operating system, I recommend downloading PuTTY, a terminal emulation program for Windows available at no cost (see Related topics). Configure PuTTY for serial use by clicking Serial in the Session window. Next, click Serial at the bottom of the Category pane. Set the speed to 115200, the data bits to 8, the parity to None, the stop bits to 1, and flow control to None.
To find out whether your console is set up properly, apply power to the board, either by plugging in the cables as shown in Figure 2 or by simply plugging a USB standard-A-to-mini-A device cable directly into the Beagle Board, powering it through the cable using OTG power. If all is correct, the text in Listing 1 appears on the console.
Listing 1. Bootloader output
Texas Instruments X-Loader 1.41 Starting OS Bootloader... U-Boot 1.3.3 (Jul 10 2008 - 16:33:09) OMAP3530-GP rev 2, CPU-OPP2 L3-165MHz OMAP3 Beagle Board + LPDDR/NAND DRAM: 128 MB NAND: 256 MiB In: serial Out: serial Err: serial Audio Tone on Speakers ... complete Hit any key to stop autoboot: 0 OMAP3 beagleboard.org #
The prompt at the end of the output is from the second-stage bootloader, waiting for instructions on how to load the operating system.
Setting up the operating system
The host system is ready and the Beagle Board is set up. All you need now is an operating system.
Downloadable binaries exist for many Linux distributions that run on the Beagle Board, with Ångström, Maemo, Ubuntu, and Android being the most popular. All are under active development, and all have been demonstrated in public by professionals and hobbyists alike. This article covers the Ångström distribution, which is well tested and lean enough that it turns the Beagle Board into a viable Linux desktop machine and not-so-thin client. See Related topics for links to video demonstrations as well as to the Ångström binary download.
The Ångström Linux distribution
The Ångström distribution contains four major components. They are shown below in the order in which you must copy them to the SD card, as the bootloaders must appear first on the card:
- First-stage bootloader
- Second-stage bootloader
- Linux boot image (uImage)
- Linux file system
The Beagle Board's firmware contains a first-stage bootloader called X-loader. X-loader can also be loaded from a removable storage space (such as an SD card) in a signed file called MLO. X-loader bootstraps the system only enough to load the second-stage bootloader, which otherwise would not fit into memory.
The second-stage bootloader provided in flash memory on the Beagle Board is U-boot, although most distributions provide their own version of U-boot in a file called u-boot.bin. U-boot initializes the system, then boots the Linux kernel. It can also be run from the console.
The Linux boot image, named uImage, finally boots the Linux kernel, which resides in the Linux file system in the /boot directory.
There are several ways to set up the file system; the method shown here requires a bit of work at the beginning but is flexible. Also note that this is the way the pre-built Ångström SD cards arrive if you order them from Special Computing.
Download the distribution
To assemble the Ångström distribution, you need the following files:
Double-check that each of the files has downloaded properly. Navigate to
the download directory in a terminal window, type
md5sum *, then compare the values for each file
with the contents of the file md5sum.
Partition the card
This method creates two partitions on the SD card. The first is a FAT partition that hosts the bootloaders and the kernel image. The remaining space on the card is dedicated to a third extended file system (ext3) partition.
You must create two disk partitions on the SD card. The FAT partition contains the bootloaders and the raw Linux kernel image. FAT is used for the boot partition, because it's a very basic file system that is straightforward and well understood by the Beagle Board by default, requiring no intelligence from the bootloader or operating system.
The Linux root file system, however, can be in any file system format understood by the Linux kernel. This example shows ext3, but the Journaling Flash File System version 2 (JFFS2) and SquashFS are also good choices, particularly for flash-based storage systems.
Now, insert the SD card into your host platform and create two partitions
on the SD card using your favorite partition tool. Create a small,
bootable FAT partition, followed by a larger ext3 partition. Detailed
instructions for this process using the
utility are available on the
Beagle Board community page.
Follow the instructions to the letter, naming the FAT partition
BeagleBoot and the ext3 partition
Remove and reinsert the card, and the two new partitions should mount on your host platform.
Copy the files onto the disk
Now you're ready to copy the files onto the disk. Make sure you copy them in this particular order:
- Copy MLO onto the bootable FAT partition.
- Copy u-boot.bin onto the bootable FAT partition.
- Copy uImage onto the bootable FAT partition.
- Extract the root file system into the ext3 partition. The easiest way
to do this is from the command line:
cd ext3FileSystem; tar xvjf downloadLocation/Angst*.tar.bz2
Unmount the partitions
To unmount the partitions, run the following command:
cd ~; sync; sudo umount BeagleBoot; sudo umount BeagleRootFS
Finally, remove the SD card, then insert it into the Beagle Board.
With the serial console visible on your host platform, plug the power cable into the USB hub. The text shown in Listing 1 should appear on the console. (Note that if your Beagle Board was purchased after March 2009, it's likely a Rev C or later board with 256MB or more of DRAM. This article was researched using a Rev B7 Beagle Board with 128MB DRAM. The process is identical for all revisions.)
There are two ways to instruct the Beagle Board to boot Linux from the card:
- Remove power, then hold down the user button (closest to the outside of the board) while reapplying power.
- Type the following lines at the U-boot prompt to set the environment
variables for booting from the card:
setenv bootargs 'console=ttyS0,115200n8 root=/dev/mmcblk0p2 rw rootwait'
setenv bootcmd 'mmcinit; fatload mmc 0 80300000 uImage; bootm 80300000'
Note that you can write these environment variables to memory to instruct the Beagle Board to boot always from flash memory by typing
saveenvbefore booting with the
The first time Ångström boots, it inspects the buses on the system and initializes the keyboard, display, mouse, Ethernet adapter, and any other peripherals, then finds the correct drivers to use. Subsequent boots are much faster.
The image in Figure 3 eventually appears on the display after the boot graphic.
Figure 3. Ångström booting on the display
Use the USB keyboard to provide a user name and password. If you log in
from the serial prompt, you can use
root as the
user name with a blank password.
Congratulations! You now have a fully functional Linux system running a Web
browser (Mozilla Firefox), an e-mail client (Evolution), and several other
applications as well as a full set of desktop tools and a package manager
opkg). The best part is that this system is
running on a tiny, inexpensive, fanless computer that consumes less than 4
Watts total—probably about 1/10 of the power consumption of the
monitor and 1/25 that of the host system. You have built a thin client. It
is time to start playing with it. Come join the communities and share your
- Check out beagleboard.org, the main portal for all things Beagle Board.
- The Google Wiki BeagleBoard pages have information and pointers to just about everything you need to know about the Beagle Board. For Linux in particular, click the Linux Hints link at the bottom of the page.
- The eLinux Wiki BeagleBoard pages provide more information on the Beagle Board.
- Check YouTube for video demonstrations:
- Ångström on a tiny projector by Koen Kooi, one of the authors of the Ångström distribution
- This author's favorite, an Iron Man suit powered by a Beagle Board running Ångström
- An informative interview with Koen Kooi and Mans Rullgard
- Special Computing carries a number of Beagle Board accessories, including Ångström preloaded on an SD card.
- Minicom is a free terminal emulator for Linux.
- PuTTY is a free terminal emulator for Windows.
- The Beagle Board Shopping List covers all the items you must source to get the Beagle Board to work. The list provides many notes from the community.
- Although not specific to the Beagle Board or to Ångström, "Inside the Linux boot process" (developerWorks, May 2006) provides a good overview of the multi-step booting process used by many Linux distributions.
- In the developerWorks Linux zone, find more resources for Linux developers, and scan our most popular articles and tutorials.
- See all Linux tips and Linux tutorials on developerWorks.