If you have already some experience as software developer, I think the most effective way is to get a job as junior embedded software engineer and learn directly on the field. I started my career path in embedded SW in this way and I'm convinced that there is nothing better than learn from more experienced colleagues and practice directly on a real project. This is true in every field, but even more in this difficult area where you need to have good knowledge of both hardware and software. When I started I had almost no experience about hardware, but I could learn a lot from more experienced colleagues that were. Of course the learning curve is slow at the beginning, but it will get faster after 1 year.