Compiling the Kernel 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 (Operating System), which provides various capabilities for the application from its general tool set. In the first case, the extra overhead of the general purpose OS (Operating System) might be undesirable, particularly if memory size is extremely limited. On the other hand, the situation with an underlying OS (Operating System) 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 (Operating System) becomes more attractive. However, the embedded OS (Operating System) has traditionally had another drawback - relatively high cost. This raises the per unit cost so that the OS (Operating System) once again becomes undesirable. The OS (Operating System)-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 (Operating System) 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 (Operating System), 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 (Operating System) or based on a misunderstanding of some aspect of the OS (Operating System). It can be extremely helpful to have access to the actual OS (Operating System) 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: Basic Compilation ELF and Flat file Support Root File System Structure kconfig Device files Main System Applications Adding User Applications Benchmarks vendors