LDT project is useful for Linux driver development beginners and as starting point for a new drivers. The driver uses following Linux facilities: module, platform driver, file operations (read/write, mmap, ioctl, blocking and nonblocking mode, polling), kfifo, completion, interrupt, tasklet, work, kthread, timer, misc device, proc fs, UART 0x3f8, HW loopback, SW loopback, ftracer.
git clone git://github.com/makelinux/ldt.git && cd ldt && ./ldt-test
and explore sources.
Main source file of LDT: ldt.c
Test script, run it: ldt-test
Generic testing utility for Device I/O: dio.c
Browse the rest of source: https://github.com/makelinux/ldt/
3.2.0-30-generic-pae (Ubuntu 12.04 LTS)
2.6.38-11-generic (Ubuntu 11.04)
v2.6.35-rc6 failed because of DEFINE_FIFO