Communication with peripherals is usually referred to as input and output, abbreviated I/O in the literature. The kernel must deal with three problem areas when implementing I/O for peripherals. Firstly, the hardware must be addressed using a variety of methods depending on the specific device type and model. Secondly, the kernel must provide user applications and system tools with ways of accessing the various devices. Wherever possible, a uniform scheme should be adopted to keep programming effort within limits and to ensure that applications are able to interoperate regardless of the particular hardware approach. Thirdly, userspace needs to know which devices are available in the kernel.
Communication with peripherals is layered as illustrated in Figure 6-1.
Access to each individual device is performed via abstraction layers arranged hierarchically. At the bottom of the hierarchy is the device itself, which is attached to other devices and the system CPU by means of a bus system. Communication with the kernel follows this path.
Before we examine the relevant algorithms and structures in the Linux kernel, it is worthwhile taking a brief look at how expansion hardware generally works. For detailed descriptions, readers are referred to hardware-specific publications such as [MD03].
Continue reading here: Expansion Hardware
Was this article helpful?