自己再配置プログラムのデバッグ - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: エンベデッド ソフトウェア開発 (UG1400)

Document ID
UG1400
Release Date
2022-04-26
Version
2022.1 日本語

システム デバッガーでは、U-Boot のような自己再配置プログラムのソース レベル デバッグがサポートされています。自己再配置プログラムとは、ランタイム中にコードおよびデータ セクションを再配置するプログラムです。これらのファイルのデバッグ情報には、プログラム セクションがどこに再配置されたかの詳細は含まれません。そのため、プログラムの再配置先のアドレスをデバッガーに提供する必要があります。これは、次の 2 つの方法で実行できます。

  1. システム デバッガーの実行コンフィギュレーションをアップデートし、プログラム セクションの再配置先アドレスを指定します。
    1. Debug As > Debug Configurations をクリックし、システム デバッガーの実行コンフィギュレーションを開始します。
    2. Application ビューをクリックして、ダウンロードするアプリケーションを選択します。
    3. This is a self-relocating application をオンにします。
    4. Relative address to which the program sections are relocated テキスト ボックスにすべてのプログラム セクションを再配置するアドレスを入力します。
    5. デバッグ コンフィギュレーションを起動します。これで、ランタイム中にプログラム セクションが再配置されたときに、デバッガーに再配置されたセクションのソース レベル デバッグをサポートするのに十分な情報が供給されます。

    注記: この方法は、デバッグ コンフィギュレーションの Target Setup ビューの Debug TypeStandalone に設定した場合にのみサポートされます。
  2. また、XSDB で memmap コマンド使用しても、プログラム セクションの再配置先アドレスを指定できます。XSDB の memmap コマンドを使用すると、デバッガーにシンボル ファイルを追加できます。これは、ターゲット上で既に実行中のアプリケーションをデバッグする際に便利です。たとえば、フラッシュからブートする場合などに便利です。再配置可能な ELF ファイルの場合は、-relocate-section-map オプションを使用して再配置先アドレスを指定します。
    xsdb% targets 2
     1 APU
       2 ARM Cortex-A9 MPCore #0 (Suspended)
       3 ARM Cortex-A9 MPCore #1 (Suspended)
     4 xc7z020
    xsdb% targets 2
    xsdb% memmap -reloc 0x3bf37000 -file u-boot
    
    xsdb% stop
    Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0x3ff7b478 (Suspended)
    xsdb% bt
     0 0x3ff7b478 __udelay()+1005809800: lib/time.c, line 91
     1 0x3ff7b4ac udelay()+1005809696: lib/time.c, line 104
     2 0x3ff5d878 genphy_update_link()+1005809860: drivers/net/phy/phy.c, line 250
     3 0x3ff5df84 m88e1118_startup()+1005809712: drivers/net/phy/marvell.c, line 356
     4 0x3ff5d154 zynq_gem_init()+1005810192: drivers/net/zynq_gem.c, line 402
     5 0x3ff7dc58 eth_init()+1005809720: net/eth.c, line 886
     6 0x3ff7e0e4 net_loop()+1005809728: net/net.c, line 407
     7 0x3ff46330 netboot_common()+1005809972: common/cmd_net.c, line 230
     8 0x3ff46520 do_tftpb()+1005809708: common/cmd_net.c, line 33
     9 0x3ff5295c cmd_process()+1005809824: common/command.c, line 493
     10 0x3ff5295c cmd_process()+1005809824: common/command.c, line 493
     11 0x3ff3b710 run_list_real()+1005811444: common/cli_hush.c, line 1656
     12 0x3ff3b710 run_list_real()+1005811444: common/cli_hush.c, line 1656
     13 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003
     14 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003
     15 0x3ff3b008 parse_string_outer()+1005809872: common/cli_hush.c, line 3254
     16 0x3ff3b6b8 run_list_real()+1005811356: common/cli_hush.c, line 1617
     17 0x3ff3b6b8 run_list_real()+1005811356: common/cli_hush.c, line 1617
     18 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003
     19 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003
     20 0x3ff3afd0 parse_string_outer()+1005809816: common/cli_hush.c, line 3248
     21 0x3ff5140c do_run()+1005809740: common/cli.c, line 131
     22 0x3ff5295c cmd_process()+1005809824: common/command.c, line 493
     23 0x3ff5295c cmd_process()+1005809824: common/command.c, line 493
     24 0x3ff3b710 run_list_real()+1005811444: common/cli_hush.c, line 1656
     25 0x3ff3b710 run_list_real()+1005811444: common/cli_hush.c, line 1656
     26 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003
     27 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003
     28 0x3ff3b008 parse_string_outer()+1005809872: common/cli_hush.c, line 3254
     29 0x3ff3b6b8 run_list_real()+1005811356: common/cli_hush.c, line 1617
     30 0x3ff3b6b8 run_list_real()+1005811356: common/cli_hush.c, line 1617
     31 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003
     32 0x3ff3be3c parse_stream_outer()+1005811244: common/cli_hush.c, line 2003
     33 0x3ff3afd0 parse_string_outer()+1005809816: common/cli_hush.c, line 3248
     34 0x3ff39ab4 main_loop()+1005809724: common/main.c, line 85
     35 0x3ff3c4f4 run_main_loop()+1005809672: common/board_r.c, line 675
     36 0x3ff73b54 initcall_run_list()+1005809716: lib/initcall.c, line 27
     37 0x3ff3c66c board_init_r()+1005809676: common/board_r.c, line 908
     38 0x3ff3837c clbss_l()+1005809688: arch/arm/lib/crt0.S, line 174
     39 unknown-pc