Scull’s Memory Usage
Before introducing the read and write operations, we’d better look at how and why scull performs memory allocation. ``How'' is needed to thoroughly understand the code, and ``why'' demonstrates the kind of choices a driver writer needs to make, although scull is definitely not typical as a device.
This section deals only with the memory allocation policy in scull and doesn’t show the hardware management skills you’ll need to write real drivers. Those skills are introduced in Chapter 8, and in Chapter 9. Therefore, you can skip this section if you’re not interested in understanding the inner workings of the memory-oriented scull driver.
The region of memory used by scull, which is also called a ``device'' here, is variable in length. The more you write, the more it grows; trimming is performed by overwriting the device with a shorter file.
The implementation chosen for scull is not a smart one. The source code for a smart implementation would be more difficult to read, and the aim of this section is to show read and write, not memory management. That’s why the code only uses kmalloc and kfree, without resorting to allocation of whole pages, although that would be more efficient.
On the flip side, I didn’t want to limit the size of the ``device'' area, for both a philosophical reason and a practical one. Philosophically, it’s always a bad idea to put arbitrary limits on data items being managed. Practically, scull can be used to temporarily eat up your system’s ...
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.