The current implementation of device drivers assumes and relies on the correctness of the underlying hardware.Any unresponsive hardware, can cause the application and/or the system to crash or hang.However, the current technology trends indicate that we will be becoming increasingly susceptible of hardware failures of both permanent and transient in nature.Hence, the current implementation of drivers is least suited to run on unreliable device hardware. This project intends to solve this problem by building reliable device drivers that can tolerate hardware failures and recover if necessary.This project intends to statically analyse the device drivers and identify code that assumes correct hardware behavior.These drivers are then hardened by modifying the code to alleviate this reliance.Time permitting, we also intend to build a fault injection framework to test the robustness of our methodology.We also plan to discuss the possible recovery strategies that can be performed in cases where the driver cannot continue to perform normally due to corruption in the driver state based on our results.