Book Image

Mastering Linux Device Driver Development

By : John Madieu
Book Image

Mastering Linux Device Driver Development

By: John Madieu

Overview of this book

Linux is one of the fastest-growing operating systems around the world, and in the last few years, the Linux kernel has evolved significantly to support a wide variety of embedded devices with its improved subsystems and a range of new features. With this book, you’ll find out how you can enhance your skills to write custom device drivers for your Linux operating system. Mastering Linux Device Driver Development provides complete coverage of kernel topics, including video and audio frameworks, that usually go unaddressed. You’ll work with some of the most complex and impactful Linux kernel frameworks, such as PCI, ALSA for SoC, and Video4Linux2, and discover expert tips and best practices along the way. In addition to this, you’ll understand how to make the most of frameworks such as NVMEM and Watchdog. Once you’ve got to grips with Linux kernel helpers, you’ll advance to working with special device types such as Multi-Function Devices (MFD) followed by video and audio device drivers. By the end of this book, you’ll be able to write feature-rich device drivers and integrate them with some of the most complex Linux kernel frameworks, including V4L2 and ALSA for SoC.
Table of Contents (19 chapters)
1
Section 1:Kernel Core Frameworks for Embedded Device Driver Development
6
Section 2: Multimedia and Power Saving in Embedded Linux Systems
13
Section 3: Staying Up to Date with Other Linux Kernel Subsystems

What this book covers

Chapter 1, Linux Kernel Concepts for Embedded Developers, walks through the Linux kernel helpers for locking, blocking I/O, deferring work, and interrupt management.

Chapter 2, Leveraging the Regmap API and Simplifying the Code, provides an overview of the Regmap framework and shows you how to leverage its APIs to ease interrupt management and abstract register access.

Chapter 3, Delving into the MFD Subsystem and Syscon API, focuses on MFD drivers in the Linux kernel, their APIs, and their structures, as well as introducing the syscon and simple-mfd helpers.

Chapter 4, Storming the Common Clock Framework, explains the Linux kernel clock framework and explores both producer and consumer device drivers, as well as their device tree bindings.

Chapter 5, ALSA SoC Framework – Leveraging Codec and Platform Class Drivers, discusses ALSA driver development for both codec and platform devices and introduces concepts such as kcontrol and digital audio power management (DAPM).

Chapter 6, ALSA SoC Framework – Delving into the Machine Class Drivers, dives into ALSA machine class driver development and shows you how to bind both codec and platform together and how to define audio routes.

Chapter 7, Demystifying V4L2 and Video Capture Device Drivers, describes V4L2's key concepts. It focuses on bridge video devices, introduces the concept of subdevices, and covers their respective device drivers.

Chapter 8, Integrating with V4L2 Async and Media Controller Frameworks, introduces the concept of asynchronous probing so that you don't have to care about bridge and subdevice probing order. Finally, this chapter introduces media controller frameworks in order to provide video routing and video pipe customizations.

Chapter 9, Leveraging V4L2 API from the User Space, closes our teaching series on V4L2 and deals with V4L2 from the user space. It first teaches you how to write C code in order to open, configure, and grab data from a video device. It then shows you how to write as little code as possible by leveraging user-space video-related tools such as v4l2-ctl and media-ctl.

Chapter 10, Linux Kernel Power Management, discusses power management on Linux-based systems and teaches you how to write power-aware device drivers.

Chapter 11, Writing PCI Device Drivers, deals with the PCI subsystem and introduces you to its Linux kernel implementation. This chapter also shows you how to write PCI device drivers.

Chapter 12, Leveraging the NVMEM Framework, describes the Linux Non-Volatile Memory (NVEM) subsystem. It first teaches you how to write both provider and consumer drivers as well as their device tree bindings. Then, it shows you how to take the most out of the device from user space.

Chapter 13, Watchdog Device Drivers, provides an accurate description of the Linux kernel Watchdog subsystem. It first introduces you to Watchdog device drivers and gradually takes you through the core of the subsystem, introducing some key concepts such as pre-timeout and governors. Toward the end, this chapter teaches you how to manage the subsystem from the user space.

Chapter 14, Linux Kernel Debugging Tips and Best Practices, highlights the most-used Linux kernel debugging and tracing techniques using kernel-embedded tools such as ftrace and oops message analysis.