OpenOCD(四):OpenOCD服务器配置

简介: OpenOCD(四):OpenOCD服务器配置

一、服务器配置

此处的命令通常在openocd.cfg文件中找到,用于指定使用的TCP/IP端口以及应如何支持GDB。

1 配置阶段

当OpenOCD服务器进程启动时,它进入配置阶段,这是唯一可以发出某些命令、配置命令的时间。通常,配置命令仅在启动脚本中可用。

在本手册中,配置命令的定义以配置命令的形式呈现,而不是可以交互发出的命令。运行时帮助命令还突出显示配置命令,以及可能随时发出的命令。

这些配置命令包括声明TAP、闪存组、用于JTAG通信的接口和其他基本设置。服务器必须离开配置阶段,然后才能访问或激活TAP。在它离开此阶段后,配置命令可能不再发出。

命令:命令模式【命令名称】

返回命令允许的命令模式:“any”、“config”或“exec”。如果未指定命令,则返回当前命令模式。如果给定了未知命令,则返回“未知”。命令可以是多个令牌。(命令随时有效)

在本文档中,模式被描述为阶段,'config’和’exec’模式对应配置阶段和运行阶段。'any’表示命令可以在任何一个阶段执行。请参见配置阶段,和请参见进入运行阶段。

2 进入运行阶段

OpenOCD在离开配置阶段后要做的第一件事是验证它是否可以与已配置的扫描链(TAP列表)通信。如果它找不到它期望找到的TAP,或者找到不应该存在的TAP,它将发出警告。在这一点上,您应该没有看到任何错误。如果您看到错误,请通过更正用于配置服务器的命令来解决这些错误。常见错误包括使用太快的初始JTAG速度,以及没有为扫描链上的TAP提供正确的IDCODE值。

一旦OpenOCD进入运行阶段,许多命令就可用了。其中许多与您可能声明的调试目标有关。例如,在成功实例化目标之前,mww命令将不可用。如果要使用这些命令,可能需要强制进入运行阶段。

配置命令:init

此命令终止配置阶段,进入运行阶段。当您需要让启动脚本管理任务(如重置目标、编程闪存等)时,这将有所帮助。要在启动时重置CPU,请使用-c命令行开关在配置脚本末尾或OpenOCD命令行末尾添加“init”和“reset”。

如果此命令未出现在任何启动/配置文件中,OpenOCD将在处理所有配置文件和/或命令行选项后为您执行该命令。

注意:此命令通常发生在openocd.cfg文件末尾附近,以强制OpenOCD“初始化”并使目标就绪。例如:如果您的openocd.cfg文件需要读/写目标上的内存,则init必须出现在内存读/写命令之前。这包括nand探测器。

init调用以下OpenOCD内部命令初始化相应的子系统:

  • Config Command: target init
  • Command: transport init
  • Command: dap init
  • Config Command: flash init
  • Config Command: nand init
  • Config Command: pld init
  • Command: tpiu init

最后,init执行TCL列表post_init_commands中指定的所有命令。命令的执行顺序与它们在列表中的顺序相同。如果其中一个命令失败,则会传播错误,OpenOCD也会失败。

lappend post_init_commands {echo "OpenOCD successfully initialized."}
lappend post_init_commands {echo "Have fun with OpenOCD !"}

配置命令:noinit

防止OpenOCD在启动结束时隐式init调用。允许通过telnet或Tcl连接发出配置命令。配置完成后,使用init进入运行阶段。

可覆盖过程:jtag_init

这在服务器启动时调用,以验证它是否可以与已配置的扫描链(TAP列表)通信。

默认实现首先尝试jtag arp_init,它在检查扫描链之前仅使用轻量级JTAG重置。如果失败,它将再次尝试,使用可覆盖过程init_reset中的更硬重置。

实现必须在返回之前验证JTAG扫描链。这可以通过调用jtag arp_init(或jtag arp_init-reset)来完成。

3 TCP/IP端口

OpenOCD服务器接受多种语法的远程命令。每个语法都使用不同的TCP/IP端口,您只能在配置期间(在打开这些端口之前)指定该端口。

出于包括安全在内的原因,您可能希望阻止使用其中一个或多个端口进行远程访问。在这种情况下,只需将相关端口号指定为“禁用”。如果禁用通过TCP/IP的所有访问,则需要使用命令行-管道选项。

配置命令:gdb_port [number]

通常,gdb侦听TCP/IP端口,但GDB也可以通过管道(stdin/out或命名管道)通信。“gdb_port”这个名称被卡住了,因为它可能涵盖了90%以上的正常用例。

没有参数报告GDB端口。“管道”表示侦听stdin输出到stdout,整数是基本端口号,“禁用”禁用gdb服务器。

使用“管道”时,还可以使用log_output将日志输出重定向到文件,以免泛洪stdin/out管道。

任何其他字符串都被解释为要侦听的命名管道。输出管道与输入管道名称相同,但附加了“o”,例如/var/gdb、/var/gdbo。

第一个目标的GDB端口将是基本端口,第二个目标将侦听gdb_port + 1,依此类推。如果在配置阶段未指定,则端口号默认为3333。当number不是数值时,递增它以计算下一个端口号是行不通的。在这种情况下,请使用命令target create或$target_name configuration的选项-gdb-port为每个目标指定适当的编号。请参见选项-gdb-port。

注意:使用“gdb_port管道”时,建议增加gdb中的默认远程超时(使用“set remotetimeout”)。超时不足可能会导致初始化失败,并显示“未知远程qXfer应答:确定”。

配置命令:tcl_port [number]

指定或查询用于简化RPC连接的端口,客户端可使用该连接发出TCL命令并从Tcl引擎获取输出。打算作为机器接口。如果在配置阶段未指定,则端口号默认为6666。当指定为“禁用”时,此服务将不激活。

配置命令:tcl_port [number]

指定或查询要侦听传入telnet连接的端口。此端口用于通过TCL命令与一个人交互。如果在配置阶段未指定,则端口号默认为4444。当指定为“禁用”时,此服务将不激活。

4 GDB配置

如果需要,您可以重新配置一些GDB行为。此处列出的是静态的和全局的。有关配置单个目标的信息,请参阅目标配置。有关配置特定于目标的事件处理,请参见目标事件。

命令:gdb_breakpoint_override [hard|soft|disable]

强制gdb中断命令的断点类型。如果默认的OpenOCD和GDB行为不够,此选项支持GDB GUI,这些GUI不区分硬断点和软断点。如果已为闪存区域设置内存映射,GDB通常使用硬件断点。

配置命令:gdb_flash_program (enable|disable)

设置为启用,以使OpenOCD在接收到vFlash数据包时对闪存进行编程。默认行为为enable。

配置命令:gdb_memory_map (enable|disable)

设置为启用,以使OpenOCD在请求时将内存配置发送到GDB。然后,GDB将知道何时设置硬件断点,并使用GDB加载命令编程闪存。还必须启用gdb_flash_程序启用,才能使闪存编程工作。默认行为为enable。请参见gdb_flash_程序。

配置命令:gdb_memory_map (enable|disable)

指定数据中止是否导致GDB内存读取数据包报告错误。默认行为为禁用;使用启用查看报告的这些错误。

配置命令:gdb_memory_map (enable|disable)

指定GDB寄存器读/写数据包请求的寄存器访问是否报告错误。默认行为为禁用;使用启用查看报告的这些错误。

配置命令:gdb_target_description (enable|disable)

设置为启用,以使OpenOCD通过qXfer将目标描述发送到gdb:功能:读取数据包。默认行为为enable。

命令:gdb_target_description (enable|disable)

将目标描述文件保存到本地文件系统。

文件名为target_name.xml。

5 事件轮询

硬件调试器是异步系统的一部分,在异步系统中,重要事件随时可能发生。OpenOCD服务器需要检测其中的一些事件,以便它可以通过TCL命令行或GDB报告这些事件。

此类事件的示例包括:

  • 其中一个目标可以停止运行…它可能会触发代码断点或数据观察点,或者停止自己。
  • 消息可以通过“调试消息”通道发送…许多目标支持通过JTAG发送的此类消息,供调试人员或工具接收。
  • 断电…某些适配器可以检测到这些事件。
  • 重置未通过JTAG发出…这种重置源可以包括按钮按下或其他系统硬件,有时包括目标本身(可能通过看门狗)。
  • 调试检测有时支持事件触发,如“跟踪缓冲区已满”(因此可以快速清空)或其他信号(与代码行为相关)。
  • 这些事件都不是通过标准JTAG信号发出的。然而,JTAG连接器的大多数约定包括电压电平和系统复位(SRST)信号检测。一些连接器+ 还包括仪表信号,当这些信号是输入时,这可能暗示事件。

一般来说,OpenOCD需要定期检查这些事件,要么通过查看JTAG连接器上的信号状态,要么通过向各种活动目标发送同步的“告诉我您的状态”JTAG请求。有一个命令可以管理和监控该轮询,这通常是在后台完成的。

  • 命令:poll [on|off]
    轮询当前目标的当前状态。(另请参见目标Curstate。)如果该目标处于调试模式,则将打印有关当前状态的体系结构特定信息。可选参数允许启用和禁用后台轮询。

您可以从TCL命令shell中使用此功能,也可以从GDB中使用监视器轮询命令。在使用GDB时,请保持启用后台轮询。

> poll
background polling: on
target state: halted
target halted in ARM state due to debug-request, \
               current mode: Supervisor
cpsr: 0x800000d3 pc: 0x11081bfc
MMU: disabled, D-Cache: disabled, I-Cache: enabled
>
相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
7月前
|
Ubuntu Linux 测试技术
【ZYNQ】简单几步,教你使用 Petalinux 定制 Linux
【ZYNQ】简单几步,教你使用 Petalinux 定制 Linux
327 0
|
Linux Shell 程序员
linux应用程序安装与应用-1
在主机中安装了CentOS操作系统以后,就具有了提供应用程序和网络服务的平台。然而随操作系统一起安装的软件包毕竟只有少数,实现的功能也比较有限,当需要为主机提供更多的功能时安装新的应用程序就成为必然工作。本章将学习如何在CentOS系统中安装和管理应用程序。
87 0
|
7月前
|
机器学习/深度学习 Linux 开发工具
【Linxu工具】:vim使用及简单配置
【Linxu工具】:vim使用及简单配置
131 0
|
JSON NoSQL 前端开发
在tinycolinux上编译seafile
本文关键字:tinycorelinux上从0源码编译seafile,uswgi方式配置运行seafile
239 0
在tinycolinux上编译seafile
|
Ubuntu Linux Windows
Windows安装Linux子系统--安装GUI界面
原文:Windows安装Linux子系统--安装GUI界面  前段时间发现Windows可以安装Linux子系统了,恰逢电脑换了固态,还没装Linux,不如趁机体验一番! 1、准备工作 1.1、打开Windows的子系统功能 1.2、打开Windows开发人员模式 打开设置–>更新和安全–>针对开发人员,选择开发人员模式–>确定  确认后,重启电脑,系统更新配置。
4010 0
|
Linux Shell 开发工具
09.阿里云服务器(Ubantu系统)配置ndk 编译ffmpeg
(创建于2018/1/4) ffmpeg完整的编译过程 1.ls 显示所有目录文件 2.mkdir root 创建文件夹root //将Android文件夹下的所有强制删除 rm -rf android 3.
1184 0
|
网络虚拟化 网络架构 iOS开发