Difference between revisions of "Toolbox"

From eLinux.org
Jump to: navigation, search
m (valgrind)
(add link to beginning programming page)
(32 intermediate revisions by 9 users not shown)
Line 1: Line 1:
 
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.
 
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 =
+
<div style="width=100%; background:#FFF;">
== Logic Analyzers ==
+
{| width="100%" cellspacing="5" cellpadding="0" valign="top" style="background:inherit;"
* see [[Logic_Analyzers]]
+
| valign="top" style="margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;" cellpadding="5"  |
 +
<div style="background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;">Development Tools</div>
 +
<div style="margin: 0 0 0 1em;">
 +
;[[Logic_Analyzers]]
 +
;[[Toolchains]]
 +
;[[Build Systems]]
 +
;[[Embedded Linux Distributions]]
 +
;[[Debuggers]]
 +
;[[Memory Debuggers]]
 +
;[[Tools]]
 +
;[[Integrated Development Environments]]
 +
;[[Emulators]]
 +
;[[Tracers and Profilers]]
 +
;[[Benchmark Programs | Benchmarks]]
 +
;[[Source Management Tools]]
 +
;[[Test Systems]]
 +
;[[Test Tools]]
  
== Toolchains ==
 
* see [[Toolchains]]
 
  
== Debuggers ==
+
</div>
Debugging is one of the most common activities of an embedded developper. Here are some debuggers howto and links:
+
| valign="top" style="margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;" cellpadding="5"|
* [http://openocd.berlios.de/web/ Open On-Chip Debugger]
+
<div style="background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;">Developer Resources </div>
* [[GDB|GDB - The GNU debugger]]
+
<div style="margin: 0 0 0 1em;">
* [http://www.gnu.org/software/ddd/ DDD - Data Display Debugger]
+
;[[Linux Kernel Resources]]
* [[kgdb| kgdb - kernel source level debugger]]
+
;Kernel Subsystems
* [[Valgrind|valgrind - memory, cache and other debuggers and profilers]]
+
*[http://www.linusakesson.net/programming/tty/index.php The TTY Demystified] - excellent explanation of kernel tty system
 +
* [[Device Tree]] - a structure used to describe system hardware at startup - can be passed or modified by firmware, or built into kernel
 +
;Online Documentation
 +
* [http://kernel.org/doc/ols/ Papers from the Ottawa Linux Symposium]
 +
* [http://free-electrons.com/training/devtools Free Software tools for embedded systems]
 +
* [http://free-electrons.com/articles/realtime/ Real time in embedded Linux systems]
 +
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]
 +
* [http://free-electrons.com/training/audio Audio in embedded Linux systems]
 +
* [http://free-electrons.com/training/multimedia Multimedia in embedded Linux systems]
 +
* [http://free-electrons.com/articles/elfs/ Embedded Linux From Scratch... in 40 minutes!]  
 +
* [http://www.makelinux.net/reference Linux technology reference]
 +
;[[:Category:Books| Books]]
 +
;[[Reference Material]]
 +
;[[Podcasts]]
 +
;[[Device drivers]]
 +
;[[Beginning Programming]]
  
== Memory Debuggers ==
+
</div>
Several tools exist for finding memory leaks or for reporting individual memory allocations
+
|-
of a program.
+
| valign="top" style="margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;" cellpadding="5"|
 +
<div style="background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;">Tips and Tricks</div>
 +
<div style="margin: 0 0 0 1em;">
 +
;[[Chip_Identification|How to Identify IC Markings]]
 +
;[[Code Styling Tips]]
 +
;[[Debugging Tips]]
 +
;[[GDB Tips]]
 +
;[[GCC Tips]]
 +
;[[:Category:Tips and Tricks]]
 +
</div>
  
* [http://www.linuxjournal.com/article/6059 Memory Leak Detection in Embedded Systems] by Cal Erickson, Linux Journal, September 2002
+
| valign="top" style="margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;" cellpadding="5"|
** This mentions mentions mtrace, memwatch and dmalloc
+
<div style="background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;">Misc & Wishlist</div>
 
+
<div style="margin: 0 0 0 1em;">
=== Electric Fence ===
+
;[[Bluetooth Network| Setting up a Bluetooth Network]]
See [[Electric Fence]]
+
;[[Continuous Logging for Watchdog Timer Expiration]]
 
+
;[[Crash Diagnostics]]
=== mtrace ===
 
mtrace is a builtin part of glibc which allows detection of memory leaks caused by unbalanced malloc/free calls.  To use it, the program is modified to call mtrace() and muntrace() to start and stop tracing of allocations.  A log file is created, which can then be scanned by the 'mtrace' Perl script.  The 'mtrace' program lists only unbalanced allocations.  If source is available it can
 
show the source line where the problem occurred. mtrace can be used on both C and C++ programs.
 
 
 
=== memwatch ===
 
memwatch is a program that not only detects malloc and free errors but also reads and writes beyond the allocated space (buffer over and under-runs).  To use it, you modify the source to include
 
the memwatch code, which provides replacements for malloc and free.
 
 
 
Some things that memwatch does not catch are writing to an address that has been freed and reading data from outside the allocated memory.
 
 
 
=== mpatrol ===
 
mpatrol appears to be like memwatch.
 
 
 
See http://mpatrol.sourceforge.net/
 
 
 
=== dmalloc ===
 
"The debug memory allocation or dmalloc library has been designed as a drop in replacement for the system's malloc, realloc, calloc, free and other memory management routines while providing powerful debugging facilities configurable at runtime. These facilities include such things as memory-leak tracking, fence-post write detection, file/line number reporting, and general logging of statistics."
 
 
 
This library can be used without modifying the existing program, and uses environment variables
 
to control it's operation and set of issues to log.
 
 
 
It's home page is at: http://dmalloc.com/
 
 
 
See Cal Erickson's article (link above, page 2) for information about using this system.
 
 
 
=== dbgmem ===
 
dbgmem looks like another dynamic library replacement tool, similar to dmalloc (but possibly having less features)
 
 
 
See http://dbgmem.sourceforge.net/
 
 
 
=== valgrind ===
 
valgrind does dynamic source code modification to instrument the program, and provides a number
 
of memory problem detection tools and profiling tools.  Unfortunately, as of July 2010 it is
 
only available for x86 and ppc64 architecture platforms.
 
 
 
See [[Valgrind]]
 
 
 
== Other debugging tools(not debuggers) ==
 
* [[Strace]]
 
* [[addr2line for kernel debugging]]
 
* [[ioctl| decode an ioctl]]
 
 
 
== Integrated Development Environments ==
 
* [http://www.eclipse.org Eclipse] - Powerfull IDE written in JAVA.
 
* [http://www.jedit.org jEdit] - Editor written in JAVA which can be expanded to a full IDE with plug-ins.
 
* [http://www.kdevelop.org KDevelop] - Standard IDE for KDE.
 
* [http://www.gnu.org/software/emacs 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 [http://ecb.sourceforge.net/ ECB].
 
* [http://www.vim.org/ VIm] - Powerful IDE, extensible with scripting, can use various modules for completion and more.
 
* [http://kscope.sourceforge.net/ KScope] - Cscope based source editing environment with KDE.
 
* [http://www.anjuta.org Anjuta] - IDE with nice plugin support
 
* FIXTHIS - need more links for IDEs
 
 
 
== Emulators ==
 
* [[Qemu| Qemu - hardware emulator]] - for everything (try this first)
 
* [http://www.skyeye.org/ Skyeye] - for ARM
 
* [http://aranym.org Aranym] - for M68K
 
* [http://www.hercules-390.org Hercules] - For S390
 
 
 
== Tracers and Profilers ==
 
* 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 ==
 
* [http://www.linusakesson.net/programming/tty/index.php 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
 
 
 
== Documentation ==
 
==== 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 | 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.
 
 
 
* [http://www.amazon.com/Programming-Environment-Addison-Wesley-Professional-Computing/dp/0321525949/ref=sr_1_1?ie=UTF8&s=books&qid=1259788186&sr=8-1 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
 
 
 
* [http://www.amazon.com/Linux-System-Programming-Robert-Love/dp/0596009585/ref=sr_1_1?ie=UTF8&s=books&qid=1259788281&sr=1-1 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
 
 
 
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.
 
 
 
==== Podcasts ====
 
* [http://tllts.org] - The (Original) Linux Link Tech Show, weekly Linux podcast with archive going back to 2003.
 
* [http://www.timesys.com/resources/podcast] - 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]]
 
 
 
== 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]]
 
 
 
= Embedded Linux Distributions =
 
* see [[Embedded Linux Distributions]]
 
 
 
= Wishlist Items =
 
*[[Continuous Logging for Watchdog Timer Expiration]]
 
*[[Crash Diagnostics]]
 
  
 +
</div>
 +
|}
 +
</div>
 
[[Category:Development Tools]]
 
[[Category:Development Tools]]
 +
[[Category:Tips and Tricks]]

Revision as of 13:05, 16 September 2013