Preface
[ 16 ]
pads of your target processor can be multiplexed to dierent functions and how to select the
required muxing option within the Device Tree. This chapter also describes the Pinctrl Subsystem
and the new GPIO Descriptor Consumer Interface. You will develop drivers that control external
devices mapping of peripheral addresses from physical to virtual and writing/reading to/from
these virtual addresses within kernel space. You will also learn to write drivers that control LEDs
using the Linux LED subsystem. Finally, this chapter explains how to develop an user space driver
using the UIO framework.
Chapter 6, I2C Client Drivers, describes the Linux I2C subsystem, which is based in the Linux
device model. You will learn to declare Device Tree I2C devices and will develop several I2C client
drivers throughout this chapter. You will also see how to add "sysfs" support to a platform driver
to control the hardware via sysfs entries.
Chapter 7, Handling Interrupts in Platform Drivers, introduces interrupt hardware and software
operation in Linux embedded processors, explaining how the interrupt controllers and the
interrupt-capable peripheral nodes are linked in the Device Tree. You will develop drivers that
manage interrupts from external hardware. You will learn about deferred work kernel facilities
that allows one to schedule code to be executed at a later time. This scheduled code can run either
in process context using "workqueues" or "threaded interrupts", or in interrupt context using
"softirqs", "tasklets" and "timers". Finally, this chapter shows how an user application is put to
sleep using a "wait queue" and woken up later via an interrupt.
Chapter 8, Memory Management Drivers, explains the MMU (Memory Management Unit), and
the dierent types of addresses used in Linux. Finally, this chapter describes the dierent kernel
memory allocators.
Chapter 8, DMA Drivers, describes the "Linux DMA Engine Subsystem", and the dierent types
of DMA mappings. Several drivers are developed that manage memory to memory transactions
without CPU intervention, using DMA scather/gather mappings and DMA from user space using
the mmap() system call.
Chapter 10, Input Subsystem Framework for Device Drivers, introduces the use of frameworks
to provide a coherent user space interface for every type of device, regardless of the drivers. The
chapter explains in the relationship between the physical and logical parts of a driver that uses a
kernel framework. It focus on the Input subsystem framework, that takes care of the input events
coming from the human user. This chapter also describes the Linux SPI subsystem, which is based
in the Linux device model. You will learn how to declare Device Tree SPI devices and will develop
a SPI client driver using the Input framework. Finally, this chapter explains how to interact from
user space with the I2C bus using the "i2c-tools" applications.
Chapter 11, Industrial I/O Subsystem for Device Drivers, describes the IIO (Linux Industrial I/O
Subsystem). The IIO subsystem provides support for ADCs, DACs, gyroscopes, accelerometers,