FreeBSD Device Drivers: A Guide for the Intrepid, Joseph Kong.
We are onto chapter 6, following on from ch05 - which covered using mutexes in
concert with condicion variables to sleep until events are received. The example
module `sleep` created a sysctl to handle an integer, which is passed as an
'event' to a thread that is waiting to receive the events via a cv.
In chapter 6, we are implementing the `null virtual modem`, which creates two
device nodes under /dev, and uses callout functions and taskqueues to implement
data transfer between the two tty devices (forgot to mention the two devices are
tty terminals). Next up we will start looking at I/O resources (how to actually
talk to the hardware down the bus).
It's pretty tough sledding to take all this stuff on but I'm getting it
slowly...