Linux Driver Development for Embedded Processors
The flexibility of Linux embedded, 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. Current engineers have powerful tools at their disposal for developing applications previously unimagined, but they need to understand the countless features that Linux offers today.
This book will teach you how to develop Linux device drivers for Device Tree Linux embedded systems. The Device Tree is a binary file containing the description of your SoC (System on Chip) and your hardware.
Before moving to the Device Tree, this information was previously hard-coded in the Kernel source code. In non-Device Tree Kernels a small change, such as the modification of an I2C peripheral’s address would force a recompilation of the Kernel image to be run.
You will learn how to write different types of Linux drivers as well as the appropriate Application Program Interfaces and methods to interface with the Kernel and the User space. With emphasis on practical implementation, this book will guide you through development of more than 20 Linux device drivers that can be easily reproduced in any NXP i.MX6 Series Applications Processors platform. You only need to have an i.MX6 board that has some GPIOs, a SPI controller and an I2C controller available to develop all the drivers. All the drivers have been tested in two different platforms, the NXP i.MX6 SABRE board and the SolidRun i.MX6 HummingBoard to demonstrate how easily a driver can be ported from one platform to the other. You will learn how to develop drivers from the simplest ones to drivers that manage accelerometers, I2C Digital-to-Analog Converters (DAC) and serial SPI Analog-to-Digital Converters (ADC). You will also write DMA drivers, drivers that manage interrupts and user-space drivers using the UIO framework.
Who this book is written for
This book is ideal for Linux embedded application developers who have never written drivers before. It is also indicated for Linux embedded programmers that have developed drivers for non-Device Tree Kernels and want to learn how to create new Device Tree-based ones. And finally it is for students and hobbyists that want to learn how to deal with the low level hardware of embedded platforms using Linux. Before reading this book, having prior, basic knowledge of C language, Linux embedded and Yocto Project tools would be helpful, though not mandatory.