Operating system designers for desk-top systems have a simple and obviously sane concept - the kernel must be trusted code and we don't trust anything that user-space apps want to do, so make sure user-land can do anything and the kernel will manage it somehow without bringing down the entire system (well some don't manage that concept to well...but Linux does). Basically this means the user-space application must ask the kernel for any resource it wants to use and the kernel has the final descision to grant or reject a request [3]. The cost of this is that a kernel-user-space and virtual filesystem boundary must be crossed to access the platforms resources. The expense of this crossing the kernel-user-space boundary can become fairly considerable especially when a dedicated system primarily need to manage one specific piece of hardware [] - as is fairly common with dedicated embedded systems.
This will not be true for all devices but for many, and the reasoning is simply that the guiding assumption for trusted and untrusted code is false in embedded systems.