Chapter 3. Char Drivers

The goal of this chapter is to write a complete char device driver. We’ll develop a character driver because this class is suitable for most simple hardware devices. Char drivers are also easier to understand than, for example, block drivers. Our ultimate aim is to write a modularized char driver, but I won’t talk about modularization issues in this chapter.

Throughout the chapter, I’ll present code fragments extracted from a real device driver: scull, short for “Simple Character Utility for Loading Localities.” scull is a char driver that acts on a memory area as though it were a device. A side effect of this behavior is that as far as scull is concerned, the word ``device'' can be used interchangeably with ``the memory area used by scull.''

The advantage of scull is that it isn’t hardware dependent, since every computer has memory. scull just acts on some memory, which is allocated using kmalloc. Anyone can compile and run scull, and scull is portable across the computer architectures on which Linux runs. On the other hand, the device doesn’t do anything ``useful'' other than demonstrating the interface between the kernel and char drivers and allowing the user to run some tests.

The Design of scull

The first step of driver writing is defining the capabilities (the ``mechanism'') the driver will offer to user programs. Since our ``device'' is part of the computer’s memory, we’re free to do what we want with it. It can be a sequential or random-access ...

Get Linux Device Drivers now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.