mdbctl组件自定义命令
更新时间:2025/10/15
在Gitcode上查看源码重要提示:
- 组件运行过程不能依赖和使用调试接口下的方法和属性(包括
bmc.*.Debug.*)bmc.*.Debug.*类型的调试接口,必须实现构建裁剪bmc.*.Release.*类型的发布接口,必须考虑功能的差异性,例如在线调试连接组件时,可以输出在线调试日志,但其他组件调用时无法输出- 调试命令和发布命令都必须上interface-sig组评审,发布命令必须补充高级命令资料
命令如何添加
- 自定义调试命令即是挂在组件对象下的资源树方法,
bmc.*.Debug.*和bmc.*.Release.*接口下的方法被视作组件自定义调试命令,区分Debug命令与Release命令,Release版本的调试命令在Debug版本默认存在,无需重复配置
shell
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
bmc.kepler.Debug.LogMock interface - - -
.MockLog method a{ss}usb - -
bmc.kepler.Object.Properties interface - - -- mdb_interface定义的
bmc.*.Debug.*和bmc.*.Release.*接口下(即为自定义调试命令)的方法与参数必须在model.json配置displayDescription字段,并用英文描述,displayDescription字段尽量保持简洁。 - 命令接口所在路径现已支持配置动态参数路径,确保命令唯一
- model.json的参数配置需要添加
optional(可选参数)字段,不配置默认为false,配置为true时必须配置default字段,在方法调用参数缺省时使用默认值(可选参数只允许在最后,不支持跳跃配置) - model.json方法同级添加
cmdName字段,全小写命名风格,在同一组件内不允许cmdName重复,命令名显示为cmdName - 命令参数不支持数组、字典等复杂数据类型
- 需要组件方法处理操作日志打印
mdb_interface配置示例:
json
{
"bmc.kepler.Debug.LogMock": {
"properties": {},
"methods": {
"MockLog": {
"req": {
"Count": {
"baseType": "U32",
"minimum": 1,
"maximum": 1000,
"description": "注入的日志数量"
},
"Text": {
"baseType": "String",
"minLength": 1,
"maxLength": 1024,
"description": "注入的日志内容"
},
"RepeatText": {
"baseType": "Boolean",
"description": "标志是否重复内容"
}
},
"rsp": {
},
"description": "模拟日志注入"
}
}
}
}mds配置示例:
json
{
"LogMock": {
"path": "/bmc/kepler/Debug/LogMock",
"interfaces": {
"bmc.kepler.Debug.LogMock": {
"methods": {
"MockLog": {
"cmdName": "mocklog",
"req": {
"Count": {
"minimum": 1,
"maximum": 1000,
"displayDescription": "Number of ingested logs."
},
"Text": {
"optional": true,
"default": "test log",
"displayDescription": "Content of ingested logs."
},
"RepeatText": {
"optional": true,
"default": true,
"displayDescription": "Indicates whether the text is duplicate."
}
},
"displayDescription": "Mock log update."
}
}
}
}
}
}命令如何区分目录
代码仓结构参照/framework/maca/mds下新增debug路径用于配置Debug方法(对象下同时配置debug接口与release接口则仍配置在默认目录,但建议评估拆分),debug方法实现部分同样也需要拆分目录,debug目录下的接口定义如不涉及接口依赖可不配置service.json。
cmake配置打包debug目录:
参考/framework/maca/src/lualib/maca_app.lua的init_debug_service方法初始化debug对象:
挂载命令的对象需要有对象名(单例对象自动创建对象名),可以在回调方法里设置:
命令如何使用
- attach组件后通过
lscmd命令查看当前组件支持的自定义调试命令
shell
% attach maca
Success
% lscmd
Usage: CommandA <param1> [param2]
"Command description"
param1 type "Param description"
param2 type "Param description" "default value"查看的结果格式为:
- Usage: [方法名] [参数]
- [方法描述] - 描述未配置时为空
- [参数] [参数类型] [参数描述] [默认值(配置可选参数)]
- 直接使用方法名加参数的方式使用,以maca日志注入方法为例:
shell
% attach maca
Success
% lscmd
Usage: mocklog <Count> <Text> [RepeatText]
Mock log inject
Count u Number of ingested logs
Text s Content of ingested logs
RepeatText b Indicates whether the log content is duplicate true
% MockLog 10 'hello' true- 动态参数路径下的方法如何区分
对于动态参数路径下的方法由mdbctl对方法进行合并处理,并添加ObjectName作为第一参数,即用户在使用时需额外指定执行对象。
将配置了自定义命令的bmc.kepler.Release.TraceChip接口挂载至动态参数路径下,即路径下所有对象支持该方法:
json
{
"Cpld": {
"package":"Cpld",
"path": "/bmc/kepler/Chip/Cpld/:Id",
"interfaces": [
"bmc.kepler.Release.TraceChip"
]
}
}使用示例:
shell
% attach hwproxy
Success
-- 这里由mdbctl增加了参数用于指定对象
% lscmd
Usage: tracechip <ObjectName> <Action>
Trace the read and write data of a specified component.
ObjectName s Object for which the command is executed.
Action s The value start indicates that the component starts to trace the read and write data. The value stop indicates that the component stops tracing the read and write data.注意事项
- mdbctl ≥ 1.70.3支持添加与使用组件自定义调试命令
- bmcgo ≥ 0.5.318支持生成displayDescription字段
- mdbctl ≥ 1.70.6支持配置动态参数路径下的自定义命令
- 组件codegen_policy的version ≥ 16