Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

Debugging code on an embedded system is a difficult problem. The basic features of embedded environments – isolation, limited code space – usually preclude having a fully implemented shell with the entire development tool chain present on the dedicated processor. Many commercial vendors (VxWorks, Xilinx) include remote debuggers usable over various connection protocols, but for RTEMS, there wasn't a good way to run debuggers on a large cluster of embedded processors. In this document we discuss the two debugging options we have available for dealing with RCEs: XMD and The GDB stub.

Xilinx Microprocessor Debugger (xmd)
Anchor
DebugXmd
DebugXmd

XMD (Xilinx Microprocessor Debugger) is a low-level (assembly language) debugger that is provided by Xilinx as part of a product called the Embedded Development Kit (EDK). Documentation is in the Embedded System Tools Reference Manual (UG111) . It (http://xgoogle.xilinx.com/search?q=Embedded+System+Tools+Reference+Manual&btnG=New+Search&getfields=*&numgm=5&filter=0&proxystylesheet=support&client=support&output=xml_no_dtd&oe=UTF-8&ie=UTF-8&getfields=*&show_dynamic_navigation=1&num=1000&submit=Search&lang2search=&ud=1&exclude_apps=1&site=Documentation). XMD communicates with the PowerPC System-On-Chip over a JTAG interface via a host computer's USB system. The secret of a large portion of this magic is that it is able to inject instructions into the processor over JTAG (interestingly, these instructions can be recorded to text files and disassembled with some effort). XMD and the EDK is installed on SLAC AFS (e.g., /afs/slac/g/reseng/xilinx).

...

  • rrd — Dump the r* registers
  • srrd — Dump the system registers (pc, msr, ctr, etc.)
  • rwr <register> <word> — Write a register by name
  • Wiki Markup*mrd <address> \ [num\] \ [w|h|b\]* --- Memory Read ] — Memory Read (default: 'w'ord)unmigrated-wiki-markup
  • *mwr <address> <values> \ [<num> <w|h|b>\]* Memory Write (default: 'w'ord)

When connecting to the PowerPC, XMD must be told which memory ranges to map onto memory/DCR/cache. We have been doing this with an initialization file which is executed by XMD on startup. This file may either be called "xmd.ini" and placed in the current directory, or is a user-level file "~/.xmdrc".

Code Block
title.xmdrc
connect ppc hw -debugdevice isocmstartadr 0xFFFFF000 isocmsize 4096 isocmdcrstartadr 0x0000000 icachestartadr 0x10000000 itagstartadr 0x20000000 dcachestartadr 0x30000000 dtagstartadr 0x40000000 dcrstartadr 0x50000000

...


This will connect to the primary USB cable. There is an option to use a different USB cable: {{-cable type xilinx_platformusb port usb2\[\#\]}} where {{\#}} is the USB2 port number you wish to use. (See [Xilinx+tools] for more where [#] is the USB2 port number you wish to use (see Xilinx & JTAG tools for more details.)

GDB over XMD
Anchor
GdbXmd
GdbXmd

We may use GDB to connect to XMD through network socket 1234, giving us a full source-code debugger. This does have limitations in that GDB connected in this way cannot see the full RTEMS task (thread) list.

...

If one wishes a more complete debugger, with full RTEMS thread and task support, we can connect GDB to the RCE over TCP/IP, as described below.

...

RTEMS GDB stub
Anchor
DebugStub
DebugStub

Till Straumann of SSRL wrote a nice GDB stub to enable remote debugging of an RTEMS system over a local network. This code has been ported to the RCE system and methods have been developed to use it in conjunction with the RCE dynamic linker developed by Steve Tether.

...