In this paper we describe our approach to improve dependability of a commodity OS for embedded systems. Usually it is too difficult for end-users to resolve the problem inside a single OS, especially for embedded systems. We propose a self-healing mechanism for Linux kernel to improve the system dependability without any operations by administrators. This paper presents our white box approach for monitoring and recovering Linux kernel. Key components are a system monitor and a virtual machine monitor. The system monitor is used to detect the inconsistency of data structures inside Linux kernel. The virtual machine monitor provides a multi-OS environment and it isolates the system monitor from Linux kernel. In a multi-OS environment, the system monitor is able to resolve failures inside Linux kernel without stopping crucial services running on another OS. We have developed a prototype for an embedded system to verify our approach. The experiment results show that our system can remove hidden processes and reload buggy kernel modules. The performance evaluation results show that our self-healing mechanism can be used even when Linux kernel is heavily-loaded and the overhead of the system monitor is vanishingly small in actual use.