Embedded system software can be characterized by two extreme cases. In the first case, the software driving the system might be a totally customized, application specific package, with very narrow focus. At the other end of the spectrum we might find the case with an application specific software package that lies on top of an underlying, somewhat general purpose embedded OS, which provides various capabilities for the application from its general tool set.
In the first case, the extra overhead of the general purpose OS might be undesirable, particularly if memory size is extremely limited. On the other hand, the situation with an underlying OS should offer flexibility in design, easier maintenance, and less reinvention of the wheel. With the consistent historical trend being toward more RAM and FLASH ROM in smaller chip real estate (and much cheaper as well) the embedded OS becomes more attractive. However, the embedded OS has traditionally had another drawback - relatively high cost. This raises the per unit cost so that the OS once again becomes undesirable. The OS-resident alternative could prove non competitive in market price or, in the case of a relatively under capitalized startup, out of reach in terms of initial development cost. Hence, the expense of an embedded OS may force a choice based on economics rather than technical merit.
This explains the impetus for an embedded version of Linux. In this course we look at a particular example, uClinux. As expected, the source code is open. Clearly, a product like uClinux fills a need because of its cost advantage. There is, however, another important advantage. Consider a developer, using a system with an embedded OS, who has run up against an intractable bug with the application specific software under construction. It is possible that the bug is in the software under development, but could also be in the OS or based on a misunderstanding of some aspect of the OS. It can be extremely helpful to have access to the actual OS source code and to the community of fellow developers via the appropriate Internet list.
For information on compiling and working with the kernel please check: