banner
ekko

ekko's blog

时间不在于你拥有多少,而在于你怎样使用
github
xbox
email

openocd配置文件解析

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

Transport-Configuration

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 的。

TAP-Declaration-Commands

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

dap declaration

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;這裡是多於一個的情況:

TargetNameTypeEndianTapNameState
0* at91rm9200.cpuarm920tlittleat91rm9200.cpurunning
1 MyTargetcortex_mlittlemychip.footap-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]

注意:該命令的名稱是複數形式。其他目標命令名稱是單數形式。

在沒有參數的情況下,該命令以用戶友好的形式顯示所有已知目標的表格。

在有參數的情況下,該命令將當前目標設置為具有給定名稱的目標;這僅在具有多個目標的電路板上相關。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。