I am a newbie and I would like to know the connection of the terms bootloader, flasloader,monitor,device drivers,stacks,kernel,board support package etc. I do not understand how they are interrelated and how they fit themselves in layered embedded software architecture. It would be highly useful, if someone could answer with proper book reference which properly explains the above concepts.