2.1 Types of Hosts

In Chapter 3, I cover the hardware most commonly found in embedded Linux targets. Each possible target system can be developed by a wide variety of hosts. In the following, I discuss the types of hosts most commonly used, their particulars, and how easy it is to develop embedded Linux systems using them.

2.1.1 Linux Workstation

This is the most common type of development host for embedded Linux systems. It is also the one I recommend, because developing embedded Linux systems requires that you become quite familiar with Linux and there is no better way of doing this than using it for your everyday work.

A standard PC is your most likely Linux workstation. Do not forget, nonetheless, that Linux runs on a variety of hardware and that you are not limited to using a PC. I, for example, regularly use an Apple PowerBook running Linux for my embedded work. It lacks an RS232 serial port, but this is easily fixed by adding a USB serial dongle.

You may use any of the standard Linux distributions such as Debian, Mandrake, Red Hat, SuSE, or Yellow Dog on your host. In fact, I assume you are running a common distribution throughout this book. As I said in Chapter 1, you do not need an embedded Linux distribution to develop embedded Linux systems. This book provides you with all the necessary information to build your own development environment.

Though I've made an effort to keep the text host-distribution independent, the instructions in this book are slightly tilted towards Red Hat-type distributions. You may therefore need to make minor modifications to a few commands, depending on the distribution installed on your host. Wherever possible, distribution-dependent commands are presented as such.

Of course, the latest and fastest hardware is every engineer's dream. Having the fastest machine around will certainly help you in your work, but you can still use a relatively mild-powered machine with appropriate RAM for this type of development. Remember that Linux is very good at making the best of the available hardware. I, for instance, often use a Pentium II 350MHz system with 128 MB of RAM for development.

What you will need in large quantity, however, is storage space, both disk space and RAM. In addition to the space used by your distribution, you should plan for 2 to 3 GB of disk space, if not more, for your development environment and project workspace. An uncompressed kernel source tree, for example, which is one of the many components you will have in your project workspace, uses more than 100 MB of space before compilation. After compilation, this grows even further. If you are experimenting with three or four kernels at the same time, you can therefore easily use up to 500 MB of disk space for kernel work alone.

As for RAM, some of the GNU toolchain compilation steps require large amounts of it, especially during the build of the C library. I recommend 128 MB of RAM and 128 MB of swap space for the host.

2.1.2 Unix Workstation

Depending on your circumstances, you may be required to use a traditional Unix workstation. Solaris workstations, for instance, are very common among telecommunication solutions developers. Although the use of such workstations is much less common than the use of Linux workstations for developing embedded Linux systems, it is still feasible.

Because Linux itself is very much like Unix, most of what applies to Linux also applies to Unix. This is especially true when it comes to the GNU development toolchain, since the main GNU tools such as the compiler, the C library, and the binary utilities (more commonly known as binutils) were developed and used on traditional Unix systems even before Linux existed.

Therefore, the descriptions that follow in the rest of this book should also work fine on any Unix workstation. I say "should" because there may be slight differences that you may have to resolve on your own. The recommendations I gave above for a Linux workstation in regards to storage space apply to Unix workstations as well.

2.1.3 Windows (2000, NT, 98, etc.) Workstation

Almost a decade ago, embedded system development shifted towards Windows workstations. Many developers have since become used to working on this platform and many new developers have been initiated to embedded systems development on it. For these and other reasons some developers would like to continue using Windows workstations for, ironically, developing embedded Linux systems.

At first glance, it would seem that the main problem with this platform is the availability and use of the GNU development toolchain. This is not a problem, because Red Hat provides the Cygwin environment, which is the Windows-compatible GNU toolchain, and some people have used it to build cross-platform tools for Linux. Mumit Khan has detailed the procedure to build a cross-platform development toolchain for an i386 Linux target on a Windows host at http://www.nanotech.wisc.edu/~khan/software/gnu-win32/cygwin-to-linux-cross-howto.txt. Although attempts to use this procedure for other Linux targets have not been "officially" reported, there are no obvious reasons for it to fail.

If you really need to continue using a Windows workstation and would like to have an easy way of working in a Linux environment to develop a Linux target, you may want to use emulation and virtualization software such as VMWare or Connectix. In this case, you can run Linux in a virtual environment while your main workstation is still Windows.

Remember, however, that by continuing to use Windows for your everyday work, you are not getting to know Linux's intricacies. You may, therefore, find it difficult to understand some of the problems you encounter on your Linux target. Also, you may need to get the latest in workstation power and space requirements to get an adequate work environment.