听起来,远程调试服务器主机CPU像是一项复杂操作,只有硬件工程师才能掌握。但实际上,借助开源工具OpenOCD和OurBMC社区的集成方案,开发者能在BMC环境中快速搭建一套完整的远程调试服务,原本需要物理接触的JTAG调试,变成一条命令行或一次网页点击就能完成的操作。
开源片上调试器OpenOCD运行于调试上位机,借由JTAG或SWD接口同目标CPU通信,在OurBMC环境里,它不再于独立PC运行,而是直接集成于BMC卡的Linux系统内,BMC凭借自身GPIO引脚模拟JTAG主控器的时序信号,以此和服务器主机CPU的JTAG接口构建物理连接。这一整套方案的关键要点在于,在硬件设计的阶段,预先留出了BMC与主机CPU之间的调试通路,如此一来,便让BMC拥有了“远程调试服务器”的能力。对于用户而言,仅仅需要借助网络连接到BMC,便能够如同进行本地调试那般去操作远端CPU。
于一个典型的集成实例之中,OpenOCD软件运行于BMC的Linux系统之内,借助GPIO去模拟JTAG的TCK信号、TMS信号、TDI信号、TDO信号以及可选的TRST信号。这些GPIO引脚经由板级线路直接连接至主机CPU的JTAG接口。在服务启动之后,OpenOCD会于BMC的4444端口开放telnet服务,用户凭借该端口发送调试命令。再者说,要是BMC这一的Web管理界面之内集成了调试交互功能,那么用户能够借助浏览器直接去访问BMC的Web页面,点击按钮进而可完成断点设置、寄存器读取等相关操作,根本无需去记忆任何的命令行指令。
在OurBMC的源码目录里头,OpenOCD的原始配置文件是在meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb这个地方。要是想要把OpenOCD集成到当下的项目里,首先就得在对应的packagegroups软件包配置的bbappend文件当中去添加openocd的依赖。然后,于项目自身的meta层当中,去创建openocd的bbappend文件,此文件是用来进行覆盖或者补充原始配置操作的。而最为关键的一步情况是,要去指定GPIO引脚的映射关系,打个比方来说,“adapter gpio tck 14 -chip 4”这样的表述所代表的也就是,把TCK信号映射进入第4个GPIO控制器的第14号引脚那里。在完成了这些相关配置之后,再次进行编译镜像,并且将其烧录至BMC板卡,如此一来就能够得到支持远程调试功能的固件。
当BMC启动起来,并且主机CPU完成上电操作之后,用户能够借助SSH登录到BMC系统之内,手动开启OpenOCD调试服务,就像去执行“systemctl start start-remote-debug.service”这种操作一样。在服务运行起来以后,BMC的4444端口开始针对telnet连接展开监听。在另外一台终端那里,运用telnet命令去连接BMC的IP地址以及4444端口,这样就能够进入到OpenOCD的交互界面之中。处于该界面情形下,用户能够键入“halt”来使CPU运行暂停,借助“reg”去察看或者更改寄存器值,运用“mdw”读取指定内存地址那里的数据。比如说输入“mdw 0xffff0000 10”能够读取从该地址起始的10个字,全部操作都是经网络达成的,不需要进行物理接触。
Telnet方式尽管功能齐全,可对普通运维人员而言不够友善。OurBMC社区的bmcweb软件包、webui软件包达成了OpenOCD的Web集成方案。此方案运用与SOL(串口重定向)一样的WebSocket技术,前端页面借由WebSocket跟后端bmcweb服务展开通信,bmcweb接着与OpenOCD进程进行交互。在浏览器里,用户打开BMC管理界面,进入调试功能页面,能看到CPU状态、寄存器列表、内存区域等可视化信息了可以,点击按钮就能完成断点设置、单步执行、变量监视等操作。通过这种方式,远程调试面临的使用门槛被大幅降低,开发人员和运维人员都能够快速上手。
于实际的服务器主板调试期间,此方案已然成功运用于多样场景。比如说在系统启动阶段,要是主机CPU因固件问题而卡死于初始化流程,工程师便能够借助BMC远程连接OpenOCD,读取CPU的程序计数器值,进而定位到卡死的指令地址。再如在内核调试进程里,经由OpenOCD设置硬件断点,能够在不改动系统代码的情形下捕获特定内存访问事件。给出的测试数据表明,借由BMC的GPIO去模拟JTAG,此信号的时序跟标准JTAG调试器是一样的,在10MHz的TCK频率状况下能够稳定地进行工作,进而满足绝大多数的调试需求。
于你实际所涉项目之进程里,有无遭逢因不能以物理方式触碰服务器致使在CPU调试阶段陷入停滞受阻之状况呢,但凡是有的话,欢迎于评论区中将你的相关经验情形做一出分享,同时还请为这文字以拇指轻点屏幕予以示意并通过转发功能将此文章进行传播,以便让更多从事开发工作之人知悉怎样借助OurBMC社区迅速构建起专属于自身团队亦或是个人的远程调试环境。
相关标签: # 玩转OurBMC # OpenOCD # 远程调试 # BMC全栈技术 # 知识分享