I want to start learning and programming applications on embedded linux platform. I have exeprience working with embedded systems, but not with embedded linux. I am looking for some good books (I like O'reilly) that have code snippets and explain details on how to build an application on embedded linux. Also I am looking for embedded linux kit (ARM processor preferred) that I can use to test what I learn from the books. A book alongwith kit will be a good start as well.
I want to start learning and programming applications on embedded linux platform. I have exeprience working with embedded systems, but not with embedded linux. I am looking for some good books (I like O'reilly) that have code snippets and explain details on how to build an application on embedded linux. Also I am looking for embedded linux kit (ARM processor preferred) that I can use to test what I learn from the books. A book alongwith kit will be a good start as well.
9780596002220). Programming for embedded linux is just the same as programming for any linux. Try Advanced Linux Programming for linux specific system programming
Thanks for the response. Most books I searched describe Linux Kernel in detail and I think that is more inclined to device drivers. I'm wondering how C/C++ programming is used to develop applications that run on embedded linux processors such as ARM9. Would you recommend a book that explains how C/C++ programs run on embedded linux platform? All I'm interested in is ...develop skills so that if there is a job opening for embedded C/C++ developer for embedded linux, I can be prepared to explain them that I have worked on other platforms and have good understanding of how applications are developed for embedded linux platform.
I have a 10 yeas eperience in this field and I have no simple answer for you :). To my knowledge there is no good book for Programming for Embedded Linux. There can't be one because programming for linux has nothing to do with programming for embedded devices. If you have experience with c/c++ programming for linux (or any other posix system) you need to concentrate on issues like:
- programming in limited resources environment (has nothing to do with the OS)
- programming for real time systems (again has nothing to do with the OS)
- programming for processors without floating point support (again has nothing to do with the OS) etc.
So:
Indeed you can either develop for the kernel or the user space. With most devices programming for the kernel is not really necessary (at least with 2.6)!
Building embedded linux systems might have some valuable info on that. You can also check with the linux from scratch project - the processor is not important. The only thing that differs on different (including embedded) processors is how you init the system when it boots - and that's the CPU specific assembly code in the kernel... You don't need to care about that!
In that case you need (depending on the job):
- Know how to code for posix/gnu systems (API specifics): ALP is a good start...
- Have experience with the GUI libs they use (if any): qt, gtk usually, rarely libX11 APIs:
formatting link
is a great book for QT
- Know what real time system is and how it works depending on hard/ soft implementations. The RT coding has very specific requirements: tons of books on that matter (try amazon for "real time systems programming")
- Know how to effectively use limited resources (memory/cpu usage, constraints of flash storages and the filesystems for them (e.g. JFFS2), etc.): Building embedded linux systems has some info on that.
- Know how debug remotely with gdb (same for profiling): gdb docs
Embedded Linux typically just involves a lot more tinkering with device drivers that don't quite work properly with custom hardware, and paying more attention to performance due to less powerful hardware. The actual user space applications you write should be very similar to any other user space app on any other linux system. Embedded systems development usually involves board bring up work at some point so you will probably want to familiarize yourself with how the major boot loaders work and also how the different types of flash storage work.
Not really many great books on embedded linux. Look for anything you can on device drivers, memory management and synchronization. That should be a good start.
If you are not interested in the kernel just ignore the word 'embedded' word. Do your target's userland programming like you would do it for your host. If you have experience in POSIX programming, there is no difference between your host and your embedded target. Same for C++ (QT for example).
Note: There is nothing like "embedded Linux". Also on your target runs a full featured kernel and (most of the time) a full featured userland.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.