Linux Operating System provides services at various levels; starting from commands to shell, system calls in application level, kernel level calls and function calls at driver level. This is the entire path for a user to reach out to the actual devices like hard disk, keyboard etc. Kernel modules are conceptually (and in code also) different than ordinary application programs. Device driver programs are basically kernel modules. Also there are other kernel modules which are not device drivers. This paper attempts to demystify this concept. It starts with explaining the concept of kernel module with an example. It then proceeds with the concepts of writing device drivers. Example source code of character device driver is chosen for illustration. Objective is to simplify various complex concepts related to kernel modules and device drivers. This should enable the reader to design and write basic device drivers. Audience is expected to be familiar with Linux systems programming.