This course is designed for engineers who need to acquire Linux kernel and driver development experience. This course focuses on device drivers for Embedded System based on ARM processor family, however the basic knowledge gained is essential for writing device drivers for any hardware platform. You will learn how to write device drivers for character and block devices, I2C, PCI, Network, MTD and USB devices among others. In additional to learn writing Linux device drivers, you will also learn many aspects of the Linux kernel, you'll familiarise yourself with the characteristics of the hardware for which the device driver is to be written. You will also get detailed information of the workings of the Linux kernel that are essential to support device drivers, such as file system structures, memory management, interrupt handling, timing functions and kernel building and debugging. Hands-on lab exercises will reinforce your learning experience.