An Introduction to Embedded Linux Development, Part 1

Part 1 in a series on embedded development explains the purpose of the project and outlines hardware options

Over the last decade, a sea change has occurred in the
world of embedded systems, driven by the appearance of
sophisticated new products such as PDAs and cell phones and
by the continual increase in the amount of resources that
can be packed into a small form factor. The traditional
small, narrowly focused embedded systems retain their
significant presence, but these newer arrivals can
capitalize on embedding a full-featured operating system.
The operating system provides a wide selection of
capabilities from which to choose. For example, wireless
Internet connectivity and a GUI already are built in. Only
a few years ago, embedded operating systems typically were
found only at the high end of the embedded system
spectrum.

Linux, available for many architectures, is an obvious
candidate for an embedded system, and it already is being used widely
in this area. Its open nature makes it particularly
attractive to developers. Development tool suites have
begun to appear in response to the perceived need, although
one can work without such luxury and employ less integrated
tools already available in Linux. New embedded
systems companies using Linux have opened for business, and
various older embedded systems companies have added Linux
to their product line.

Assuming the technology sector of the economy
continues to recover, many opportunities for software engineers and
programmers should develop in this general area of embedded systems.
Many of these potential developers have worked with desktop systems,
however, but not with embedded systems. How high is the barrier to making the switch? It
used to be that each embedded system developer needed to be
somewhat of a hardware guru. However, with a resident
operating system, an embedded system project can get by
with perhaps one hardware guy and then add application
developers as needed. In that scenario, the hardware
knowledge is not a barrier, because the hardware guy becomes
a shared resource--and others pick up whatever
superficial hardware knowledge is efficient for their
tasks. In short, in-depth hardware expertise is not a
barrier. However, some familiarity with the development
environment is necessary. The intent of this article series
is to provide enough of the basics to get a reader started.

Choosing a System

If we're going to learn about an embedded Linux development
environment, it's best to do so as a hands-on process. A
careful reading of these articles without the hands-on
component still has some value, though. The typical reader probably has
a Linux box to use as a development work station but does not
have an embedded target. Let's discuss options for incorporating a target.

Option 1: Stay within the environment of your Linux box and choose a
target such as a floppy disk, a CD-ROM, a USB pen drive or something
similar. This option offers some prototypical features of what we would
like to learn, but it is only a small start.

Option 2: Choose a PDA known to have the capability to
support Linux. The Sharp Zaurus SL-5500 comes to mind. It
comes with Linux installed, has an active developer
community and offers a rather full set of features. Because
it is not the most recent Zaurus to hit the market, it can
be found at significantly discounted prices. This target
is much more prototypical than those suggested in Option 1. However,
it still falls short of what we ultimately want. In
particular, if we choose this option, we won't have the opportunity to learn much
about the bootloader, an important topic.

Option 3: Find a relatively
affordable single-board computer (SBC) known to support Linux. This gives us a
truly typical target. If we're lucky, we'll find a vendor
willing to work with us. It should be noted that I have
worked with embedded systems but am not a hardware guru. I might
need some input from such a person as this article series evolves.

We are going to go with Option 3. The two other options also offer
significant value, however. In fact, the author has a beta version
of a course that explores these two options, currently located
here. Material
based on this series of articles eventually will be added
to that on-line course.

I gave a presentation on the beta version of the
aforementioned course at the Real World Linux Conference
2004 in Toronto. There, I met Iain Galloway from
Engineering Technologies Canada
Ltd.. Our discussions led me to choose an SBC from that company
to meet Option 3, above. I chose the LBOX with uClinux, which features a
Motorola Coldfire MCF5272 processor, Flash memory, a serial port, a fiber port,
up to three 10/100 Ethernet ports and more. It's ready to go without
first needing to build it into something else. That is, you can power it up
with any supply in the 5-12 volt range. The LBOX also has a full
expansion port, allowing easy experimentation.

It should be noted that I have no financial connection to
Engineering Technologies Canada. The LBOX simply looked like it was
a suitable product for which I could receive appropriate help
for any glitches encountered along the way. Further, Engineering
Technologies Canada is willing to work with students at my institution. In
particular, the company is willing to donate some new add-on
hardware in exchange for open-source code that would
enhance its value--a good deal for both parties.

Part 2 of this series will describe the complete hardware
setup comprising our development environment with LBOX as the target
and then show how to bring it to life.

Dr. Richard Sevenich is a Professor of Computer Science at Eastern
Washington University in Cheney, Washington. There, he teaches courses in
operating systems, compiler design and assembly language. He has given
presentations at LinuxWorld Expo, O'Reilly's Open Source Conference and
RealWorld Linux. Additionally, he gives occasional training courses in
Linux device drivers and embedded Linux development.

The more articles on embedded linux, the better. I often have difficulty with some of the books on this topic, as I'm not a computer engineer, but a programmer. I've always wanted to dabble in embedded systems but find it difficult to know where to begin (I know there is linuxdevices.com, but their into-guide to embedded systems is a bit outdated, no?).

---> take hardware readily available for 50-60 $ (the linksys wrt54g or the linksys wrt54gs wireless router), load the firmware
from the guys at sveasoft, and you have a real linux router with kernel 2.4, iptables, ebtables and lots of wireless commands.
The absolutely cheapest solution in my opinion.

is nice to finally see an article (series) on embedded systems.
My first attempt at building an embedded sys was early in 1999
although im not an expert , i was able to build some nice systems
routers, video boxes, etc , out of ordinary computer hardware.
i think it would be appropiate here to mention that i couldn't have done many of this projects without the help of busybox.