XSCT ユース ケース

Vitis IDE でと同様、ザイリンクス ソフトウェア コマンド ライン ツール (XSCT) を使用するには、まずワークスペースを選択します。プロジェクトを作成して管理するため、XSCT はバックグラウンドで Vitis IDE を起動します。XSCT ワークスペースは Vitis IDE でも使用でき、IDE のワークスペースは XSCT でも使用できます。
注記: ワークスペースは、一度に Vitis IDE または XSCT のいずれかからのみ使用可能です。

アプリケーション プロジェクトのコンパイラ オプションの変更

次に、Cortex™-A53 プロセッサ用の空のアプリケーションを作成し、コンパイラ オプション -std=c99 を追加する XSCT セッションの例を示します。

setws /tmp/wrk/workspace
app create -name test_a53 -hw /tmp/wrk/system.xsa -os standalone -proc psu_cortexa53_0 -template {Empty Application}
importsources -name test_a53 -path /tmp/sources/
app config -name test_a53 -add compiler-misc {-std=c99}
app build -name test_a53

アプリケーション テンプレートを使用したアプリケーション プロジェクトの作成 (Zynq UltraScale+ MPSoC FSBL)

次に、Cortex-A53 プロセッサ用の FSBL プロジェクトを作成する XSCT セッションの例を示します。

注記: アプリケーション プロジェクトを作成すると、必要なライブラリを追加して BSP プロジェクトが作成されます。デバッグ メッセージ用に、FSBL_DEBUG_DETAILED シンボルが FSBL に追加されます。
setws /tmp/wrk/workspace
app create -name a53_fsbl -hw /tmp/wrk/system.xsa -os standalone -proc psu_cortexa53_0 -template {Zynq MP FSBL}
app config -name a53_fsbl define-compiler-symbols {FSBL_DEBUG_INFO}
app build -name a53_fsbl

ブータブル イメージの作成とフラッシュ メモリのプログラム

次は、2 つのアプリケーション (FSBL および Hello World) の作成を示す XSCT セッションの例です。この後、アプリケーションをビットストリームと一緒に使用してブータブル イメージを作成し、そのイメージをフラッシュ メモリへプログラムします。

注記: ボードは ZCU702 とします。このため、program_flash のオプションとして -flash_type qspi_single が使用されます。
setws /tmp/wrk/workspace
app create -name a9_hello -hw /tmp/wrk/system.xsa -os standalone proc ps7_cortexa9_0 -template {Zynq FSBL}
app create -name a9_fsbl -hw /tmp/wrk/system.xsa -os standalone proc ps7_cortexa9_0 -template {Hello World}
app build -name a9_hello
app build -name a9_fsbl
exec bootgen -arch zynq -image output.bif -w -o /tmp/wrk/BOOT.bin
exec program_flash -f /tmp/wrk/BOOT.bin -flash_type qspi_single -blank_check -verify -cable type xilinx_tcf url tcp:localhost:3121

ターゲットで既に実行中のプログラムのデバッグ

ザイリンクス システム デバッガー コマンド ライン インターフェイス (XSDB) は、ターゲットで既に実行中のプログラム (フラッシュ メモリからのブートなど) をデバッグするために使用できます。これには、ターゲットに接続して、ターゲットで実行中のプログラムのシンボル ファイルを設定する必要があります。この方法は、フラッシュ メモリから Linux カーネル ブートをデバッグする際にも使用できます。最良の結果を得るには、ターゲットで実行中のコードをデバッグ情報を使用してコンパイルする必要があります。

次に、ターゲットで既に実行中のプログラムをデバッグする例を示します。デモのため、プログラムはこの例のセッションの前に main() で停止されます。
# Connect to the hw_server

xsdb% conn -url TCP:xhdbfarmc7:3121
tcfchan#0
xsdb% Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0x1005a4 (Hardware Breakpoint)
xsdb% Info: ARM Cortex-A9 MPCore #1 (target 3) Stopped at 0xfffffe18 (Suspended)

# Select the target on which the program is running and specify the symbol file using the 
# memmap command

xsdb% targets 2
xsdb% memmap -file dhrystone/Debug/dhrystone.elf

# When the symbol file is specified, the debugger maps the code on the target to the symbol 
# file. bt command can be used to see the back trace. Further debug is possible, as shown in 
# the first example

xsdb% bt
    0  0x1005a4 main(): ../src/dhry_1.c, line 79
    1  0x1022d8 _start()+88
    2  unknown-pc

Zynq UltraScale+ MPSoC 上のアプリケーションのデバッグ

注記: このセクションでは、単純にするため、Zynq® UltraScale+™ MPSoC を JTAG ブート モードで起動すると想定しています。ここで説明されているフローは、ほかのブート モードに少し変更を加えるだけで使用できます。

Zynq UltraScale+ MPSoC を JTAG ブート モードで起動する際、すべての Cortex-A53 および Cortex-R5 コアはリセットに保持されます。これらのコアをデバッグする前に、各コアのリセットをクリアする必要があります。リセットをクリアするには、XSCT の rst コマンドを使用します。rst -processoror は、個々のプロセッサ コアのリセットをクリアします。rst -cores は、現在のターゲットの親であるグループ (APU または RPU) に含まれるすべてのプロセッサ コアのリセットをクリアします。たとえば、Cortex-A53 #0 が現在のターゲットである場合、rst -cores は APU のすべての Cortex-A53 コアのリセットをクリアします。

次に、Zynq UltraScale+ MPSoC 上の A53 #0 コアのスタンドアロン アプリケーションをデバッグする XSCT セッションの例を示します。

注記: 同様の手順は、Cortex-R5 コアおよび 32 ビット モードの Cortex-A53 コア上のアプリケーションをデバッグするにも使用できます。Cortex-A53 コアは、アプリケーションをデバッグする前に 32 ビット モードにする必要があります。これは、POR の後、Cortex-A53 のリセットをクリアする前に実行する必要があります。
#connect to remote hw_server by specifying its url. 
If the hardware is connected to a local machine,-url option and the <url> 
are not needed. connect command returns the channel ID of the connection

xsdb% connect -url TCP:xhdbfarmc7:3121 -symbols
tcfchan#0

# List available targets and select a target through its id. 
The targets are assigned IDs as they are discovered on the Jtag chain, 
so the IDs can change from session to session. 
For non-interactive usage, -filter option can be used to select a target, 
instead of selecting the target through its ID

xsdb% targets
  1  PS TAP
     2  PMU
        3  MicroBlaze PMU (Sleeping. No clock)
     4  PL
  5  PSU
     6  RPU (Reset)
        7  Cortex-R5 #0 (RPU Reset)
        8  Cortex-R5 #1 (RPU Reset)
     9  APU (L2 Cache Reset)
       10  Cortex-A53 #0 (APU Reset)
       11  Cortex-A53 #1 (APU Reset)
       12  Cortex-A53 #2 (APU Reset)
       13  Cortex-A53 #3 (APU Reset)
xsdb% targets 5

# Configure the FPGA. When the active target is not a FPGA device, 
the first FPGA device is configured

xsdb% fpga ZCU102_HwPlatform/design_1_wrapper.bit
100%    36MB   1.8MB/s  00:24

# Source the psu_init.tcl script and run psu_init command to initialize PS
xsdb% source ZCU102_HwPlatform/psu_init.tcl
xsdb% psu_init

# PS-PL power isolation must be removed and PL reset must be toggled, 
before the PL address space can be accessed

# Some delay is needed between these steps

xsdb% after 1000
xsdb% psu_ps_pl_isolation_removal
xsdb% after 1000
xsdb% psu_ps_pl_reset_config

# Select A53 #0 and clear its reset

# To debug 32 bit applications on A53, A53 core must be configured 
to boot in 32 bit mode, before the resets are cleared

# 32 bit mode can be enabled through CONFIG_0 register in APU module. 
See ZynqMP TRM for details about this register

xsdb% targets 10
xsdb% rst -processor

# Download the application program

xsdb% dow dhrystone/Debug/dhrystone.elf
Downloading Program -- dhrystone/Debug/dhrystone.elf
                section, .text: 0xfffc0000 - 0xfffd52c3
                section, .init: 0xfffd5300 - 0xfffd5333
                section, .fini: 0xfffd5340 - 0xfffd5373
                section, .note.gnu.build-id: 0xfffd5374 - 0xfffd5397
                section, .rodata: 0xfffd5398 - 0xfffd6007
                section, .rodata1: 0xfffd6008 - 0xfffd603f
                section, .data: 0xfffd6040 - 0xfffd71ff
                section, .eh_frame: 0xfffd7200 - 0xfffd7203
                section, .mmu_tbl0: 0xfffd8000 - 0xfffd800f
                section, .mmu_tbl1: 0xfffd9000 - 0xfffdafff
                section, .mmu_tbl2: 0xfffdb000 - 0xfffdefff
                section, .init_array: 0xfffdf000 - 0xfffdf007
                section, .fini_array: 0xfffdf008 - 0xfffdf047
                section, .sdata: 0xfffdf048 - 0xfffdf07f
                section, .bss: 0xfffdf080 - 0xfffe197f
                section, .heap: 0xfffe1980 - 0xfffe397f
                section, .stack: 0xfffe3980 - 0xfffe697f
100%    0MB   0.4MB/s  00:00   
Setting PC to Program Start Address 0xfffc0000
Successfully downloaded dhrystone/Debug/dhrystone.elf

# Set a breakpoint at main()
xsdb% bpadd -addr &main
0

# Resume the processor core
xsdb% con

# Info message is displayed when the core hits the breakpoint
Info: Cortex-A53 #0 (target 10) Running
xsdb% Info: Cortex-A53 #0 (target 10) Stopped at 0xfffc0d5c (Breakpoint)

# Registers can be viewed when the core is stopped
xsdb% rrd
  r0: 0000000000000000    r1: 0000000000000000    r2: 0000000000000000
  r3: 0000000000000004    r4: 000000000000000f    r5: 00000000ffffffff
  r6: 000000000000001c    r7: 0000000000000002    r8: 00000000ffffffff
  r9: 0000000000000000   r10: 0000000000000000   r11: 0000000000000000
 r12: 0000000000000000   r13: 0000000000000000   r14: 0000000000000000
 r15: 0000000000000000   r16: 0000000000000000   r17: 0000000000000000
 r18: 0000000000000000   r19: 0000000000000000   r20: 0000000000000000
 r21: 0000000000000000   r22: 0000000000000000   r23: 0000000000000000
 r24: 0000000000000000   r25: 0000000000000000   r26: 0000000000000000
 r27: 0000000000000000   r28: 0000000000000000   r29: 0000000000000000
 r30: 00000000fffc1f4c    sp: 00000000fffe5980    pc: 00000000fffc0d5c
cpsr:         600002cd   vfp                     sys                  

# Local variables can be viewed
xsdb% locals
Int_1_Loc       : 1113232
Int_2_Loc       : 30
Int_3_Loc       : 0
Ch_Index        : 0
Enum_Loc        : 0
Str_1_Loc       : char[31]
Str_2_Loc       : char[31]
Run_Index       : 1061232
Number_Of_Runs  : 2

# Local variable value can be modified
xsdb% locals Number_Of_Runs 100
xsdb% locals Number_Of_Runs
Number_Of_Runs  : 100

# Global variables and be displayed, and its value can be modified
xsdb% print Int_Glob
Int_Glob  : 0
xsdb% print -set Int_Glob 23
xsdb% print Int_Glob
Int_Glob  : 23

# Expressions can be evaluated and its value can be displayed
xsdb% print Int_Glob + 1 * 2
Int_Glob + 1 * 2  : 25

# Step over a line of source code
xsdb% nxt
Info: Cortex-A53 #0 (target 10) Stopped at 0xfffc0d64 (Step)

# View stack trace
xsdb% bt
    0  0xfffc0d64 main()+8: ../src/dhry_1.c, line 79
    1  0xfffc1f4c _startup()+84: xil-crt0.S, line 110
注記: サーバーを実行しているリモート マシンから .elf ファイルにアクセスできない場合は、上記の例に示すように、xsdb% connect -url TCP:xhdbfarmc7:3121 コマンドに -symbols オプションを追加する必要があります。

BSP 設定の変更

次に、MicroBlaze™ プロセッサをターゲットとする HelloWorld アプリケーションをビルドする XSCT セッションの例を示します。STDIN および STDOUT OS パラメーターを MDM_0 を使用するよう変更します。

注記: BSP 設定を変更した場合、変更をソース ファイルに反映するため、コンパイルの前に MSS をアップデートして BSP ソースを再生成する必要があります。
setws /tmp/wrk/workspace
app create -name mb_app -hw /tmp/wrk/kc705_system.xsa -proc microblaze_0 -os standalone -template {Hello World}
bsp config stdin mdm_0
bsp config stdout mdm_0
platform generate
app build -name mb_app

スタンドアロン アプリケーションのデバッグ

ザイリンクス システム コマンド ライン ツール (XSCT) を使用すると、複数のプロセッサ コアのスタンドアロン アプリケーションを同時にデバッグできます。デバッグの最初の手順として、hw_server に接続してデバッグ ターゲットを選択します。この後、必要な場合はシステム/プロセッサ コアをリセットして PS を初期化し、FPGA をプログラムして ELF ファイルをダウンロードし、プログラムを実行して、スタック トレースを確認したり、ローカル/グローバル変数を表示したりできます。

次に、Zynq®-7000 SoC 上のスタンドアロン アプリケーションをデバッグする XSCT セッションの例を示します。# で開始している行はコメントです。

#connect to remote hw_server by specifying its url. 
#If the hardware is connected to a local machine,-url option and the <url> 
#are not needed. connect command returns the channel ID of the connection

xsct% connect -url TCP:xhdbfarmc7:3121 tcfchan#0

# List available targets and select a target through its id. 
#The targets are assigned IDs as they are discovered on the Jtag chain, 
#so the IDs can change from session to session. 
#For non-interactive usage, -filter option can be used to select a target, 
#instead of selecting the target through its ID

xsct% targets
  1  APU
     2  ARM Cortex-A9 MPCore #0 (Running)
     3  ARM Cortex-A9 MPCore #1 (Running)
  4  xc7z020
xsct% targets 2
# Reset the system before initializing the PS and configuring the FPGA

xsct% rst
# Info messages are displayed when the status of a core changes
Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0xfffffe1c (Suspended)
Info: ARM Cortex-A9 MPCore #1 (target 3) Stopped at 0xfffffe18 (Suspended)

# Configure the FPGA. When the active target is not a FPGA device, 
#the first FPGA device is configured

xsct% fpga ZC702_HwPlatform/design_1_wrapper.bit
100%    3MB   1.8MB/s  00:02

# Run loadhw command to make the debugger aware of the processor cores’ memory map   
xsct% loadhw ZC702_HwPlatform/system.xsa
design_1_wrapper

# Source the ps7_init.tcl script and run ps7_init and ps7_post_config commands
xsct% source ZC702_HwPlatform/ps7_init.tcl
xsct% ps7_init
xsct% ps7_post_config

# Download the application program
xsct% dow dhrystone/Debug/dhrystone.elf
Downloading Program -- dhrystone/Debug/dhrystone.elf
     section, .text: 0x00100000 - 0x001037f3
     section, .init: 0x001037f4 - 0x0010380b
     section, .fini: 0x0010380c - 0x00103823
     section, .rodata: 0x00103824 - 0x00103e67
     section, .data: 0x00103e68 - 0x001042db
     section, .eh_frame: 0x001042dc - 0x0010434f
     section, .mmu_tbl: 0x00108000 - 0x0010bfff
     section, .init_array: 0x0010c000 - 0x0010c007
     section, .fini_array: 0x0010c008 - 0x0010c00b
     section, .bss: 0x0010c00c - 0x0010e897
     section, .heap: 0x0010e898 - 0x0010ec9f
     section, .stack: 0x0010eca0 - 0x0011149f
100%    0MB   0.3MB/s  00:00   

Setting PC to Program Start Address 0x00100000

Successfully downloaded dhrystone/Debug/dhrystone.elf

# Set a breakpoint at main()
xsct% bpadd -addr &main
0

# Resume the processor core
xsct% con

# Info message is displayed when the core hits the breakpoint
xsct% Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0x1005a4 (Breakpoint)

# Registers can be viewed when the core is stopped
xsct% rrd
     r0: 00000000       r1: 00000000       r2: 0010e898       r3: 001042dc
     r4: 00000003       r5: 0000001e       r6: 0000ffff       r7: f8f00000
     r8: 00000000       r9: ffffffff      r10: 00000000      r11: 00000000
    r12: 0010fc90       sp: 0010fca0       lr: 001022d8       pc: 001005a4
   cpsr: 600000df      usr                fiq                irq         
    abt                und                svc                mon         
    vfp               cp15            Jazelle

# Memory contents can be displayed
xsct% mrd 0xe000d000
E000D000:   800A0000

# Local variables can be viewed
xsct% locals
Int_1_Loc       : 1113232
Int_2_Loc       : 30
Int_3_Loc       : 0
Ch_Index        : 0
Enum_Loc        : 0
Str_1_Loc       : char[31]
Str_2_Loc       : char[31]
Run_Index       : 1061232
Number_Of_Runs  : 2

# Local variable value can be modified
xsct% locals Number_Of_Runs 100
xsct% locals Number_Of_Runs
Number_Of_Runs  : 100

# Global variables and be displayed, and its value can be modified
xsct% print Int_Glob
Int_Glob  : 0
xsct% print -set Int_Glob 23
xsct% print Int_Glob
Int_Glob  : 23

# Expressions can be evaluated and its value can be displayed
xsct% print Int_Glob + 1 * 2
Int_Glob + 1 * 2  : 25

# Step over a line of source code
xsct% nxt
Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0x1005b0 (Step)

# View stack trace
xsct% bt
    0  0x1005b0 main()+12: ../src/dhry_1.c, line 91
    1  0x1022d8 _start()+88
    2  unknown-pc

# Set a breakpoint at exit and resume execution
xsct% bpadd -addr &exit
1
xsct% con
Info: ARM Cortex-A9 MPCore #0 (target 2) Running
xsct% Info: ARM Cortex-A9 MPCore #0 (target 2) Stopped at 0x103094 (Breakpoint)
xsct% bt
    0  0x103094 exit()
    1  0x1022e0 _start()+96
    2  unknown-pc

A9 #0 でプログラムを実行中に、別の ELF を A9 #1 にダウンロードして、同様の手順でデバッグできます。この場合、hw_server に接続し直して PS を初期化し、FPGA をコンフィギュレーションする必要はありません。単に A9 #1 ターゲットを選択して ELF をダウンロードし、デバッグを続行します。

SVF ファイルの生成

SVF (Serial Vector Format) は業界標準のファイル形式で、JTAG チェーンの操作をコンパクトでポータブルな方法で記述するために使用されます。次は、SVF ファイルを生成する XSCT スクリプトの例です。

# Reset values of respective cores
set core 0
set apu_reset_a53 {0x380e 0x340d 0x2c0b 0x1c07}
# Generate SVF file for linking DAP to the JTAG chain
# Next 2 steps are required only for Rev2.0 silicon and above.
svf config -scan-chain {0x14738093 12 0x5ba00477 4
} -device-index 1 -linkdap -out "dapcon.svf"
svf generate
# Configure the SVF generation
svf config -scan-chain {0x14738093 12 0x5ba00477 4
} -device-index 1 -cpu-index $core -delay 10 -out "fsbl_hello.svf"
# Record writing of bootloop and release of A53 core from reset
svf mwr 0xffff0000 0x14000000
svf mwr 0xfd1a0104 [lindex $apu_reset_a53 $core]
# Record stopping the core
svf stop
# Record downloading FSBL
svf dow "fsbl.elf"
# Record executing FSBL
svf con
svf delay 100000
# Record some delay and then stopping the core
svf stop
# Record downloading the application
svf dow "hello.elf"
# Record executing application
svf con
# Generate SVF
svf generate
注記: SVF ファイルは、XSCT を使用してのみ記録できます。SVF ファイルの再生には、どの標準 SVF プレイヤーでも使用できます。

SVF ファイルを Vivado® ハードウェア マネージャーで再生するには、ターゲットに接続してから、次の Tcl コマンドを使用して選択したターゲットでファイルを再生します。

execute_hw_svf <*.svf file>

非インタラクティブ モードでのアプリケーションの実行

ザイリンクス システム デバッガー コマンドライン インターフェイス (XSDB) は、アプリケーションを非インタラクティブ モードでスクリプトを使用して実行するためのインターフェイスです。前述の例をスクリプトを使用して実行するには、次のコマンドを含む Tcl スクリプトを作成し、test.tcl などの名前を付けます。スクリプトを実行するには、XSDB にスクリプトを起動引数として渡します。

connect -url TCP:xhdbfarmc7:3121

# Select the target whose name starts with ARM and ends with #0. 
# On Zynq, this selects “ARM Cortex-A9 MPCore #0”

targets -set -filter {name =~ "ARM* #0"}
rst
fpga ZC702_HwPlatform/design_1_wrapper.bit
loadhw ZC702_HwPlatform/system.xsa
source ZC702_HwPlatform/ps7_init.tcl
ps7_init
ps7_post_config
dow dhrystone/Debug/dhrystone.elf

# Set a breakpoint at exit

bpadd -addr &exit

# Resume execution and block until the core stops (due to breakpoint) 
# or a timeout of 5 sec is reached

con -block -timeout 5

Tcl スクリプトの実行

Tcl スクリプトは、XSCT コマンドで作成し、インタラクティブまたは非インタラクティブなモードで実行できます。インタラクティブ モードの場合は、XSCT プロンプトでスクリプトを読み込むことができます。次に例を示します。

xsct% source xsct_script.tcl 

非インタラクティブ モードの場合は、launch 引数としてスクリプトを指定すると、そのスクリプトを実行できます。スクリプトに対する引数は、スクリプト名の後に付けます。次に例を示します。

$ xsct xsct_script.tcl [args]

次のスクリプトは、XSCT の使用例を示しています。このスクリプトは、アプリケーションを作成してビルドし、リモートの hw_server に接続し、リモート ホストに接続される Zynq® PS を初期化し、ターゲットにアプリケーションをダウンロードして実行します。これらのコマンドは、スクリプトで記述できるほか、インタラクティブに実行することもできます。

# Set Vitis workspace
setws /tmp/workspace
# Create application project
app create -name hello -hw /tmp/wrk/system.xsa -proc ps7_cortexa9_0 -os standalone -lang C -template {Hello World}
app build -name hello hw_server
connect -host raptor-host
# Select a target
targets -set -nocase -filter {name =~ “ARM* #0}
# System Reset
rst -system
# PS7 initialization
namespace eval xsdb {source /tmp/workspace/hw1/ps7_init.tcl; ps7_init}
# Download the elf
dow /tmp/workspace/hello/Debug/hello.elf
# Insert a breakpoint @ main
bpadd -addr &main
# Continue execution until the target is suspended
con -block -timeout 500
# Print the target registers
puts [rrd]
# Resume the target
con

XSCT と Vitis IDE の切り替え

次に、XSCT を使用して 2 つのアプリケーションを作成し、BSP 設定を変更する XSCT セッションの例を示します。実行後、Vitis 統合開発環境 (IDE) を起動し、XSCT を使用して作成したワークスペースを選択して、アップデートを表示します。

注記: XSCT で作成したワークスペースは、Vitis IDE から使用できます。ただし、このワークスペースを使用できるツールのインスタンスは、一度に 1 つだけです。
# Set Vitis workspace
setws /tmp/workspace
# Create application project
app create -name hello -hw /tmp/wrk/system.xsa -proc ps7_cortexa9_0 -os standalone -lang C -template {Hello World}
app build -name hello
 

JTAG UART の使用

ザイリンクス システム デバッガー コマンド ライン インターフェイス (XSDB) では、JTAG を使用した仮想 UART がサポートされます。これは、物理的な UART が存在しない場合や機能していない場合に便利です。JTAG UART を使用するには、STDIO を JTAG UART にリダイレクトするように SW アプリケーションを変更する必要があります。Vitis IDE では、Arm ベース デザインに STDIO の仮想 UART へのリダイレクトをサポートする CoreSight ドライバーが含まれます。MicroBlaze デザインの場合、uartlite ドライバーが使用できます。仮想 UART ドライバーを使用するには、Vitis IDE でボード サポート設定を開いて STDIN / STDOUT を coresight/mdm に変更します。

XSDB では、2 つのコマンドを介して仮想 UART がサポートされます。

  • jtagterminal: JTAG ベースのハイパーターミナルを開始/停止します。このコマンドは、STDIO 用に新しいターミナル ウィンドウを開きます。このターミナルからのテキスト入力が STDIN に送信され、STDOUT からの出力はすべてこのターミナルに表示されます。
  • readjtaguart: JTAG UART からの読み出しを開始/停止します。このコマンドは STDOUT のポーリングを開始して、XSDB ターミナルに表示するか、ファイルに保存します。

次に、STDIO 用に JTAG ターミナルを使用する方法を示す XSCT セッション例を示します。

connect
source ps7_init.tcl
targets -set -filter {name =~"APU"}
loadhw system.xsa
stop
ps7_init
targets -set -nocase -filter {name =~ "ARM*#0"}
rst –processor
dow <app>.elf
jtagterminal
con
jtagterminal -stop #after you are done  

次に、JTAG UART 用に XSCT コンソールを STDOUT として使用する方法を示す XSCT セッション例を示します。

connect
source ps7_init.tcl
targets -set -filter {name =~"APU"}
loadhw system.xsa
stop
ps7_init
targets -set -nocase -filter {name =~ "ARM*#0"}
rst –processor
dow <app>.elf
readjtaguart
con
readjtaguart -stop #after you are done

次に、STDOUT を JTAG UART からファイルにリダイレクトする方法示す XSCT セッション例を示します。

connect
source ps7_init.tcl
targets -set -filter {name =~"APU"}
loadhw system.xsa
stop
ps7_init
targets -set -nocase -filter {name =~ "ARM*#0"}
rst –processor
dow <app>.elf
set fp [open uart.log w]
readjtaguart -handle $fp
con
readjtaguart -stop #after you are done

ライブラリの使用

次は、デフォルトのドメインを作成して XILFFS および XILRSA ライブラリを BSP に追加する XSCT セッションの例です。その後 FSBL アプリケーションを作成します。

注記: 通常のドメイン/BSP には、何のライブラリも含まれません。
setws /tmp/wrk/workspace
app create -name hello -hw /tmp/wrk/system.xsa -proc ps7_cortexa9_0 -os standalone -lang C -template {Hello World}
bsp setlib -name xilffs
bsp setlib -name xilrsa
platform generate
app build -name hello 

OS バージョンを変更します。

bsp setosversion -ver 6.6

ドライバーを IP に割り当てます。

bsp setdriver -ip ps7_uart_1 -driver generic -ver 2.0

ライブラリを削除します (ドメイン/BSP から xilrsa ライブラリを削除)。

bsp removelib -name xilrsa

FSBL/PMUFW ソース ファイルの編集

次の例に、FSBL/PMUFW ソース ファイルを編集する方法を示します。

setws workspace
app create -name a53_app -hw zcu102 -os standalone -proc psu_cortexa53_0
#Go to “workspace/zcu102/zynqmp_fsbl” or “workspace/zcu102/zynqmp_pmufw”  and modify the source files using any editor like gedit or gvim for boot domains zynqmp_fsbl and zynqmp_pmufw.
platform generate

FSBL/PMUFW 設定

次の例は、FSBL/PMUFW 設定を編集する方法を示しています。

setws workspace
app create -name a53_app -hw zcu102 -os standalone -proc psu_cortexa53_0
#If you want to modify anything in zynqmp_fsbl domain use below command to active that domain
domain active zynqmp_fsbl
#If you want to modify anything in zynqmp_pmufw domain use below command to active that domain
domain active zynqmp_pmufw
#configure the BSP settings for boot domain like FSBL or PMUFW
bsp config -append compiler_flags -DFSBL_DEBUG_INFO
platform generate