Writing Device Drivers

Entry Points for Character Device Drivers

Character device drivers normally perform I/O in a byte stream. Examples of devices that use character drivers include tape drives and serial ports. Character device drivers can also provide additional interfaces not present in block drivers, such as I/O control (ioctl) commands, memory mapping, and device polling. See Chapter 15, Drivers for Character Devices for more information.

The main task of any device driver is to perform I/O, and many character device drivers do what is called byte-stream or character I/O. The driver transfers data to and from the device without using a specific device address. This type of transfer is in contrast to block device drivers, where part of the file system request identifies a specific location on the device.

The read(9E) and write(9E) entry points handle byte-stream I/O for standard character drivers. See I/O Request Handling for more information.

The following table lists additional entry points that can be used by character device drivers. For other entry points, see Entry Points Common to All Drivers.

Table 1–3 Additional Entry Points for Character Drivers

Entry Point 

Usage 

Description 

chpoll(9E)

Optional 

Polls events for a non-STREAMS character driver. Additional information: Multiplexing I/O on File Descriptors

ioctl(9E)

Optional 

Performs a range of I/O commands for character drivers. ioctl() routines must make sure that user data is copied into or out of the kernel address space explicitly using copyin(9F), copyout(9F), ddi_copyin(9F), and ddi_copyout(9F), as appropriate. Additional information:

read(9E)

Required 

Reads data from a device. Additional information: 

segmap(9E)

Optional 

Maps device memory into user space. Additional information: 

write(9E)

Required 

Writes data to a device. Additional information: