I’m often asked what useful books software engineers should read when they start to work on embedded systems. So here’s a list of books I would recommend as starters.
First, nowadays many embedded systems are written in C (although lower end systems using 8-bit MCU are still likely to be written in Assembler), so software engineers had better make themselves very familiar with C/C++ and GNU tools (gcc, libtool. automake…) with a focus on embedded systems (e.g. interrupts handling, real-time capabilities, volatile variables, processes and threads’ stack handling, , cross compilers…). Programming Embedded Systems: With C and GNU Development Tools, 2nd Edition is just the right book for that purpose. It deals with embedded Linux and eCos and provides useful examples. You may also read part of it online
Once you start developing embedded systems you are likely to write device drivers at some points. Linux Device Drivers, 3rd Edition is a must have and is up-date for Linux 2.6. In case you need to write drivers for Linux 2.4 you may want to read the second edition. Linux Device Drivers edition is also available free of charge in PDF format.
Finally, if you program for embedded systems (especially without MMU, hence no shared libraries), you’re likely to work with a system architecture using one process with multiple threads instead of a system architecture using multiple processes. So you’ll have to make yourself familiar with threads programming, handling shared memory, using mutexes.. This is already explained to some degrees in Programming Embedded Systems: With C and GNU Development Tools, 2nd Edition but you may want to get more details with Pthreads Programming: A POSIX Standard for Better Multiprocessing (O’Reilly Nutshell)
There are also other useful books and resources available, but if you read those three books and use online resources, you’ll be ready to take on embedded system projects.