In the article "Making of a SoC", in PCQ, Oct 2008, I gave an overview'of the System-on-Chip solutions which are essentially an integration of almost all components of a computer into a single integrated circuit. We also saw that the software is an essential component of a Soc.

Today's SoCs power most handheld devices that we see around, including mobile phones, MP3 players, navigation devices etc. The visible parts of the software in these devices are the user interface and applications. But there are other essential software components which are hidden, or embedded inside, which take up substantial development and integration effort. One of the main components is the Operating System.

The Operating System provides an abstraction of the underlying hardware by providing a consistent interface to the user and the application programmer. For example, consider the two implementations of Windows CE 6.0 on a SoC (with similar performance) based on:

Name:  Porting ban OS to a SoC.jpg
Views: 27
Size:  23.1 KB

MIPS CPU core with a USB 2.0

ARM CPU core with a USB 2.0 HW IP from Vendor B (which is quite different from Vendor A)

In both cases, the user experience will be same because the GUI will be uniform. But the biggest advantage is for the application programmer who writes the top level applications for it, e.g. an application to display photos from a USB pen drive.
The programmer doesn't need to bother about the differences in CPU or the USB HW IP, because Windows CE 6.0 provides a consistent middleyvare interface to access files on the USB drive, which show up as a disk drive with a uniform file system'across all drives (which include hard disks, flash memory cards, pen drives etc.). Also, the display mechanism remains consistent through the MFC library, Win32 APIs, or the DirectDraw APIs, irrespec¬tive of the display hardware (LCD controller,'graphics accelerator etc.).