Understanding the Structure of a Linux Kernel Device Driver