An Introduction to Embedded Linux Development, Part 1
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.
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.