【教学培训篇】OpenUBMC调试能力

前言

作为一个开发人员,如何掌握自己写的代码,能够熟练得进行相关的代码调试能力是一个很重要的技能,本篇将根据不同的场景,全面阐述相关调试方法和使用和调试工具的使用。

调试方法–日志定位

日志作为BMC里面很重要的一部分,起着至关重要的作用,比如当某个组件出现问题的时候,就可以根据不同类型的日志来定位相关的问题。

  • 日志分类
    1)框架日志 framework.log:这里记录框架组件的相关的,任何和框架相关的组件的日志信息都会记录在这里面。
    2)APP日志app.log:记录除了框架之外的所有组件的日志信息。
    3)操作日志operate.log:记录操作信息,比如某时某刻进行了升级,或者某时某刻发送了ipmi命令等操作的内容。
  • 日志等级划分
    不同的日志有着不同的等级,作为调试定位问题的最重要的一个武器,配合在代码中插入不同等级的日志,来打印想要关注的内容,比如上下文的变量的数值,函数的返回值是否符合预期等情况,下表中阐述了不同的日志等级。
日志 功能
log:debug 记录debug级的调试日志
log:info 记录info级的调试日志
log:notice 记录notice级的调试日志
log:warning 记录warning级的调试日志
log:error 记录error 级的调试日志

但是,该打印什么样的日志,以及是不是所有的日志都是应该打印的,能随便打印日志吗?这些问题都是要考虑到的。

  • 日志打印和日志刷屏
    1)日志打印:一般情况下,除了info和debug等级的日志,其他等级的日志都会打印到BMC中,通过日志打印来定位问题和调试代码是最简单和便携的一种方法。
    2)日志刷屏:BMC采取的是经过裁剪了之后的RTOS,所以可以理解为内存很小,如果大量的日志进来,会导致内存爆炸和重要信息淹没在日志海之中,所以日志打印既要保证重要信息的正确输出,也要防止无关信息的刷屏。

BMC一键收集日志能力

当前BMC支持以下的几种情况来一键收集日志

  • Web界面键收集
  • 通过Redfish接口一键收集
    URI:http://bmc_ip/redfish/v1/Systems/1/LogServices/Actions/LogService.CollectLog
  • CLI命令一键收集
    ipmcget -d d
    收集到的日志里面,最重要的就是以下的几类日志:
  • 操作日志 operate.log:记录了用户的操作的信息,包括什么时间发送了IPMI命令等操作
  • APP日志 app.log:记录了每一个组件的信息,最重要的日志,方便定位
    以上的两个最重要的日志都是在LogDump下,记录了BMC运行过程中的最重要的信息。

调试方法-在线调试

上面阐述的日志调试的方法是一个重要的手段,其核心的方法仍然是通过定位问题出现的地方->打印上下文信息->调试的方法,目前的BMC主要有Lua语言构成,由于Lua是脚本语言, 所以无需编译,即可直接在系统中调试,同理调试北向接口,CSR等内容也可以通过在线调试的方法来进行,得益于BMC Studio的新能力,就连组件也可以进行整包调试。

BMC Studio x qemu 单文件调试

本地环境中配置启动studio,并通过studio连接qemu:

启动Studio

bingo studio

本地拉起了Studio的时候,输入相应的地址进入Studio的界面

http://localhost:1288/

Studio的使用参考下面的文档:
BMC Studio用户指南

启动qemu并连接Studio

在没有真机环境下,使用qemu是一个特别方便的选择,其主要的优势在下面:
1)任意的修改和验证都不会导致环境崩溃了之后的损失,因为环境崩溃了之后,可以重新出一个qemu包就行。
2)完美支持北向接口,使用体验和真机没有区别
3)qemu和studio的完美联动,可以在不出完整的冒烟包的情况下,只修改部分的代码就能实现调试的作用

在studio的仿真管理界面,启动一个qemu,并连接上studio,之后就可以进行单文件调试,或者组件调试的工作


  • 注意:只有0.05之后的Studio版本支持一键调试的能力,如果插件中含有多个不同版本的Studio,删除了之后只留0.0.5版本的插件来使用。

单文件调试

  • 以下的例子以rackmout仓为例来进行阐述

    在新增了一个属性之后,点击右上角的单文件调试之后,Studio就会自动将这个文件替换到所连接的qemu环境中,并会自动执行以下的命令
systemctl restart interface

然后所编辑的文件就会生效,对于Redfish接口,就可以通过postman,或者curl,wget等进行相关的测试工作。

组件调试

如果一次性修改的数量过多,如果在上述的单文件调试的过程中,就要一个一个去点击,同时在qemu之中,自己也要手动去修改很多不同的代码文件,这就导致了有可能在一些地方可能存在疏忽,漏改的情况出现,所以,能够直接在不出完整包并且实现组件调试的情况下进行调试是很重要的。


同样在右上角的小火箭,组件调试的功能可以将完整的组件都上传到qemu侧,并替换掉完整的组件仓,并也会自动执行以下的命令

systemctl restart interface

最后,整个组件也会生效,并能通过其他工具进行相关的测试的工作。

  • 这里的生效的方法, 是根据不同的组件来自动进行匹配也就是,如果替换的是A组件,后台相应执行的是
sytstemctl restart A

总结

本篇主要从调试的角度出发,结合Studio和Qemu,将BMC的功能调试能力进行了一个详细的阐述,欢迎大家进行交流

2 个赞