Toolbox

This page has information about developing Embedded Linux, including links to toolchains, debuggers and other development tools. Also, it has links to pages with debugging tips.

= Development Tools =

Logic Analyzers

 * see Logic_Analyzers

Toolchains

 * see Toolchains

Build Systems

 * see Build Systems

Embedded Linux Distributions

 * see Embedded Linux Distributions

Debuggers
Debugging is one of the most common activities of an embedded developper. Here are some debuggers howto and links:
 * Open On-Chip Debugger
 * GDB - The GNU debugger
 * DDD - Data Display Debugger
 * kgdb - kernel source level debugger
 * valgrind - memory, cache and other debuggers and profilers

Memory Debuggers
See Memory Debuggers

Other debugging tools(not debuggers)

 * addr2line for kernel debugging
 * decode an ioctl

Integrated Development Environments

 * Eclipse - Powerfull IDE written in JAVA.
 * jEdit - Editor written in JAVA which can be expanded to a full IDE with plug-ins.
 * KDevelop - Standard IDE for KDE.
 * Emacs - Powerful IDE, extensible in LISP, ships with modes to integrates with SCM (GIT, SVN, CVS...), build systems, debugger and even fancy multi-window with ECB.
 * VIm - Powerful IDE, extensible with scripting, can use various modules for completion and more.
 * KScope - Cscope based source editing environment with KDE.
 * Anjuta - IDE with nice plugin support
 * FIXTHIS - need more links for IDEs

Emulators

 * Qemu - hardware emulator - for everything (try this first)
 * Skyeye - for ARM
 * Aranym - for M68K
 * Hercules - For S390

Tracers and Profilers

 * Strace - trace system calls by a program (or set of programs) (very handy)
 * ltrace - trace library calls
 * see Kernel Trace Systems
 * see Profilers

Benchmarks

 * see Benchmark Programs

Source Management Tools
There are a number of tools for managing patches, which are useful for different tasks. There's now a whole page devoted to this. See Source Management Tools

For some simple tools for managing patches, see Diff And Patch Tricks

Test Systems

 * See Test Systems

= Developer Resources =

mailing lists, web sites, etc.

 * See Linux Kernel Resources

Articles on kernel subsystems

 * The TTY Demystified - excellent explanation of kernel tty system
 * Device Trees - a structure used to describe system hardware at startup - can be passed or modified by firmware, or built into kernel

Kernel

 * See Linux Kernel Resources - the rest of this material is (mostly) about userspace.

Online

 * Papers from the Ottawa Linux Symposium - broken out - see http://kernel.org/doc/ols/
 * Free Software tools for embedded systems - http://free-electrons.com/training/devtools
 * Real time in embedded Linux systems - http://free-electrons.com/articles/realtime/
 * Embedded Linux optimizations - http://free-electrons.com/articles/optimizations
 * Audio in embedded Linux systems - http://free-electrons.com/training/audio
 * Multimedia in embedded Linux systems - http://free-electrons.com/training/multimedia
 * Embedded Linux From Scratch... in 40 minutes! - http://free-electrons.com/articles/elfs/

Books

 * Embedded Linux System Design and Development - by P. Raghavan, Amol Lad, and Sriram Neelakandan (Hardcover - Dec 21, 2005)
 * This one looks quite good.


 * Embedded Linux Primer: A Practical Real-World Approach - by Christopher Hallinan
 * So does this one.


 * Building Embedded Linux Systems - by Karim Yaghmour
 * Be sure to get the second edition (from 2008). The first edition (from 2003) is outdated.


 * Advanced Programming in the UNIX Environment, Second Edition by the late W. Richard Stevens and Stephen A. Rago
 * Not embedded specific, but THE reference for Linux/Unix programming


 * Linux System Programming - by Robert Love
 * Good introduction to Linux system programming


 * Linux Debugging and Performance Tuning - by Steve Best
 * OMAP and DaVinci Software for Dummies - by Steve Blonstein, Alan Campbell, Texas Instruments
 * Essential Linux Device Drivers
 * Linux Device Drivers

See also Category:Books

Reference Material

 * ARM Processor Reference Manuals - Registration required, but it's free.
 * go to http://infocenter.arm.com/ => ARM architecture => Reference Manuals => ... => registration link (only name, e-mail address and company name are strictly required).
 * The UHAPI Forum standardizes hardware-independent application programming interfaces (APIs) for analog and digital televisions, set top boxes, DVD players and recorders, personal video recorders (PVRs), home servers and other consumer audio/video (A/V) devices.
 * Hello_World_in_C
 * How traceroute works!
 * How DNS works!
 * Order_One_Study
 * RTWG-discussion-points
 * Subset_Libc_Specification
 * Extern_Vs_Static_Inline
 * Slab_allocator
 * Size_Tunables

Podcasts

 * - The (Original) Linux Link Tech Show, weekly Linux podcast with archive going back to 2003.
 * - Timesys LinuxLink Radio. (Despite the name, it's has nothing to do with the older Linux Link podcast, and it's not on the radio.  No longer updates on a regular schedule, but the archives are available.)

Code Style Tips

 * See Code Styling Tips
 * see also Sparse

Debugging Tips

 * See the Kernel Debugging Tips page
 * See also Debugging Makefiles
 * Printk
 * Debug user-space initialization:
 * If you get a panic - "not syncing: Attempted to kill init!" it can be for many different reasons. Try setting CONFIG_DEBUG_USER=y in your .config and pass 'user_debug=255' in the kernel command line. That will give you a more verbose output about why user space programs crash. Thanks to Daniel Mack on the linux-arm-kernel mailing list for this tip.

GCC Tips and Tricks

 * This section of GCC Tips is a collection of tips and tricks helpful for embedded developers

Network Setup

 * Settings up a Bluetooth Network

= Wishlist Items =
 * Continuous Logging for Watchdog Timer Expiration
 * Crash Diagnostics