Current emdedded systems are made of multiple heterogeneous devices interconnected. These devices present a great variation of functionality, performance, and interfaces. Therefore, it is difficult to build applications for these platforms. In this paper we present some techniques to introduce component-based methodologies into hardware-software codesing. We make special emphasis on the use of simple, homogeneous interfaces to hide the inherent complexity of current designs. A key contribution is the definition of a HW-SW Operating System that makes system resources available to application developers in a clean, homogeneous way. This greatly simplifies the task of designing complex heterogeneous emdedded systems.