Note: LINUX DRIVER DEVELOPMENT FOR EMBEDDED PROCESSORS -SECOND EDITION-
The flexibility of embedded Linux, the availability of powerful, energy efficient processors designed for embedded computing and the low cost of new processors are encouraging many industrial companies to come up with new developments based on embedded processors. This book will teach you how to develop device drivers for Device Tree embedded Linux systems. You will learn how to write different types of Linux drivers, as well as the appropriate Application Program Interfaces (APIs) and methods to interface with kernel and user spaces.
This book is meant to be practical, but also provides an important theoretical base. Nearly thirty drivers are written and ported to three different processors. You can choose between the NXP i.MX7D, Microchip SAMA5D2 and Broadcom BCM2837 processors to develop and test the drivers, whose implementation is described in detail in the practical lab sections of the book. Before you start reading, I encourage you to acquire one of these processor boards whenever you have access to some GPIOs, and at least one SPI and I2C controller. One of the boards used to implement the drivers is the famous Raspberry PI 3 Model B board.
You will learn how to develop drivers, from the simplest ones that do not interact with any external hardware, to drivers that manage different kind of devices: accelerometers, DACs, ADCs, RGB LEDs, Multi-Display LED controllers, I / O expanders, buttons, and USB HID devices. You will also develop DMA drivers, drivers that manage interrupts, and drivers that write / read on the internal registers of the processor to control external devices. To ease the development of some of these drivers, you will use different types of frameworks: Miscellaneous framework, LED framework, UIO framework, Input framework and the IIO industrial framework. This second edition has been updated to the v4.9 LTS kernel.
Since the end of March 2019, a new chapter has been added to the text of the book. This is: Chapter 13, “Linux USB Device Drivers”. This new chapter can be downloaded from the GitHub of this book. In the Chapter 13, you will learn how to create a fully functional USB HID device that will send / receive data to / from a Linux USB Host device; several custom Linux USB device drivers will be developed throughout this chapter.
Since the end of November 2020, the Linux drivers included in this book have been adapted to run on the Raspberry Pi 4 Model B and the Raspberry Pi 3 Model B boards using Linux kernel v5.4 LTS. The Linux drivers can be downloaded from the GitHub of this book.
Since the end of July 2020, the Linux drivers included in this book have been adapted to run on the ST STM32MP1 processor using the Linux kernel v5.4 LTS. The ST STM32MP1 Linux drivers are included in the GitHub of this book.
Since the beginning of October 2020, two new labs have been added to the labs of Chapter 11 and Chapter 7 to reinforce the concepts of creating IIO drivers and GPIO controller drivers with INT capabilities. These new drivers are included in the GitHub of the book.
Note: The repository git.freescale.com is not working anymore. Since June 30, 2021 the new building instructions for the NXP i.MX7 SoC have been updated in the text of this book. If the book was acquired prior to that date and you are using the kernel 4.9, you must replace the instructions of the page 34 of Chapter 1: Building the System with the new instructions detailed in the README file on the book´s GitHub. You can also use the kernel 4.19 to test the labs, following the instructions included in the Linux_4.19_i.MX7D_practical_labs file that can be downloaded from the book´s GitHub. |