Registered User |
Registered User mNo edit summary Tag: 2017 source edit |
||
(16 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
<noinclude>{{ApplicableFor | <noinclude>{{ApplicableFor | ||
|MPUs list=STM32MP13x, STM32MP15x | |MPUs list=STM32MP13x, STM32MP15x,STM32MP21x,STM32MP23x,STM32MP25x | ||
|MPUs checklist=STM32MP13x,STM32MP15x | |MPUs checklist=STM32MP13x,STM32MP15x,STM32MP21x,STM32MP23x,STM32MP25x | ||
}}</noinclude> | }}</noinclude> | ||
== Debug with console == | == Debug with console == | ||
Line 9: | Line 9: | ||
'''CONFIG_LOG''' is enable in OpenSTLinux. | '''CONFIG_LOG''' is enable in OpenSTLinux. | ||
By default, traces are available on the U-Boot console which use <code>stdout-path</code> defined in the <code>chosen</code> node of the Linux kernel device tree as described in the Linux kernel binding<ref> | By default, traces are available on the U-Boot console which use <code>stdout-path</code> defined in the <code>chosen</code> node of the Linux kernel device tree as described in the Linux kernel binding<ref>[https://github.com/devicetree-org/dt-schema/blob/main/dtschema/schemas/chosen.yaml dtschema/schemas/chosen.yaml] the Linux kernel binding for chosen node</ref>. | ||
See page [[How_to_configure_U-Boot_for_your_board#Console|How to configure U-Boot for your board]] for configuration details. | See page [[How_to_configure_U-Boot_for_your_board#Console|How to configure U-Boot for your board]] for configuration details. | ||
Line 23: | Line 23: | ||
When the traces are present in U-Boot, you can change the default trace level with {{highlight|CONFIG_LOG_DEFAULT_LEVEL}} or you can use the <code>log</code> command (CONFIG_CMD_LOG) to dynamically configure and filter the output: | When the traces are present in U-Boot, you can change the default trace level with {{highlight|CONFIG_LOG_DEFAULT_LEVEL}} or you can use the <code>log</code> command (CONFIG_CMD_LOG) to dynamically configure and filter the output: | ||
{{U-Boot$}} | {{U-Boot$}}log level 7 | ||
{{U-Boot$}} | {{U-Boot$}}log format all | ||
=== Activate debug trace on one file === | === Activate debug trace on one file === | ||
To turn on this debug logging just in one file, you can define LOG_DEBUG | To turn on this debug logging just in one file, you can define {{highlight|LOG_DEBUG}} for this file | ||
* add define before any include in the <file>.c file | * add define before any include in the <file>.c file | ||
#define LOG_DEBUG | #define {{highlight|LOG_DEBUG}} | ||
# | #include <common.h> | ||
* with a Makefile | * with a Makefile | ||
CFLAGS_<file>.o+= - | CFLAGS_<file>.o+= -D{{highlight|LOG_DEBUG}} | ||
=== Debug before console === | === Debug before console === | ||
Line 48: | Line 48: | ||
*** {{Highlight|CONFIG_DEBUG_UART}} | *** {{Highlight|CONFIG_DEBUG_UART}} | ||
*** {{Highlight|CONFIG_DEBUG_UART_STM32}} | *** {{Highlight|CONFIG_DEBUG_UART_STM32}} | ||
{{Info | For {{MicroprocessorDevice | device=1}}, the function {{CodeSource | U-Boot |board/st/stm32mp1/debug_uart.c|board_debug_uart_init()}} configures the required resources (pad, clock) before initialization by the U-Boot driver and this function can be adapted for your board.<br/>This adaptation is '''not required for OpenSTLinux''' because UART is initialized in TF-A and in OP-TEE and <code>debug_uart_init()</code> is not called in {{CodeSource | U-Boot | board/st/stm32mp1/debug_uart.c |mach_cpu_init()}}.}} | |||
== Debug with GDB == | == Debug with GDB == | ||
Line 65: | Line 66: | ||
=== Load U-Boot symbol === | === Load U-Boot symbol === | ||
With [[U-Boot_overview#U- | With [[U-Boot_overview#U-Boot_execution_sequence|U-Boot relocation]], symbols are more difficult to load, see {{CodeSource | U-Boot | doc/README.arm-relocation}} for details. | ||
If you connect GDB on running target, you can load the debug symbols: | If you connect GDB on running target, you can load the debug symbols: | ||
* Before relocation with {{Highlight|"symbol-file"}} command: | * Before relocation with {{Highlight|"symbol-file"}} command: | ||
{{GDB$}} {{Highlight|symbol-file u-boot}} | {{GDB$}}{{Highlight|symbol-file u-boot}} | ||
* After relocation with {{Highlight|"add-symbol-file"}} command to relocate the symbol with the code offset = gd->relocaddr: | * After relocation with {{Highlight|"add-symbol-file"}} command to relocate the symbol with the code offset = gd->relocaddr: | ||
:* for {{MicroprocessorDevice | device=1}} (AARCH32) | |||
{{GDB$}}symbol-file u-boot {{Highlight|--> only for "gd_t" definition}} | |||
{{GDB$}}set $offset = ((gd_t *)${{Highlight|r9}})->relocaddr {{Highlight|--> get relocation offset, gd in r9 register}} | |||
{{GDB$}}symbol-file {{Highlight|--> clear previous symbol }} | |||
{{GDB$}}{{Highlight|add-symbol-file u-boot $offset}} | |||
:* for {{MicroprocessorDevice | device=2}} (AARCH64) | |||
{{GDB$}} thbreak *{{HighlightParam|0xC0100000}} | {{GDB$}}symbol-file u-boot {{Highlight|--> only for "gd_t" definition}} | ||
{{GDB$}} commands | {{GDB$}}set $offset = ((gd_t *)${{Highlight|x18}})->relocaddr {{Highlight|--> get relocation offset, gd in x18 register}} | ||
{{GDB$}}symbol-file {{Highlight|--> clear previous symbol }} | |||
{{GDB$}}{{Highlight|add-symbol-file u-boot $offset}} | |||
The following GDB example scripts automatically loads the U-Boot symbol before and after relocation for a programmed board, after {{Highlight|"monitor reset halt"}} command. | |||
These GDB scripts use a temporary hardware breakpoint {{Highlight|"thbreak"}} to load the symbol when U-Boot code is loaded in DDR by FSBL = TF-A at the U-Boot entry point, CONFIG_TEXT_BASE.<br/>It allows the symbol to be loaded only when code is executed to avoid DDR access before DDR initialization. | |||
* for {{MicroprocessorDevice | device=1}} (AARCH32) | |||
{{GDB$}}thbreak *{{HighlightParam|0xC0100000}} | |||
{{GDB$}}commands | |||
> symbol-file u-boot | > symbol-file u-boot | ||
> thbreak relocate_code | > thbreak relocate_code | ||
> commands | > commands | ||
> print "RELOCATE U-Boot..." | > print "RELOCATE U-Boot..." | ||
> set $offset = ((gd_t *)$r9)->relocaddr | > set $offset = ((gd_t *)${{Highlight|r9}})->relocaddr | ||
> print $offset | > print $offset | ||
> symbol-file | > symbol-file | ||
Line 98: | Line 111: | ||
> end | > end | ||
With CONFIG_TEXT_BASE = | |||
* {{HighlightParam|0xC0000000}} for {{MicroprocessorDevice | device=13}} | :* {{HighlightParam|0xC0000000}} for {{MicroprocessorDevice | device=13}} | ||
* {{HighlightParam|0xC0100000}} for {{MicroprocessorDevice | device=15}} | :* {{HighlightParam|0xC0100000}} for {{MicroprocessorDevice | device=15}} | ||
* for {{MicroprocessorDevice | device=2}} (AARCH64) | |||
{{GDB$}}thbreak *{{HighlightParam|0x84000000}} | |||
{{GDB$}}commands | |||
> symbol-file u-boot | |||
> thbreak relocate_code | |||
> commands | |||
> print "RELOCATE U-Boot..." | |||
> set $offset = ((gd_t *)${{Highlight|x18}}->relocaddr | |||
> print $offset | |||
> symbol-file | |||
> add-symbol-file u-boot $offset | |||
> thbreak boot_jump_linux | |||
> continue | |||
> end | |||
> continue | |||
> end | |||
With CONFIG_TEXT_BASE = | |||
:* {{HighlightParam|0x84000000}} for {{MicroprocessorDevice | device=2}} | |||
== References == | == References == | ||
<references/> | <references/> | ||
<noinclude> | |||
[[Category:U-Boot|U-Boot - 8]] | [[Category:U-Boot|U-Boot - 8]] | ||
[[Category:Tracing tools]] | [[Category:Tracing tools]] |
Latest revision as of 14:47, 4 November 2024
1. Debug with console[edit | edit source]
See U-Boot Documentation or doc/develop/logging.rst for U-Boot logging details.
CONFIG_LOG is enable in OpenSTLinux.
By default, traces are available on the U-Boot console which use stdout-path
defined in the chosen
node of the Linux kernel device tree as described in the Linux kernel binding[1].
See page How to configure U-Boot for your board for configuration details.
The ST boards use the default logging configuration:
- CONFIG_LOG_DEFAULT_LEVEL = CONFIG_LOG_MAX_LEVEL = LOGL_INFO = 6
the 'debug' macros used by U-Boot (log_debug(), debug(), pr_debug()...) are removed in the U-Boot binary. - CONFIG_LOGF_FILE, CONFIG_LOGF_LINE, CONFIG_LOGF_FUNC are not activated
no debug information in log messages by default.
To enable all the debug traces in U-Boot you need to increase the max logging level with a major impact on U-Boot size; e.g. set CONFIG_LOG_MAX_LEVEL to LOGL_DEBUG by adding in your defconfig file the line:
CONFIG_LOG_MAX_LEVEL=7
When the traces are present in U-Boot, you can change the default trace level with CONFIG_LOG_DEFAULT_LEVEL or you can use the log
command (CONFIG_CMD_LOG) to dynamically configure and filter the output:
STM32MP>log level 7
STM32MP>log format all
1.1. Activate debug trace on one file[edit | edit source]
To turn on this debug logging just in one file, you can define LOG_DEBUG for this file
- add define before any include in the <file>.c file
LOG_DEBUG #include <common.h>#define
- with a Makefile
LOG_DEBUGCFLAGS_<file>.o+= -D
1.2. Debug before console[edit | edit source]
If U-Boot fails before the console configuration (in the first stage of U-Boot execution), trace is not available.
In this case, you need to:
- debug with GDB (see the next chapter)
or,
- activate the debug UART feature:
- add in defconfig of U-Boot configuration
- CONFIG_DEBUG_UART
- CONFIG_DEBUG_UART_STM32
- add in defconfig of U-Boot configuration
Information |
For STM32MP1 Series, the function board_debug_uart_init() configures the required resources (pad, clock) before initialization by the U-Boot driver and this function can be adapted for your board. This adaptation is not required for OpenSTLinux because UART is initialized in TF-A and in OP-TEE and debug_uart_init() is not called in mach_cpu_init() .
|
2. Debug with GDB[edit | edit source]
With OpenSTLinux, you can directly use GDB script Setup.gdb:
Or for manual GDB connection, you need to:
- get the elf files for U-Boot =
u-boot
available in the build directory - connect GDB to the target
- reset with attach the target with the gdb "monitor reset halt" command:
execution is stopped in ROM code or at the beginning of FSBL execution. - load the symbols of the binary to be debugged with commands available in next chapter:
#Load U-Boot symbol - start execution with the "continue" command
2.1. Load U-Boot symbol[edit | edit source]
With U-Boot relocation, symbols are more difficult to load, see doc/README.arm-relocation for details.
If you connect GDB on running target, you can load the debug symbols:
- Before relocation with "symbol-file" command:
symbol-file u-boot
- After relocation with "add-symbol-file" command to relocate the symbol with the code offset = gd->relocaddr:
- for STM32MP1 Series (AARCH32)
--> only for "gd_t" definition set $offset = ((gd_t *)$r9)->relocaddr --> get relocation offset, gd in r9 register symbol-file --> clear previous symbol add-symbol-file u-boot $offsetsymbol-file u-boot
- for STM32MP2 unknown microprocessor device (AARCH64)
--> only for "gd_t" definition set $offset = ((gd_t *)$x18)->relocaddr --> get relocation offset, gd in x18 register symbol-file --> clear previous symbol add-symbol-file u-boot $offsetsymbol-file u-boot
The following GDB example scripts automatically loads the U-Boot symbol before and after relocation for a programmed board, after "monitor reset halt" command.
These GDB scripts use a temporary hardware breakpoint "thbreak" to load the symbol when U-Boot code is loaded in DDR by FSBL = TF-A at the U-Boot entry point, CONFIG_TEXT_BASE.
It allows the symbol to be loaded only when code is executed to avoid DDR access before DDR initialization.
- for STM32MP1 Series (AARCH32)
0xC0100000 commands > symbol-file u-boot > thbreak relocate_code > commands > print "RELOCATE U-Boot..." > set $offset = ((gd_t *)$r9)->relocaddr > print $offset > symbol-file > add-symbol-file u-boot $offset > thbreak boot_jump_linux > continue > end > continue > endthbreak *
With CONFIG_TEXT_BASE =
- for STM32MP2 unknown microprocessor device (AARCH64)
0x84000000 commands > symbol-file u-boot > thbreak relocate_code > commands > print "RELOCATE U-Boot..." > set $offset = ((gd_t *)$x18->relocaddr > print $offset > symbol-file > add-symbol-file u-boot $offset > thbreak boot_jump_linux > continue > end > continue > endthbreak *
With CONFIG_TEXT_BASE =
- 0x84000000 for STM32MP2 unknown microprocessor device
3. References[edit | edit source]
- ↑ dtschema/schemas/chosen.yaml the Linux kernel binding for chosen node