关于BMC debug shell 一些指令用法请教

问题描述

Usage: lscmd
List all debug commands of attached module.

Usage: trace [parameter list]
Perform trace operation on the specified object
: sampling [object name] [rate]
set sampling status of specified object or query all sampled objects.

Usage: setprop [parameter list]
Set property value of specified object.
operation type: set/unset/modify.

Usage: call [parameter list]
Call function of specified object.

Usage: traceprop
Track changes in property value of specified object.
operation type: trace/untrace.

Usage: profiling [duration]
queries the signal and rpc invoking information of the current process.

Usage: lsmethod [interface name]
List all methods of specified object.

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

  • 硬件配置:[如 CPU、内存等]

重现步骤

  1. [第一步]

期望结果

lscmd 没有回显 其他几个 命令格式 不知道怎么写 尤其是[parameter list]指什么?

实际结果

[实际发生了什么,包含错误信息]

尝试过的解决方案

[列出您已经尝试过的解决方案及结果]

答案内容由AI生成,仅供参考:

关于 BMC Debug Shell 命令用法的详解

根据您提供的环境信息和操作记录,以下是针对 BMC Debug Shell 中相关命令的详细说明与正确使用方法。


:wrench: 环境概览

  • 平台:openUBMC
  • 工具mdbctl(即 Debug Shell 的底层命令行工具)
  • 接口:Debug Shell 是通过 mdbctl 提供的调试环境,用于访问系统对象、属性、方法。
  • 核心机制:基于 D-Bus 架构,所有操作围绕资源树中的对象(Object)、接口(Interface)、属性(Property)和方法(Method)进行。

:books: 正确理解 Debug Shell 指令结构

1. lscmd — 查看当前模块支持的调试命令

作用:列出当前已 attach(附加)的模块中支持的所有自定义调试命令。

注意:必须先使用 attach <module> 成功连接一个可用模块。

:white_check_mark: 使用方式:

% attach bios
Success

% lscmd

若该模块存在自定义调试命令,将输出如下格式:

Usage: traceprop   [object] [interface] 
Track property changes

Usage: dloglimit   [enabled] [duration]
Control log throttling

:red_exclamation_mark:您的问题分析
您执行了 lscmd bios 但提示 Failed: invalid input parameter.
原因是 lscmd 本身无参数,且必须先 attach 后再调用 lscmd。不能直接 lscmd bios


2. lsobj — 列出系统中的对象

作用:显示指定类或路径下的对象实例。

:white_check_mark: 使用方式:

% lsobj BMC
BMC_00

这表示存在名为 BMC_00 的对象,其类为 BMC

也可以查看其他类的对象:

% lsobj Cooling
Cooling_1

3. lsprop — 查看对象的属性

作用:列出某个对象挂载的接口及其属性值。

:white_check_mark: 使用方式:

% lsprop BMC_00

输出:

bmc.kepler.Manager.BMC
    PackageName=""
    SoftwareName="openUBMC"
    SoftwareType=0

bmc.kepler.Object.Properties
    ClassName="BMC"
    ObjectIdentifier=[1,"1","","00"]
    ObjectName="BMC_00"
    TraceEnabled=false

:check_mark: 您已正确执行此命令


4. lsmethod — 查看对象的方法(需确认是否支持)

问题说明:您执行 % lsmethod BMC_00 bmc.kepler.Object.Properties 报错 invalid command name "lsmethod"

:red_circle: 原因分析:

在 openUBMC 的 mdbctl 版本中(尤其是早期版本),lsmethod 并不是一个原生命令,您看到的提示可能来自文档或高级插件,但标准 mdbctl 不提供此命令。

:white_check_mark: 替代方案:手动查看接口定义

可通过工程规范或文档查找接口支持的方法。例如:

-- 接口:bmc.kepler.Object.Properties
-- 常见属性:ObjectName, ClassName, TraceEnabled
-- 并不包含 ObjectIdentifier 作为方法 → 因此 call 失败

所以 call BMC_00 bmc.kepler.Object.Properties ObjectIdentifier 报错:

Unknown method ObjectIdentifier

:cross_mark: 因为 ObjectIdentifier属性(Property),不是方法(Method)。


5. call — 调用对象的方法

:white_check_mark: 正确语法:

call <object_name> <interface_name> <method_name> [parameter_list]

示例:调用有效的 D-Bus 方法

假设有一个接口 bmc.kepler.Debug.LogMock 支持方法 MockLog

% call LogMock_0 bmc.kepler.Debug.LogMock MockLog 0 100 "Test" false
Success

:cross_mark: 您的操作错误解析:

% call BMC_00 bmc.kepler.Object.Properties ObjectIdentifier [1,2,3]
  • ObjectIdentifier属性名,不是可调用的方法。
  • 即使是 property,也不能通过 call 设置,应使用 setprop

6. setprop — 修改对象属性

用于变更对象的某个属性值。

:white_check_mark: 正确语法:

setprop <operation_type> <object_name> <interface_name> <property_name> <value>

其中 operation_type 可选:set, unset, modify

示例:

% setprop modify BMC_00 bmc.kepler.Object.Properties TraceEnabled true
Success

:warning: 注意:

  • 并非所有属性都支持修改。
  • 若属性为只读或所属服务未启用写入权限,则操作无效。

7. traceprop — 跟踪属性变化

跟踪某个对象的属性值变化并记录。

:white_check_mark: 正确语法:

traceprop trace <object_name> <interface_name> <property_name>

或取消跟踪:

traceprop untrace <object_name> <interface_name> <property_name>

示例:

% traceprop trace BMC_00 bmc.kepler.Object.Properties TraceEnabled
Tracing enabled.

% traceprop untrace BMC_00 bmc.kepler.Object.Properties TraceEnabled
Tracing disabled.

8. trace sampling — 配置采样跟踪

用于开启对某对象的行为采样,如函数调用、事件触发等。

:white_check_mark: 正确语法:

trace sampling <object_name> rate <sampling_rate>

或查询当前采样状态:

trace sampling

示例:

% trace sampling BMC_00 rate 10
Sampling rate set to 10Hz.

:cross_mark: 您输入 % trace sampling BMC_00 rate 缺少参数 10(采样频率),导致报错。


9. profiling [duration] — 性能分析

对当前进程的信号与 RPC 调用情况进行统计分析。

:white_check_mark: 使用方式:

% profiling 10
Profiling started for 10 seconds...
[Output profiling result after 10s]

如果没有参数,默认可能是 5 秒或 10 秒(依赖版本)。


10. snapshot start — 创建系统快照

生成内存快照,用于调试死锁、泄漏等问题。

:white_check_mark: 使用方式:

% snapshot start
snapshot file: /dev/shm/snapshot_bios

:check_mark: 您已成功执行该命令,注意此操作会占用内存。


:puzzle_piece: 常见命令总结表

命令 功能 示例
lsobj <class> 列出某类对象 % lsobj BMC
lsprop <obj> 列出对象的属性 % lsprop BMC_00
attach <module> 附加服务模块 % attach bios
lscmd 查看附加模块的调试命令(无参数) % lscmd
setprop modify <obj> <if> <prop> <val> 修改属性 % setprop modify BMC_00 ... TraceEnabled true
call <obj> <if> <method> [params] 调用方法 % call LogMock_0 bmc.kepler.Debug.LogMock MockLog 0 100 "test"
traceprop trace <obj> <if> <prop> 跟踪属性变化 % traceprop trace BMC_00 ... TraceEnabled
trace sampling <obj> rate <n> 设置采样率 % trace sampling BMC_00 rate 10
profiling [sec] 性能分析 % profiling 5
snapshot start 创建运行时快照 % snapshot start

:red_question_mark:参数说明:[parameter list] 是什么?

在命令帮助中出现的 [parameter list] 表示:

  • 方法调用所需的输入参数列表。
  • 参数需按照 D-Bus 方法的签名(Signature)顺序传入。
  • 类型包括:字符串(s)、整数(i/u)、布尔(b)、数组(a{})、结构((xx))等。

示例:接口方法定义

Method:
  Name: MockLog
  Parameters: uint32 level, uint32 count, string msg, bool enable
  Signature: "uubs"

对应调用:

% call LogMock_0 bmc.kepler.Debug.LogMock MockLog 1 10 "Hello" true

参数顺序必须严格匹配!


:warning: 常见错误及解决办法

错误现象 原因 解决方案
invalid command name "lsmethod" mdbctl 不支持该命令 使用外部文档或源码查看方法列表
Unknown method XXX 调用的名称是属性而非方法 改用 setproplsprop
Failed: Object does not exist 对象名错误或模块未启动 检查 lsobj 输出
Resource is busy 模块已被 attach 使用 bye 断开重试
invalid input parameter 命令格式错误或缺少参数 检查参数是否齐全、大小写是否正确

:white_check_mark: 最佳实践建议

  1. lsobj 再操作:确认对象是否存在。
  2. attachlscmd:只有附加模块后才能查看其自定义命令。
  3. 避免误操作只读属性:许多属性仅支持 get,不可 set
  4. 查阅接口规范文档:了解接口的方法、属性、参数类型。
  5. 使用 help 命令获取上下文帮助
    % help
    
    将列出当前环境中可用的所有命令及基本用法。

:white_check_mark: 建议验证流程

% lsobj BMC                    # 确认 BMC_00 存在
BMC_00

% attach bios                  # 附加 bios 模块
Success

% lscmd                        # 查看 bios 模块自定义命令
# 若无输出 → 表示无调试命令

% lsprop BMC_00                # 查看属性
% setprop modify BMC_00 bmc.kepler.Object.Properties TraceEnabled true
Success

% traceprop trace BMC_00 bmc.kepler.Object.Properties TraceEnabled
Tracing enabled.

% trace sampling BMC_00 rate 5
Sampling set to 5Hz.

% profiling 5
# 等待输出分析结果...

% bye                          # 退出

:books: 参考资料(基于您提供的上下文)

  • mdbctl 是 openUBMC 的关键调试工具,位于 Debug Shell 背后。
  • lsproplsobjcallsetprop 等命令用于深度调试硬件管理组件。
  • 所有操作需符合 D-Bus 接口规范,接口文档是正确使用的前提。

如有具体服务模块(如 biosmacasensor)的需求,可进一步提供其接口文档,我可以为您定制命令模板。

相关链接:

  1. 【iTestSmart 1.0.36】查询风可设置转速最大最小值范围测试
  2. 【iTestSmart OpenUBMC问题反馈】redfish查看内存信息测试,测试结果Fail。
  3. mdbctl缺乏对应busctl introspect的命令,lsprop不能显示method
  4. bmc通过i2c直连rtc芯片,如何实现时间同步?
  5. Maintenance CLI Tool (mdbctl) | 文档中心 | openUBMC

从你的问题来看,你指的应该是mdbctl

  1. lscmd需要attach到对应组件(c组件不支持)后,才会获取到组件自定义命令
  2. [parameter list]指命令接收动态参数
    文档仓里有关于mdbctl命令使用的方式
    docs/docs/zh/development/design_reference · openUBMC/docs - AtomGit | GitCode

目前就call 方法没找到解决方法 其余的已解决

请问一下你说的没找到解决方法是指什么?

查看你发的代码链接 call 还是有问题 和code下的mocklog_01对象的method不太一样 请看前面发的截图

lsprop查看的是接口下的属性,lsmethod可以查看方法,call调用方法时请注意接口和方法的对应关系

没太懂你这个“call调用方法时请注意接口和方法的对应关系”啥意思

是说call的方法method必须属于你传递的接口interface

如何获取对象的接口与属性,参考链接

我这边是这样的


输入help查一下支持的命令呢,可能2509不支持lsmethod



可以直接在mdb_interface下搜这个接口下支持的method,parameter_list是context + req中的参数,context一般是0

25.09支持 前面是25.06 它不支持

如果问题已经解决的话请麻烦关闭下帖子

这个贴 我先关了 有新问题了 我新开贴了 谢了

图片