FreeBSD Device Drivers

FreeBSD Device Drivers

A Guide for the Intrepid
by Joseph Kong
May 2012, 352 pp.

Device drivers make it possible for your software to communicate with your hardware, and because every operating system has specific requirements, driver writing is nontrivial. When developing for FreeBSD, you've probably had to scour the Internet and dig through the kernel sources to figure out how to write the drivers you need. Thankfully, that stops now. In FreeBSD Device Drivers, Joseph Kong will teach you how to master everything from the basics of building and running loadable kernel modules to more complicated topics like thread synchronization. After a crash course in the different FreeBSD driver frameworks, extensive tutorial sections dissect real-world drivers like the parallel port printer driver.

You'll learn:

  • All about Newbus, the infrastructure used by FreeBSD to manage the hardware devices on your system
  • How to work with ISA, PCI, USB, and other buses
  • The best ways to control and communicate with the hardware devices from user space
  • How to use Direct Memory Access (DMA) for maximum system performance
  • The inner workings of the virtual null modem terminal driver, the USB printer driver, the Intel PCI Gigabit Ethernet adapter driver, and other important drivers
  • How to use Common Access Method (CAM) to manage host bus adapters (HBAs)

Concise descriptions and extensive annotations walk you through the many code examples. Don't waste time searching man pages or digging through the kernel sources to figure out how to make that arcane bit of hardware work with your system. FreeBSD Device Drivers gives you the framework that you need to write any driver you want, now.

Author Bio 

The author of Designing BSD Rootkits (No Starch Press), Joseph Kong works on information security, operating system theory, reverse code engineering, and vulnerability assessment. Kong is a former system administrator for the City of Toronto.

Table of contents 


Chapter 1: Building and Running Modules
Chapter 2: Allocating Memory
Chapter 3: Device Communication and Control
Chapter 4: Thread Synchronization
Chapter 5: Delaying Execution
Chapter 6: Case Study: Virtual Null Modem
Chapter 7: Newbus and Resource Allocation
Chapter 8: Interrupt Handling
Chapter 9: Case Study: Parallel Port Printer Driver
Chapter 10: Managing and Using Resources
Chapter 11: Case Study: Intelligent Platform Management Interface Driver
Chapter 12: Direct Memory Access
Chapter 13: Storage Drivers
Chapter 14: Common Access Method
Chapter 15: USB Drivers
Chapter 16: Network Drivers, Part 1: Data Structures
Chapter 17: Network Drivers, Part 2: Packet Reception and Transmission

View the detailed Table of Contents (PDF).
View the detailed Index (PDF).


"At last, a definitive and authoritative book on FreeBSD device drivers! Kong's clear mastery of his subject shines through every page."
Michael Lucas, FreeBSD committer and author of Absolute FreeBSD

"FreeBSD Device Drivers is an excellent guide to the APIs used to write a device driver for FreeBSD."
John Baldwin, Kernel Developer, FreeBSD

"I'd recommend the book for anybody that needs an introduction to drivers. The walk throughs will get people up to speed, as well as introduce many of the uniquely FreeBSD quirks one needs to know to integrate with FreeBSD."
Warner Losh, FreeBSD core team (Read More)

"I am pleased to see No Starch provide a forum for books like this. They continue to produce high-quality works that read well and address subjects seldom found elsewhere."
Richard Bejtlich, CSO of Mandiant & Founder of TaoSecurity (Read More)

"I like this book. It fills a definite need, and does it well."
Warren Block, FreeBSD committer (Read More)

"This book is definitely a must have for anybody interested in how FreeBSD device drivers are designed, not to mention those who are interested in writing their very own ones for the FreeBSD operating system!"
Romain Tartière, FreeBSD ports committer (Read More)

"This book is a no nonsense, straight to the point document that helps you get to the content quickly." (Read More)

"Definitely an excellent book with all the information you’ll need to start developing your own FreeBSD device drivers."
xorl (Read More)

"Strikes a pretty good balance for its stated purpose. Its mostly 'just the facts ma’am' style works well, but it provides plenty of references for those wanting more detail or background. This is definitely worth a read if device drivers in FreeBSD are something you need or want to know about."
Simon Gerraty, FreeBSD Journal


On p. 86, the line contained in the sleep_thread() function which reads "panic("event %d is bogus\n", event);" should read "panic("event %d is bogus\n", ev);"

On p. 90, the line contained in the sleep_thread() function which reads "panic("event %d is bogus\n", event);" should read "panic("event %d is bogus\n", ev);"