【工具分享】资源树调试工具ibusctl分享

开发背景

openUBMC调试资源树可以使用mdbctl或者busctl。但mdbctl的功能不够完善(例如没有busctl introspect对等功能,已提需求),而原生busctl命令输入参数冗长,影响调试效率。

工具简介

ibusctl(intelligent busctl缩写)是使用bash脚本实现的对busctl的封装,优化功能点如下:

1、智能推断

考虑主要场景是使用tree、introspect、call、get-property、set-property调试资源树property和method,例如我们使用原生busctl调试ActivateFirmware方法,需要输入多个长参数命令:

# 1、使用list命令找到bios服务名
busctl --user --no-pager list | grep bios
# 2、使用tree命令找到方法所在路径
busctl --user --no-pager tree bmc.kepler.bios
# 3、使用introspect命令找到方法所在接口
busctl --user --no-pager introspect bmc.kepler.bios /bmc/kepler/Systems/1/BiosUpgradeService
# 4、调用call命令调试方法
busctl --user --no-pager call bmc.kepler.bios /bmc/kepler/Systems/1/BiosUpgradeService bmc.kepler.Systems.BiosUpgradeService ActivateFirmware a{ss}as 0 1 "XXX"

键入4个长命令需要多次修改前面的命令字,call需要复制SIGNATURE,针对这些问题,ibusctl做了几点优化

1.1、根据参数长度推断命令

会根据输入参数,自动推断添加命令字和加上 --user --no-pager(考虑openUBMC都是用户总线和不分页显示)

  • 输入ibusctl 推断使用 busctl --user --no-pager list
  • 输入ibusctl [service] 推断使用 busctl --user --no-pager tree [service]
  • 输入ibusctl [service] [path] 推断使用 busctl --user --no-pager introspect [service] [path]
  • 输入ibusctl [service] [path] [interface] [method] […] 推断使用 busctl --user --no-pager call [service] [path] [interface] [method] [signature] […]
  • 输入ibusctl [service] [path] [interface] [property] 推断使用 busctl --user --no-pager get-property [service] [path] [interface] [property]
  • 输入ibusctl [service] [path] [interface] [property] […] 推断使用 busctl --user --no-pager set-property [service] [path] [interface] [property] [signature]

1.2、自动添加call和set-property参数格式

使用call或set-property时,自动查询添加SIGNATURE字段信息,无需手动输入

1.3、自动忽略复制的property或method的前缀下角点

由于busctl展示的property或method前面都有一个下角点(.),ibusctl会自动忽略这个点,方便复制粘贴

ibusctl使用示例

还是以调试ActivateFirmware方法为例

# 1、找到bios服务名
ibusctl | grep bios
# 2、找到方法所在路径
ibusctl bmc.kepler.bios
# 3、找到方法所在接口
ibusctl bmc.kepler.bios /bmc/kepler/Systems/1/BiosUpgradeService
# 4、调试ActivateFirmware方法
ibusctl bmc.kepler.bios /bmc/kepler/Systems/1/BiosUpgradeService bmc.kepler.Systems.BiosUpgradeService .ActivateFirmware 0 1 "XXX"

2、支持命令字后置

智能推断主要针对的常用命令字tree、introspect、call、get-property、set-property,如果使用其他命令字或者这五个命令字的智能推断不符合要求,可以在任意参数位置输入命令字(list status monitor capture tree introspect call emit get-property set-property help),ibusctl会自动将命令字移动到第一个参数,且不再智能推断添加

工具使用

下载链接

论坛无法上传bash脚本作为附件,使用网盘分享:
链接: ibusctl_免费高速下载|百度网盘-分享无限制

手动拷贝使用

  • SCP等将ibusctl手动拷贝到OpenUBMC环境的/tmp路径

  • telnet登录拷贝到/usr/sbin/等路径下,并加上执行权限

  • 执行image

  • 使用ibusctl

PS:如果大家觉得ibusctl对大家调试资源树有用,请点赞留言,如果用的人多会考虑申请合入社区,不再用手动拷贝使用

3 个赞

提个小建议:

  1. 脚本里内容中文改成英文
  2. 增加-v参数控制echo打印,默认不打印执行过程
  3. CICD SIG申报议题,将脚本贡献仓库bingo或者manifest,打包到personal任务个人构建的debug包中,方便大家日常开发调试。

好的,但是CICD没有定会议,感觉CICD的会议周期太长了,建议定期两周开一次