Table of Contents

http://kaiwantech.wordpress.com/2013/12/28/linux-tools-for-the-serious-systems-programmer/

Linker scripts

Memory

Duma

https://github.com/pixelb/ps_mem/

Real-time

https://www.osadl.org/Realtime-Preempt-Kernel.kernel-rt.0.html#externaltestingtool

Debugging

https://visualgdb.com/

OpenOCD

http://elinux.org/BeagleBoardOpenOCD

Profiling

http://elinux.org/Kernel_Trace_Systems

http://rostedt.homelinux.com/kernelshark/

Measuring execution time in ARM Cortex A8

Profiling code on ARM7

from stackoverflow:

  valgrind (only supported on cortex ARM processors.. boo)
  mprof (not so hot with threads?)
  gprof (not so hot with threads?)
  oprofile (requires kernel mods, but most modern kernels have it. I've used this under ARM.
  systemtap (recently ported to arm, looks awesome - like dtrace for Linux)
  strace and ltrace can actually be useful sometimes, although very high-level
  iostat et all as well if you want to kick it old school.
  Fair amount of information in /proc/ and /sys if you dig
  ioapps - IO tracing
  lsof is useful for tracking stuck sockets and file handles
  systat
  pmap
  iptraf
  tcpdump
  perftools - CPU and memory profiling
  bootchart
  QEMU can host ARM kernels / binaries, and can be instrumented from outside. It's proven useful to me a couple times.
  Manual instrumentation using the gcc hooks
  void __cyg_profile_func_enter (void *, void *) __attribute__((no_instrument_function)); void __cyg_profile_func_exit (void *, void *) __attribute__((no_instrument_function));

http://dtrace.org/blogs/brendan/2011/12/16/flame-graphs/

In Linux, ARM MPU counters profile information are normally accessed through the kernel via the OProfile tool or the Linux perf events framework.

latency plots

https://www.osadl.org/Latency-plot-of-system-in-rack-b-slot.qa-latencyplot-rbs7.0.html

Static analysis

splint

Using clang: https://interrupt.memfault.com/blog/arm-cortexm-with-llvm-clang

Compiling the kernel

Useful in embedded systems, as only the strongly recommended options are set to Y:

make allnoconfig   # useful in embedded systems, setting the strongly recommended options to Y
make clean         # remove most generated files but keep config
make mrproper      # remove all generated files
make distclean     # also remove the editor backup and patch reject files

make oldcondif
make
make LOADADDR=0x80008000 uImage
make dtbs

Patches