rk3568.cfg#
[!/usr/local/share/openocd/scripts/target/rk3568.cfg]
# SPDX-License-Identifier: GPL-2.0-or-later reset_config trst_and_srst separate if { [info exists CHIPNAME] } { set _CHIPNAME $CHIPNAME } else { set _CHIPNAME rk3568 } # # Main DAP # if { [info exists DAP_TAPID] } { set _DAP_TAPID $DAP_TAPID } else { set _DAP_TAPID 0x2ba01477 } adapter driver jlink adapter speed 12000 transport select swd # declare the one SWD tap to access the DAP swd newdap $_CHIPNAME cpu -expected-id $_DAP_TAPID -ignore-version # create the DAP dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu target create $_CHIPNAME.ahb mem_ap -dap $_CHIPNAME.dap -ap-num 0 set _TARGETNAME $_CHIPNAME.lcore # declare the 6 main application cores set _smp_command "" set $_TARGETNAME.base(0) 0x81004000 set $_TARGETNAME.base(1) 0x81005000 set $_TARGETNAME.base(2) 0x81006000 set $_TARGETNAME.base(3) 0x81007000 set $_TARGETNAME.cti(0) 0x81014000 set $_TARGETNAME.cti(1) 0x81015000 set $_TARGETNAME.cti(2) 0x81016000 set $_TARGETNAME.cti(3) 0x81017000 set _cores 4 for { set _core 0 } { $_core < $_cores } { incr _core 1 } { set _TARGETNAME $_CHIPNAME.lcore cti create cti$_core -dap $_CHIPNAME.dap -baseaddr [set $_TARGETNAME.cti($_core)] -ap-num 0 target create \${_TARGETNAME}$_core aarch64 -dap $_CHIPNAME.dap -coreid $_core -cti cti\$_core -dbgbase [set $_TARGETNAME.base($_core)] if { $_core != 0 } { ${_TARGETNAME}$_core configure -defer-examine } else { # uncomment to use hardware threads pseudo rtos # ${_TARGETNAME}$_core configure -rtos hwthread" ${_TARGETNAME}$_core configure -work-area-size 0x30000 -work-area-phys 0xff8c0000 \ -work-area-backup 0 } set _smp_command "$_smp_command ${_TARGETNAME}$_core" } # Add the second flash bank. #set QUADSPI 1 #set _FLASHNAME $_CHIPNAME.flash1 #flash bank $_FLASHNAME stmqspi 0 0x4000000 2 2 ${_TARGETNAME}0 #flash bank $_FLASHNAME fespi 0 0 0 0 ${_TARGETNAME}0 0xfe610000 target smp $_smp_command targets rk3568.lcore0
本文主要以上述配置文件為例,講解 [[openocd]] 每條配置命令的作用。
reset_config#
reset_config trst_and_srst separate
Command: reset_config mode_flag ...
此命令在目標配置腳本中顯示或修改 JTAG 板和目標組合的復位配置。
本節前面的信息描述了該命令要解決的問題類型(參見 SRST 和 TRST 問題)。一般來說,該命令僅適用於電路板配置文件,用於描述 board doesn’t connect TRST 等問題;或適用於用戶配置文件,用於解決接口和電路板的特定組合所帶來的限制。(一個不太可能的例子是將僅連接 TRST 的適配器與僅連接 SRST 的電路板一起使用)。
模式標誌(mode_flag)選項可以任意順序指定,但信號、組合、門、trst_type、srst_type 和 connect_type 每種類型一次只能指定一個。如果不為給定類型提供新值,其先前值(可能是默認值)將保持不變。例如,這意味著如果 JTAG 適配器要驅動 SRST,則必須明確地將其驅動為高電平(srst_push_pull),而無需對 TRST 做任何說明。
- signals 可以指定連接哪些復位信號。例如,如果 JTAG 接口提供 SRST,但電路板沒有正確連接該信號,則 OpenOCD 無法使用它。可能的值有:無(默認值)、trst_only、srst_only 和 trst_and_srst。
> **Tip:** 如果您的電路板通過 JTAG 連接器提供 SRST 和/或 TRST,則必須聲明這樣才能使用這些信號。
組合是一個可選值,指定損壞的復位信號實現。如果沒有給出任何選項,則默認行為是分開,表示一切正常。srst_pulls_trst 表示測試邏輯與系統重置一起重置(例如 NXP LPC2000,“損壞的” 電路板佈局),trst_pulls_srst 表示系統與測試邏輯一起重置(僅假設,我還沒有看到硬件與這樣的錯誤,並且可以解決)。組合意味著 srst_pulls_trst 和 trst_pulls_srst。
gates 標記控制描述某些情況下 JTAG 可能在重置期間不可用的標誌。srst_gates_jtag(默認)表示斷定 SRST 時,JTAG 時鐘將被門控。這意味著當 SRST 被斷言時,JTAG 上不會發生任何通信。其反義詞是 srst_nogate,表示在 SRST 處於活動狀態時,可以安全地發出 JTAG 命令。
connect_type 標記控制描述 SRST 在連接目標時被斷言的某些情況的標誌。srst_nogate 是使用此選項所需的。connect_deassert_srst(默認)表示 SRST 在連接目標時不會被斷言。與之相反的 connect_assert_srst,表示 SRST 將在任何目標連接之前被斷言。只有部分目標支持該功能,例如 STM32 和 STR9。如果由於不正確的選項字節配置或非法程序執行導致無法連接目標,該功能將非常有用。
可選的 trst_type 和 srst_type 參數允許指定每條復位線的驅動模式。這些值僅影響支持不同驅動模式的 JTAG 接口,如 Amontec JTAGkey 和 JTAG Accelerator。此外,如果未連接相關信號(TRST 或 SRST),這些值必然會被忽略。
- 測試復位信號 (TRST) 可能的 trst_type 驅動模式有默認的 trst_push_pull 和 trst_open_drain。大多數電路板將該信號連接到下拉,因此 JTAG TAP 除非連接到 JTAG 適配器,否則永遠不會離開復位。
- 系統復位信號 (SRST) 的 srst_type 驅動模式有默認的 srst_open_drain 和 srst_push_pull。大多數電路板將該信號連接至上拉器,並允許通過各種事件(包括系統上電和按下復位按鈕)將該信號拉低。
info exit#
Config File Guidelines (OpenOCD User’s Guide)
Note
所有目標配置文件應以這樣的代碼開頭,讓電路板配置文件表達環境特定的差異。
板可能會覆蓋芯片名稱,可能基於角色,
但默認應與供應商使用的匹配
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME sam7x256
}
# 只對可以更改的目標使用 ENDIAN。
if { [info exists ENDIAN] } {
set _ENDIAN $ENDIAN
} else {
set _ENDIAN little
}
# TAP 標識符可能會隨著芯片的成熟而改變,例如隨著
# 新的修訂字段(這裡的 "3")。選擇一個好的默認值;您
# 可以將多個此類標識符傳遞給 "jtag newtap" 命令。
if { [info exists CPUTAPID ] } {
set _CPUTAPID $CPUTAPID
} else {
set _CPUTAPID 0x3f0f0f0f
}
記住: 電路板配置文件可以包含多個目標配置文件,或多次使用相同的目標文件(至少更改 CHIPNAME
)。
同樣,目標配置文件應定義 _TARGETNAME
(或 _TARGETNAME0
等)並在稍後定義調試目標時使用:
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME arm7tdmi -chain-position $_TARGETNAME
set#
set _CHIPNAME rk3568
set _DAP_TAPID 0x2ba01477
set _TARGETNAME $_CHIPNAME.lcore
set _smp_command ""
set $_TARGETNAME.base(0) 0x81004000
set $_TARGETNAME.base(1) 0x81005000
set $_TARGETNAME.base(2) 0x81006000
set $_TARGETNAME.base(3) 0x81007000
set $_TARGETNAME.cti(0) 0x81014000
set $_TARGETNAME.cti(1) 0x81015000
set $_TARGETNAME.cti(2) 0x81016000
set $_TARGETNAME.cti(3) 0x81017000
set _cores 4
set 為變量賦值命令,參數可以是字符串,數字,其他變量
adapter#
adapter driver jlink
adapter speed 12000
Debug Adapter Configuration (OpenOCD User’s Guide)
Config Command: adapter driver name
使用適配器驅動程序 名稱 連接到目標。
名稱列表詳見 Interface-Drivers
Command: adapter speed max_speed_kHz非零速度以 KHZ 為單位。因此:3000 是 3mhz。JTAG 接口通常支持有限數量的速度。實際使用的速度不會快於指定的速度。
芯片數據表通常包括最高 JTAG 時鐘速率。實際速率通常是 CPU 核心時鐘的函數,並且通常低於該峰值速率。例如,大多數 ARM 核心最多接受 CPU 時鐘的六分之一。
速度 0 (khz) 選擇 RTCK 方法。請參見 FAQ RTCK。如果您的系統使用 RTCK,則在設置後無需更改 JTAG 時鐘。不所有接口、電路板或目標都支持 “rtck”。如果接口設備不支持它,則在嘗試使用 RTCK 時會返回錯誤。
transport select and swd newdap#
transport select swd
swd newdap $_CHIPNAME cpu -expected-id $_DAP_TAPID -ignore-version
SWD (Serial Wire Debug) 是一種 ARM 特定的傳輸方式,暴露一個調試訪問點 (DAP,必須明確聲明)。(SWD 使用的信號線比 JTAG 少。)SWD 以調試為導向,不支持邊界掃描測試。閃存編程支持建立在調試支持之上。(某些處理器同時支持 JTAG 和 SWD。)
使用命令
transport select swd
選擇 SWD 傳輸。除非您的適配器使用 hla 接口驅動程序(在這種情況下命令為transport select hla_swd
)或 st-link 接口驅動程序(在這種情況下命令為transport select dapdirect_swd
)。Config Command: swd newdap ...
聲明一個使用 SWD 傳輸的單一 DAP。參數目前與 "jtag newtap" 相同,但這預期會改變。
更新的 SWD 設備 (SW-DP v2 或 SWJ-DP v2) 支持 SWD 協議的多掉落擴展:兩個或更多設備可以連接到一個 SWD 適配器。如果 DAP 配置了
-dp-id
和-instance-id
參數,則 SWD 傳輸在多掉落模式下工作,無論創建了多少 DAP。不是所有適配器和適配器驅動程序都支持 SWD 多掉落。只有以下適配器驅動程序支持 SWD 多掉落:cmsis_dap(使用 CMSIS-DAP 版本 2.0 的適配器)、ftdi、所有基於 bitbang 的。
Config Command: jtag newtap chipname tapname configparams...
聲明一個新的 TAP,帶有點名 chipname.tapname,並根據各種 configparams 進行配置。chipname 是芯片的符號名稱。傳統上,目標配置文件使用
$_CHIPNAME
,默認為芯片供應商提供的型號名稱,但可以覆蓋。tapname 反映該 TAP 的角色,應遵循以下約定:
bs
– 用於邊界掃描,如果這是一個單獨的 TAP;cpu
– 芯片的主要 CPU,或者在同時具有 ARM 和 DSP CPU 的芯片上使用arm
和dsp
,在具有兩個 ARMs 的芯片上使用arm1
和arm2
,依此類推;etb
– 用於嵌入式跟蹤緩衝區(例如:ARM ETB11);flash
– 如果芯片有閃存 TAP,如 str912;jrc
– 用於 JTAG 路由控制器(例如:許多德州儀器芯片上的 ICEPick 模塊,如 Beagleboards 上的 OMAP3530);tap
– 僅應用於具有單個 TAP 的 FPGA 或 CPLD 類設備;unknownN
– 如果您不知道該 TAP 是用於什麼(N 是一個數字);- 當不確定時 – 使用芯片製造商在其數據表中的名稱。例如,Freescale i.MX31 有一個 SDMA(智能 DMA)與 JTAG TAP;該 TAP 應命名為
sdma
。每個 TAP 至少需要以下 configparams:
-irlen
NUMBER
指令寄存器的位長度,例如 4 或 5 位。TAP 還可以提供可選的 configparams:
-disable
(或-enable
)
使用-disable
參數標記在使用 TRST 或 JTAG 狀態機的 RESET 狀態重置後未鏈接到掃描鏈的 TAP。您可以使用-enable
來突出顯示默認狀態(TAP 已鏈接)。請參見 啟用和禁用 TAPs。
-expected-id
NUMBER
一個非零 number 代表您期望在檢查掃描鏈時找到的 32 位 IDCODE。這些代碼並不是所有 JTAG 設備所要求的。根據需要重複該選項,如果可能出現多個 ID 代碼(例如,多個版本)。如果要抑制有關找到但未包含在列表中的 IDCODE 值的警告,請指定 number 為零。如果可能,請提供此值,因為它使 OpenOCD 能夠告知掃描鏈不正確。這些值在供應商的芯片文檔中提供,通常是技術參考手冊。有時您可能需要探測 JTAG 硬件以找到這些值。請參見 自動探測。
-ignore-version
指定此選項以忽略-expected-id
選項中的 JTAG 版本字段。當供應商發布多個版本的芯片,或對幾個大致兼容的芯片使用相同的 JTAG 級 ID 時,忽略版本字段可能比更新配置文件以處理所有各種芯片 ID 更實用。版本字段定義為 IDCODE 的第 28-31 位。
-ignore-bypass
指定此選項以忽略 idcode 的 “旁路” 位。某些供應商對此位提供了無效的 idcode。指定此選項以忽略此位,並且不將此 TAP 視為旁路模式。
-ircapture
NUMBER
TAP 在進入 IRCAPTURE 狀態時加載到 JTAG 移位寄存器的位模式,例如 0x01。JTAG 要求此值的兩個 LSB 為 01。默認情況下,-ircapture
和-irmask
設置為驗證該兩位值。如果您知道其他位,可以提供,或者表明 TAP 不符合 JTAG 規範。
-irmask
NUMBER
與-ircapture
一起使用的掩碼,以驗證指令掃描是否正常工作。OpenOCD 不使用此類掃描,除非驗證 JTAG 掃描鏈操作似乎沒有問題。
-ignore-syspwrupack
指定此選項以在初始檢查和檢查粘性錯誤位時忽略 ARM DAP DP CTRL/STAT 寄存器中的 CSYSPWRUPACK 位。此位通常在設置 CSYSPWRUPREQ 位後檢查,但某些設備在稍後的時間不設置確認位。
dap create#
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu
Command: dap create dap_name -chain-position dotted.name configparams...
聲明一個名為 dap_name 的 DAP 實例,鏈接到 JTAG tap dotted.name。這還創建了一個新命令(
dap_name
),用於各種目的,包括額外配置。系統中每個 JTAG tap 只能有一個 DAP。DAP 還可以提供可選的 configparams:
-adiv5
指定它是 ADIv5 DAP。如果未指定,則為默認值。-adiv6
指定它是 ADIv6 DAP。-ignore-syspwrupack
指定此選項以在初始檢查和檢查粘性錯誤位時忽略 ARM DAP DP CTRL/STAT 寄存器中的 CSYSPWRUPACK 位。此位通常在設置 CSYSPWRUPREQ 位後檢查,但某些設備在稍後的時間不設置確認位。-dp-id
number
SWD DPv2 多掉落的調試端口識別號。該 number 寫入 DP TARGETSEL 的第 0..27 位。在單個連接設備中查找 id 號,請讀取 DP TARGETID:device.dap dpreg 0x24
使用 TARGETID 的第 0..27 位。-instance-id
number
SWD DPv2 多掉落的實例識別號。該 number 寫入 DP TARGETSEL 的第 28..31 位。在單個連接設備中查找實例號,請讀取 DP DLPIDR:device.dap dpreg 0x34
實例號在 DLPIDR 值的第 28..31 位。
target create and ${_TARGETNAME}$_core configure -defer-examine#
target create $_CHIPNAME.ahb mem_ap -dap $_CHIPNAME.dap -ap-num 0
target create ${_TARGETNAME}$_core aarch64 -dap $_CHIPNAME.dap -coreid $_core -cti cti$_core -dbgbase [set $_TARGETNAME.base($_core)]
${_TARGETNAME}$_core configure -defer-examine
${_TARGETNAME}$_core configure -work-area-size 0x30000 -work-area-phys 0xff8c0000 -work-area-backup 0
Config Command: target create target_name type configparams...
此命令創建一個 GDB 調試目標,引用特定的 JTAG tap。它將該目標輸入到列表中,並創建一個新命令(
target_name
),用於各種目的,包括額外配置。
target_name ... 是調試目標的名稱。根據約定,這應與與此目標相關的 TAP 的 dotted.name 相同,必須在此處使用
-chain-position dotted.name
configparam 指定。此名稱還用於創建目標對象命令,在此稱為
$target_name
,在其他地方需要識別目標。type ... 指定目標類型。請參見 target types。
configparams ... 所有參數都被接受
$target_name configure
。如果目標是大端,請在此處設置-endian big
。您 must 在此處設置
-chain-position dotted.name
或-dap dap_name
。Command: $target_name configure configparams...
此命令接受的選項也可以作為參數指定給
target create
。它們的值可以稍後通過使用$target_name cget
命令逐一查詢。警告: 在設置後更改其中一些是危險的。例如,將目標從一個 TAP 移動到另一個;並更改其字節序。
-chain-position
dotted.name – 命名用於訪問此目標的 TAP。
-dap
dap_name – 命名用於訪問此目標的 DAP。請參見 DAP declaration,有關如何創建和管理 DAP 實例的信息。
-endian
(big|little) – 指定 CPU 使用大端或小端約定
-event
event_name event_body – 請參見 Target Events。請注意,這會更新命名事件處理程序的列表。用兩個不同的事件名稱調用這兩次會分配兩個不同的處理程序,但用相同的事件名稱調用兩次僅分配一個處理程序。當前目標在處理程序代碼開始之前暫時被覆蓋為發出事件的目標,並在處理程序完成後切換回來。
-work-area-backup
(0|1) – 表示工作區是否需要備份;默認情況下,不備份。在可能的情況下,使用不需要備份的工作區,因為執行備份會減慢操作。例如,SRAM 塊的開頭可能會被大多數構建系統使用,但結尾通常未使用。
-work-area-size
size – 指定工作區大小,以字節為單位。無論使用物理地址還是虛擬地址,均適用相同的大小。
-work-area-phys
address – 設置在未啟用 MMU 時使用的工作區基地址。
-work-area-virt
address – 設置在啟用 MMU 時使用的工作區基地址。_除非在具有 MMU 的目標上,否則不要指定此值。_該值通常應對應於當前操作系統設置的-work-area-phys
地址的靜態映射。
-rtos
rtos_type – 為目標啟用 rtos 支持,rtos_type 可以是 auto、none、eCos、ThreadX、FreeRTOS、linux、ChibiOS、embKernel、mqx、uCOS-III、nuttx、RIOT、Zephyr、rtkernel,請參見 RTOS Support。
-defer-examine
– 在初始 JTAG 鏈掃描和重置後跳過目標檢查。需要手動調用 arp_examine 以訪問目標進行調試。
-ap-num
ap_number – 設置目標的 DAP 訪問端口。在 ADIv5 DAP 中,ap_number 是目標連接的 DAP AP 的數字索引。在 ADIv6 DAP 中,ap_number 是目標連接的 DAP AP 的基地址。對於多個獨立核心連接到同一 DAP 的不同訪問端口的系統,使用此選項。
-cti
cti_name – 設置連接到目標的交叉觸發接口 (CTI)。目前,只有aarch64
目標使用此選項,這是目標運行控制的強制配置。請參見 ARM Cross-Trigger Interface,以獲取有關如何聲明和控制 CTI 實例的指導。
-gdb-port
number – 請參見命令gdb_port
以獲取參數 number 的可能值,這些值不僅僅是數字值。使用此選項僅為此目標覆蓋使用命令gdb_port
設置的全局參數。請參見 命令 gdb_port。
-gdb-max-connections
number – 實驗性:設置允許的目標的最大 GDB 連接數。默認為 1。number 的負值表示無限制連接。請參見 使用 GDB 作為非侵入式內存檢查器。
但是上述內容中沒有關於-coreid
和-dbgbase
選項的說明,在 SMP 相關章節有提到一點:
Define-CPU-targets-working-in-SMP
Note
設置目標後,您可以定義一組在 SMP 中工作的目標。
set _TARGETNAME_1 $_CHIPNAME.cpu1
set _TARGETNAME_2 $_CHIPNAME.cpu2
target create $_TARGETNAME_1 cortex_a -chain-position $_CHIPNAME.dap \
-coreid 0 -dbgbase $_DAP_DBG1
target create $_TARGETNAME_2 cortex_a -chain-position $_CHIPNAME.dap \
-coreid 1 -dbgbase $_DAP_DBG2
# 定義 2 個在 smp 中工作的目標。
target smp $_CHIPNAME.cpu2 $_CHIPNAME.cpu1
在上面的示例中,cortex_a 上有 2 個 CPU 在 SMP 中工作。在 SMP 中,只創建一個 GDB 實例:
- 一組硬件斷點在列表中的所有目標上設置相同的斷點。
- halt 命令觸發列表中所有目標的停止。
- resume 命令觸發上下文寫入和列表中所有目標的重啟。
- 在斷點後:由斷點停止的目標顯示在 GDB 會話中。
- 為切換 / 檢索 GDB 會話中顯示的目標實現了專用 GDB 串行協議數據包,請參見 使用 OpenOCD SMP 與 GDB。
SMP 行為可以動態禁用 / 啟用。在 cortex_a 上實現了以下命令。
- cortex_a smp on : 啟用 SMP 模式,行為如上所述。
- cortex_a smp off : 禁用 SMP 模式,當前目標是顯示在 GDB 會話中的目標,只有這個目標現在由 GDB 會話控制。這種行為在系統啟動期間非常有用。
- cortex_a smp : 顯示當前 SMP 模式。
- cortex_a smp_gdb : 顯示 / 修正 GDB 會話中顯示的核心 ID,請參見以下示例。
cortex_a smp_gdb
gdb coreid 0 -> -1
#0 : coreid 0 顯示在 GDB ,
#-> -1 : 下一次恢復觸發真正的恢復
cortex_a smp_gdb 1
gdb coreid 0 -> 1
#0 :coreid 0 顯示在 GDB ,
#->1 : 下一次恢復顯示 coreid 1 到 GDB
resume
cortex_a smp_gdb
gdb coreid 1 -> 1
#1 :coreid 1 顯示在 GDB ,
#->1 : 下一次恢復顯示 coreid 1 到 GDB
cortex_a smp_gdb -1
gdb coreid 1 -> -1
#1 :coreid 1 顯示在 GDB,
#->-1 : 下一次恢復觸發真正的恢復
上述例子中除了 target create 之外,以及 target smp 命令也有涉及到
cti create#
cti create cti$_core -dap $_CHIPNAME.dap -baseaddr [set $_TARGETNAME.cti($_core)] -ap-num 0
ARM-Cross_002dTrigger-Interface
Command: cti create cti_name -dap dap_name -ap-num apn -baseaddr base_address
創建一個 CTI 實例 cti_name 在 DAP 實例 dap_name 上 MEM-AP apn。在 ADIv5 DAP 中,apn 是 CTI 連接的 DAP AP 的數字索引。在 ADIv6 DAP 中,apn 是 CTI 連接的 DAP AP 的基地址。base_address 必須與相應 MEM-AP 上的 CTI 的基地址匹配。所有參數都是必需的。這創建了一個新命令
$cti_name
,用於各種目的,包括額外配置。
targets#
targets rk3568.lcore0
所有已設置的目標都是列表的一部分,每個成員都有一個名稱。該名稱通常應與 TAP 名稱相同。您可以使用
targets
(複數!)命令顯示列表。此顯示通常只有一個 CPU;這裡是多於一個的情況:
TargetName | Type | Endian | TapName | State |
---|---|---|---|---|
0* at91rm9200.cpu | arm920t | little | at91rm9200.cpu | running |
1 MyTarget | cortex_m | little | mychip.foo | tap-disabled |
該列表中的一個成員是 current target,它是許多命令隱式引用的。它是標記為目標名稱附近的
*
的那個。特別是,內存地址通常指的是當前目標所見的地址空間。像mdw
(內存顯示字)和flash erase_address
(擦除 NOR 閃存塊)等命令就是例子;還有很多其他命令。幾個命令讓您檢查目標列表:
Command: target current
返回當前目標的名稱。
Command: target names
列出列表中所有當前目標的名稱。
foreach t [target names] {
puts [format "Target: %s\n" $t]
}Command: targets [name]
注意:該命令的名稱是複數形式。其他目標命令名稱是單數形式。
在沒有參數的情況下,該命令以用戶友好的形式顯示所有已知目標的表格。
在有參數的情況下,該命令將當前目標設置為具有給定名稱的目標;這僅在具有多個目標的電路板上相關。