Freebsd Device Drivers: A Guide For The Intrepid by Joseph KongFreebsd Device Drivers: A Guide For The Intrepid by Joseph Kong

Freebsd Device Drivers: A Guide For The Intrepid

byJoseph Kong

Paperback | May 12, 2012

Pricing and Purchase Info

$47.32 online 
$52.95 list price save 10%
Earn 237 plum® points

Prices and offers may vary in store


In stock online

Ships free on orders over $25

Not available in stores


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. InFreeBSD 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 Driversgives you the framework that you need to write any driver you want, now.

The author ofDesigning 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.
Title:Freebsd Device Drivers: A Guide For The IntrepidFormat:PaperbackDimensions:352 pages, 9.25 × 7 × 0.86 inPublished:May 12, 2012Publisher:No Starch PressLanguage:English

The following ISBNs are associated with this title:

ISBN - 10:1593272049

ISBN - 13:9781593272043

Look for similar items by category:


Table of Contents

Dedication; About the Technical Reviewer; Foreword; Acknowledgments; Introduction; Who Is This Book For?; Prerequisites; Contents at a Glance; Welcome Aboard!; Chapter 1: Building and Running Modules; 1.1 Types of Device Drivers; 1.2 Loadable Kernel Modules; 1.3 Hello, world!; 1.4 Compiling and Loading; 1.5 Character Drivers; 1.6 Mostly Harmless; 1.7 Block Drivers Are Gone; 1.8 Conclusion; Chapter 2: Allocating Memory; 2.1 Memory Management Routines; 2.2 malloc_type Structures; 2.3 Tying Everything Together; 2.4 Contiguous Physical Memory Management Routines; 2.5 A Straightforward Example; 2.6 Conclusion; Chapter 3: Device Communication and Control; 3.1 ioctl; 3.2 Defining ioctl Commands; 3.3 Implementing ioctl; 3.4 Invoking ioctl; 3.5 sysctl; 3.6 Implementing sysctls, Part 1; 3.7 sysctl Context Management Routines; 3.8 Creating Dynamic sysctls; 3.9 Implementing sysctls, Part 2; 3.10 Conclusion; Chapter 4: Thread Synchronization; 4.1 A Simple Synchronization Problem; 4.2 A More Complex Synchronization Problem; 4.3 Preventing Race Conditions; 4.4 Mutexes; 4.5 Mutex Management Routines; 4.6 Implementing Mutexes; 4.7 Shared/Exclusive Locks; 4.8 Shared/Exclusive Lock Management Routines; 4.9 Implementing Shared/Exclusive Locks; 4.10 Reader/Writer Locks; 4.11 Reader/Writer Lock Management Routines; 4.12 Condition Variables; 4.13 Condition Variable Management Routines; 4.14 General Guidelines; 4.15 Conclusion; Chapter 5: Delaying Execution; 5.1 Voluntary Context Switching, or Sleeping; 5.2 Implementing Sleeps and Condition Variables; 5.3 Kernel Event Handlers; 5.4 Callouts; 5.5 Callouts and Race Conditions; 5.6 Taskqueues; 5.7 Conclusion; Chapter 6: Case Study: Virtual Null Modem; 6.1 Prerequisites; 6.2 Code Analysis; 6.3 Conclusion; Chapter 7: Newbus and Resource Allocation; 7.1 Autoconfiguration and Newbus Drivers; 7.2 Tying Everything Together; 7.3 Hardware Resource Management; 7.4 Conclusion; Chapter 8: Interrupt Handling; 8.1 Registering an Interrupt Handler; 8.2 Interrupt Handlers in FreeBSD; 8.3 Implementing an Interrupt Handler; 8.4 Generating Interrupts on the Parallel Port; 8.5 Conclusion; Chapter 9: Case Study: Parallel Port Printer Driver; 9.1 Code Analysis; 9.2 Conclusion; Chapter 10: Managing and Using Resources; 10.1 I/O Ports and I/O Memory; 10.2 Memory Barriers; 10.3 Tying Everything Together; 10.4 Conclusion; Chapter 11: Case Study: Intelligent Platform Management Interface Driver; 11.1 Code Analysis; 11.2 Conclusion; Chapter 12: Direct Memory Access; 12.1 Implementing DMA; 12.2 Creating DMA Tags; 12.3 Tearing Down DMA Tags; 12.4 DMA Map Management Routines, Part 1; 12.5 Loading (DMA) Buffers into DMA Maps; 12.6 DMA Map Management Routines, Part 2; 12.7 A Straightforward Example; 12.8 Synchronizing DMA Buffers; 12.9 Conclusion; Chapter 13: Storage Drivers; 13.1 disk Structures; 13.2 disk Structure Management Routines; 13.3 Block I/O Structures; 13.4 Block I/O Queues; 13.5 Tying Everything Together; 13.6 Block I/O Completion Routines; 13.7 Conclusion; Chapter 14: Common Access Method; 14.1 How CAM Works; 14.2 A (Somewhat) Simple Example; 14.3 SIM Registration Routines; 14.4 Action Routines; 14.5 Conclusion; Chapter 15: USB Drivers; 15.1 About USB Devices; 15.2 More About USB Devices; 15.3 USB Configuration Structures; 15.4 USB Transfers (in FreeBSD); 15.5 USB Configuration Structure Management Routines; 15.6 USB Methods Structure; 15.7 Tying Everything Together; 15.8 Conclusion; Chapter 16: Network Drivers, Part 1: Data Structures; 16.1 Network Interface Structures; 16.2 Network Interface Structure Management Routines; 16.3 Network Interface Media Structures; 16.4 Network Interface Media Structure Management Routines; 16.5 Hello, world!; 16.6 mbuf Structures; 16.7 Message Signaled Interrupts; 16.8 Implementing MSI; 16.9 MSI Management Routines; 16.10 Conclusion; Chapter 17: Network Drivers, Part 2: Packet Reception and Transmission; 17.1 Packet Reception; 17.2 Packet Transmission; 17.3 Post Packet Transmission; 17.4 Conclusion; References; Colophon; UPDATES;