Alan,

Thanks for sending this! Gustavo's suggestion of adding the '-rtos nuttx' flag to my config did the trick, so maybe this process isn't needed anymore?

- John

On 8/27/20 5:29 PM, Alan Carvalho de Assis wrote:
Hi John,

On 8/27/20, John Rippetoe <jrippe...@roboticresearch.com> wrote:
Hi everyone,

I recently jumped back into working on the FDCAN driver for the STM32H7
and have something working which I would like to test further. In doing
so, I was hoping to easily debug with GDB through OpenOCD, but am having
some issues with the necessary setup. So far I have compiled and tested
the upstream master of OpenOCD, master of the Sony OpenOCD fork, and a
third build that merged the latest upstream OpenOCD commits into the
Sony fork. With all three, I am only ever able to see the currently
running thread (nearly always IDLE) when running the "info threads"
command.

So my question is, does anyone have any experience getting this working?
I looked through the mailing list and saw a few messages regarding this
very thing for different architectures. I've also dug around on the
internet to help me piece together what needed to be done to get this
working. I initially got the impression that as long as OpenOCD supports
your chip, thread aware-debugging should be possible, but now I'm not so
sure. I modified nuttx_header.h within OpenOCD with the correct offset
values as noted here

https://micro-ros.github.io/docs/tutorials/advanced/nuttx/debugging/

That didn't change anything, unfortunately. I also thought it was
possible this step was no longer needed based on the Sony fork's wiki page

https://github.com/sony/openocd-nuttx/wiki

The monitor commands listed there gave me "invalid command name" errors
when loading my nuttx binary.

Any help on this would be greatly appreciated.

I tested it some years ago and Masayuki gave me some important instructions:

1) You need to include "-rtos nuttx" in the target create line of the
/usr/local/share/openocd/scripts/target/stm32f4x.cfg to use with
stm32f4discovery board:

target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap
$_CHIPNAME.dap -rtos nuttx

2) Add this code to your .gdbinit

define print-offset
   print /x &((struct tcb_s *)(0))->pid
   print /x &((struct tcb_s *)(0))->xcp.regs
   print /x &((struct tcb_s *)(0))->task_state
   print /x &((struct tcb_s *)(0))->name
   print /x sizeof(((struct tcb_s *)(0))->name)
end

Then start gdb with nuttx to load the symbol.

$ arm-none-eabi-gdb ./nuttx

Before connecting to the target, obtain the symbol offsets in tcb.

(gdb) print-offset
$1 = 0xc
$2 = 0x80
$3 = 0x1a
$4 = 0xcc
$5 = 0x20
(gdb)

Then you need to put those value inside the header file:
openocd/src/rtos/nuttx_header.h replacing the existing value:

/* default offset */
#define PID  0xc
#define XCPREG  0x70
#define STATE 0x19
#define NAME 0xb8
#define NAME_SIZE 32

Compile and install again openocd with the right values.

I hope it help you!

BR,

Alan
CONFIDENTIALITY NOTICE: This communication may contain private, confidential 
and privileged material for the sole use of the intended recipient. If you are 
not the intended recipient, please delete this e-mail and any attachments 
permanently.

Reply via email to