Difference between revisions of "Toolbox"
(→gdb tips - running gdb with gdbserver) |
(→gdb tips - target debugging with gdbserver) |
||
Line 144: | Line 144: | ||
* Debug user-space initialization: | * 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. | ** 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. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== gdb tips - get element size === | === gdb tips - get element size === | ||
Sometimes, with complex structures (arrays of structs containing nested structs or arrays), it is | Sometimes, with complex structures (arrays of structs containing nested structs or arrays), it is |
Revision as of 16:15, 27 October 2011
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.
Contents
- 1 Development Tools
- 1.1 Logic Analyzers
- 1.2 Toolchains
- 1.3 Build Systems
- 1.4 Embedded Linux Distributions
- 1.5 Debuggers
- 1.6 Memory Debuggers
- 1.7 Other debugging tools(not debuggers)
- 1.8 Integrated Development Environments
- 1.9 Emulators
- 1.10 Tracers and Profilers
- 1.11 Benchmarks
- 1.12 Source Management Tools
- 1.13 Test Systems
- 2 Developer Resources
- 3 Wishlist Items
Development Tools
Logic Analyzers
- see Logic_Analyzers
Toolchains
- see Toolchains
Build Systems
- see Build Systems
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
- KDB - In-kernel 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
- Exception Analysis tools
- This includes things like oops emitters, exception monitors, coredump analysis, etc.
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
- QtCreator is an nice IDE which has code completion, remote deployment (with version 2.3) and Outline view. It also has an VIm mode. Its menus are much cleaner than these from Eclipse and its easier to get started with this ide than Eclipse for that very reason.
- Embest IDE for ARM
Emulators
- Qemu - hardware emulator - for everything (try this first)
- Skyeye - for ARM
- Aranym - for M68K
- Hercules - For S390
- UNetICE for ARM7 and ARM9 processors from Embest
- XDS100v2 for TI processor available from Embest
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
A list of benchmark results would be useful:
- Comparing performance of different FFT implementations on Beagleboard-XM: http://pmeerw.dyndns.org/blog/programming/arm_fft.html
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.
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
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: 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
- [1] - The (Original) Linux Link Tech Show, weekly Linux podcast with archive going back to 2003.
- [2] - 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.
gdb tips - get element size
Sometimes, with complex structures (arrays of structs containing nested structs or arrays), it is hard to determine the actual size of a particular element.
You can use gdb with a program image to get the size of structures, by looking at the offset of an element of the structure relative to an address of zero:
Here are some examples:
${CROSS_COMPILE}gdb vmlinux GNU gdb (GDB) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-sony-linux-gnueabi". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. (gdb) p &((struct poll_wqueues *)0)->polling_task $6 = (struct task_struct **) 0xc (gdb) p/d &((struct poll_wqueues *)0)->error $4 = 20
the second example could be read as: "print, in decimal, the address (offset) of the element error using address 0 cast as a pointer to struct poll_wqueues"
'pt' is the first element of struct poll_wqueues. Here is an example using array offsets, showing that struct poll_wqueues is 604 bytes long.
(gdb) p/d &((struct poll_wqueues *)0)[0]->pt $2 = 0 (gdb) p/d &((struct poll_wqueues *)0)[1]->pt $3 = 604
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