Chapter 5. Enhanced Char Driver Operations

In the chapter about char drivers, we built a complete device driver, which the user can write to and read from. But a real device usually offers more functionality than synchronous read and write. Now that we’re equipped with debugging tools should something go awry, we can safely go ahead and implement new operations.

One of the functionalities that usually complements the need for reading and writing the device is controlling the hardware, and the most common way to perform control operations via a device driver is implementing the ioctl method. The alternative is to look at the data flow being written to the device and use special sequences as control commands. Though this latter technique is sometimes used, it should be avoided whenever possible. Nonetheless, I’ll describe it later in this chapter in Section 5.1.5.

As I suggested in the previous chapter, the ioctl system call offers a device-specific entry point for the driver to issue ``commands.'' ioctl is device-specific in that, unlike read and other methods, it allows applications to access specific features of the hardware being driven--configuring the device and entering or exiting operating modes. These ``control operations'' are usually not available through the read/write file abstraction. For example, everything you write to a serial port is transmitted through the port, and you cannot change the baud rate by writing to the device. That is what ioctl is for: controlling the ...

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.