Embedded Linux Primer: A Practical, Real-World Approach
by Christopher Hallinan
Linux Device Drivers, 3rd Edition
by Jonathan Corbet; Alessandro Rubini; Greg Kroah-Hartman
Understanding the Linux Kernel, 3rd Edition
by Daniel P. Bovet; Marco Cesati
Linux Kernel Development, Second Edition
by Robert Love
C++ GUI Programming with Qt 4, Second Edition
by Jasmin Blanchette; Mark Summerfield
Windows PowerShell in Action
by Bruce Payette
Linux® Administration Handbook, Second Edition
by Evi Nemeth; Garth Snyder; Trent R. Hein
Linux Server Hacks
by Rob Flickenger
Linux Kernel Development, Second Edition
by Robert Love
“Probably the most wide ranging and complete Linux device driver book I’ve read.”
--Alan Cox, Linux Guru and Key Kernel Developer
“Very comprehensive and detailed, covering almost every single Linux device driver type.”
--Theodore Ts’o, First Linux Kernel Developer in North America and Chief Platform Strategist of the Linux Foundation
The Most Practical Guide to Writing Linux Device Drivers
Linux now offers an exceptionally robust environment for driver development: with today’s kernels, what once required years of development time can be accomplished in days. In this practical, example-driven book, one of the world’s most experienced Linux driver developers systematically demonstrates how to develop reliable Linux drivers for virtually any device. Essential Linux Device Drivers is for any programmer with a working knowledge of operating systems and C, including programmers who have never written drivers before. Sreekrishnan Venkateswaran focuses on the essentials, bringing together all the concepts and techniques you need, while avoiding topics that only matter in highly specialized situations. Venkateswaran begins by reviewing the Linux 2.6 kernel capabilities that are most relevant to driver developers. He introduces simple device classes; then turns to serial buses such as I2C and SPI; external buses such as PCMCIA, PCI, and USB; video, audio, block, network, and wireless device drivers; user-space drivers; and drivers for embedded Linux–one of today’s fastest growing areas of Linux development. For each, Venkateswaran explains the technology, inspects relevant kernel source files, and walks through developing a complete example.
• Addresses drivers discussed in no other book, including drivers for I2C, video, sound, PCMCIA, and different types of flash memory
• Demystifies essential kernel services and facilities, including kernel threads and helper interfaces
• Teaches polling, asynchronous notification, and I/O control
• Introduces the Inter-Integrated Circuit Protocol for embedded Linux drivers
• Covers multimedia device drivers using the Linux-Video subsystem and Linux-Audio framework
• Shows how Linux implements support for wireless technologies such as Bluetooth, Infrared, WiFi, and cellular networking
• Describes the entire driver development lifecycle, through debugging and maintenance
• Includes reference appendixes covering Linux assembly, BIOS calls, and Seq files
Average Amazon.com® Rating: ![]()
![]()
![]()
![]()
Based on 13 Ratings
Can't replace the O'Reilly text - 2009-01-28
Reviewer Rating: ![]()
![]()
![]()
![]()
![]()
Like other reviews have stated, this first half of this book is a concise, useful introduction to certain Linux kernel concepts. But the title of the book leads the reader to expect that they could produce a Linux device driver using this book. That turns out not to be the case - no one could produce a driver with this book without the benefit of other reference material. In short, while the O'Reilly "Linux Device Drivers" text has it's shortcomings and is starting to become dated, it is still the only text with which the reader can use as a primary reference to create their own driver. It discusses implementation in detail, which this book does not.
This brings me to the second half of "Essential Linux Device Drivers", where specific device types are discussed. So little time is spent on each type that none are covered in enough detail to actually go off and start a driver of that type. You could be thinking that this book never claimed to enable you to write a PCI driver, for example, and that would be true. It just feels like a reduced scope with increased depth on the remainder would have made a much more useful book, rather than a bathroom reader.
Get Linux Device Drivers from O'REILLY instead - 2009-02-10
Reviewer Rating: ![]()
![]()
![]()
![]()
![]()
The people who gave this book 5 starts are either friends of the author, the author himself, or guys who have been writing linux drivers for years and felt like reading what they already knew. Although the author seems to be very knowledgeable on the topic, his book is really terrible at explaining the essential kernel functions needed for writing device drivers and their respective parameters. He only mentions that they exist. To understand what the author is doing, you would have to resort to searching alternate references. Also his examples don't work. I can tell that he never tried to compiled these examples.
After reading the first few chapters, I decided to get the linux device drivers book from O'REILLY and as soon as I started reading, I could point out loads of important information that the first book failed to relay. The examples in the O'REILLY book are also by far better.
Excellent driver writing material... - 2008-12-30
Reviewer Rating: ![]()
![]()
![]()
![]()
![]()
This book is intended to teach an intermediate level programmer who is already proficient in the "C" language to write device drivers for the Linux operating system. The book covers Linux kernel 2.6-23/24 versions which just happens to be the version I was using with my Ubuntu 8.04 laptop at the time of my review.
The author is clearly an experienced device driver programmer and he has a first rate command of written English. I found his writing to be clear, well organized and most importantly capable of teaching me how to work with kernel sources that are actively in use. He does an excellent job of explaining the environment in which modern device drivers will be used and he covers all of the major categories of devices that a programmer would need. This book thoroughly covers these categories in enough detail to get the programmer started writing drivers. I particularly liked his mentioning several source code analysis tools that are commonly used by those having to work with kernel sources. At least
two of the tools, cscope and ctags, I used when working on kernel maintenance on another UNIX platform. These tools made it possible to browse through the symbols used in the kernel and also to allow one to see where the corresponding name was declared and where it was accessed (read or written).
The author gives a high level explanation of each driver type covered and then helps the reader navigate the relevant source code files in the kernel source tree.
I was also pleasantly surprised to find that the author had more than a passing aquaintance with embedded Linux having participated in a number of driver projects for embedded Linux devices. As you might expect in a book on device drivers the author describes the major routines used for a class of device drivers,
where the routine can be found (file/tree structure), a full explanation of how the routines are used and the functions they perform. The author presents the reader with device driver code for devices that would need drivers and also shows how they would be integrated into the existing device driver structure
for the class of device presented.
The final chapters of his book describe user space device drivers, miscellaneous device drivers (ACPI, Firewire etc). He has an excellent chapter on debugging device drivers which covers kernel debuggers, kernel probes as well as kernel exec and kdump. He offers a sample debugging section for a buggy driver. He also covers kernel execution profiling and tracing.
The book index is well done allowing the reader to quickly pinpoint items of interest. Book indexing is to some extent an art form and Prentice Hall does an especially good job with their technical books.
Overall I'd give this book a high rating and it's good enough that I will add a copy to my personal
library.
The best book yet on Linux kernel programming - 2009-02-25
Reviewer Rating: ![]()
![]()
![]()
![]()
![]()
I keep "Essential Linux Device Drivers" on my desk, next to a bunch of other Linux kernel programming books: "Linux Device Drivers" by Rubini, "Linux Kernel Internals" by Beck et. al. (which is a bit outdated), "Embedded Linux" by Hollabaugh, "Building Embedded Linux Systems" by Yaghmour, "Understanding Linux Network Internals" by Benvenuti.
"Essential Linux Device Drivers" is the best one yet, followed by Rubini's as a closed second. Between these two books alone, you can learn how to write any device driver from scratch - if handed the hardware manual. But "Essential Linux Device Drivers" goes deeper, and has more real life code examples.
The code in "Essential Linux Device Drivers" has obviously been copied from real development projects, and I found no errors in it. I've looked carefully at the networking driver code, serial driver code, i2c driver code, and kernel thread/interlocking/timer primitives.
There are some suggestions I have (and this applies to all Linux books I've read). One is to make clear that the spin_lock_irqsave() API should be used instead of spin_lock() whenever it may be called from interrupt context. Second is to explain how the interrupt routine stack space is created at the bottom of the regular (thread) stack space.
Overall, good job, Mr. Venkateswaran! You've helped me a lot with my driver code. The $44.99 I paid was well spent on your book.
Missing info - 2009-09-04
Reviewer Rating: ![]()
![]()
![]()
![]()
![]()
I tried to find docomentation about Module.symvers, linking at runtime, symbol issues, etc... No luck. At least the o'reilly book touches on these topics.
Top Level Categories:
Networking
Operating Systems
Sub-Categories:
Networking > Linux
Operating Systems > Linux
Some information on this page was provided using data from Amazon.com®. View at Amazon >