Tuesday, December 22, 2009

Writing Linux Device Driver


User space and kernel space

When you write device drivers, it’s important to make the distinction between “user space” and “kernel space”.

  • Kernel space. Linux (which is a kernel) manages the machine’s hardware in a simple and efficient manner, offering the user a simple and uniform programming interface. In the same way, the kernel, and in particular its device drivers, form a bridge or interface between the end-user/programmer and the hardware. Any subroutines or functions forming part of the kernel (modules and device drivers, for example) are considered to be part of kernel space.
  • User space. End-user programs, like the UNIX shell or other GUI based applications (kpresenter for example), are part of the user space. Obviously, these applications need to interact with the system’s hardware . However, they don’t do so directly, but through the kernel supported functions.

All of this is shown in figure 1.

Figure 1: User space where applications reside, and kernel space where modules or device drivers reside
Figure 1: User space where applications reside, and kernel space where modules or device drivers reside

Interfacing functions between user space and kernel space

The kernel offers several subroutines or functions in user space, which allow the end-user application programmer to interact with the hardware. Usually, in UNIX or Linux systems, this dialogue is performed through functions or subroutines in order to read and write files. The reason for this is that in Unix devices are seen, from the point of view of the user, as files.

On the other hand, in kernel space Linux also offers several functions or subroutines to perform the low level interactions directly with the hardware, and allow the transfer of information from kernel to user space.

Usually, for each function in user space (allowing the use of devices or files), there exists an equivalent in kernel space (allowing the transfer of information from the kernel to the user and vice-versa). This is shown in Table 1, which is, at this point, empty. It will be filled when the different device drivers concepts are introduced.




Events User functions Kernel functions
Load module

Open device

Read device

Write device

Close device

Remove module

Table 1. Device driver events and their associated interfacing functions in kernel space and user space.

Interfacing functions between kernel space and the hardware device

There are also functions in kernel space which control the device or exchange information between the kernel and the hardware. Table 2 illustrates these concepts. This table will also be filled as the concepts are introduced.


No comments:

Post a Comment

Embedded -C

This Provides an insight on embedded C

Embedded Linux

Blog Archive

About Us

My photo
Bangalore, Karnataka, India
Embedded Systems is an independent entity dedicated to developing a globally recognized center for embedded technologies. technology businesses working together within a unique forward-looking collaborative model to build an eco-system of knowledge and expertise in embedded systems. The Consortium for Embedded Systems accomplishes its objectives by using the funds from its member organizations to attract and retain top experts in the target technology areas and to better prepare students for the real-world industry needs. The Consortium for Embedded Systems programs provide direct industry involvement and feedback towards optimizing student courses and laboratory assignments, as well as providing students with access to real-world work experiences while obtaining their degree.