USB 近端运维功能使用指导
概述
本文档介绍 openUBMC USB 近端运维功能的使用方法。usb_entry 组件主要提供近端运维功能,包括手机和便携运维、U 盘配置导入导出功能,以及在插入 USB 设备和执行任务时的近端运维点灯功能。
认识 USB 近端运维
USB 近端运维简介
USB 近端运维是通过 USB Type-C 接口实现 BMC 管理的功能,包括:
- U 盘配置导入导出 - 通过 U 盘导入配置文件、导出系统配置
- 手机和便携运维 - 通过 Type-C 口连接手机或笔记本电脑访问 BMC
- 近端运维点灯 - USB 设备插入和任务执行时的 LED 指示灯控制
应用场景
| 场景 | 描述 | 优势 |
|---|---|---|
| 初始配置 | 设备首次部署时的初始配置 | 无需网络连接 |
| 故障恢复 | 网络故障时的设备恢复 | 快速恢复服务 |
| 便携运维 | 现场通过便携设备直接访问 BMC | 便于现场维护 |
| 状态指示 | LED 灯指示运维状态 | 直观显示工作状态 |
环境要求
BMC 环境支持近端运维功能需要满足两个条件:
- 单板支持(Supported)- 硬件层面支持 Type-C 接口
- 挂耳在位(Presence)- 挂耳在位(部分机型没有挂耳,不支持近端运维功能)
这两个属性需要在 sr 文件中的 UsbLocalOMService 类配置,可在资源树上查看。
说明
usb_entry 组件涉及的 USB 口是环境上供 BMC 使用的 Type-C 口,与 Type-A 口无关。因此进行插入 U 盘等动作需要使用 Type-C 转接头或直接使用 Type-C 口的 U 盘。
USB 设备识别
认识 USB 设备识别
usb_entry 组件通过读写 USB CC 芯片上的寄存器值来识别插入的 USB 设备和进行后续的近端运维操作。
CC 芯片类型
当前有多种厂商的 USB CC 芯片,不同厂商的 CC 芯片读取设备在位状态的操作有所不同,一台服务器只可能使用一种芯片,usb_entry 初始化时会遍历多种设备以确认当前的芯片类型。
设备在位状态轮询
usb_entry 每秒读取一次 USB 设备在位状态,功能包括:
- 及时更新当前 USB 设备的接入情况
- 在插入 U 盘时反复进入 U 盘配置导入导出流程来执行控制文件中的下一步骤
U 盘配置导入导出
认识 U 盘配置导入导出
U 盘配置导入导出功能允许通过 U 盘与 BMC 交换配置数据:
- 配置导入 - 从 U 盘导入配置文件到 BMC
- 配置导出 - 将 BMC 配置导出到 U 盘
- 加密支持 - 支持加密的压缩包文件
USB 挂载卸载和读写
挂载流程
- 插入 U 盘后,usb_entry 读取 USB CC 芯片获取 USB 设备是否在位。
- 更新 USB 设备在位状态(USBDevicePresence)。
- 若 USB 管理使能(Enabled)打开,判断 USB 设备类型。
- 若是 USB device 设备,BMC 作为主机侧,USB DRD 角色设为 HOST。
- 自动进行 U 盘的挂载及后续的配置导入导出操作。
挂载过程
- 判断装备模式是否为 ft(单板测试),是则不进行 U 盘操作直接退出。
- 获取 USB 设备名和设备路径。
- 通过 mount 命令将其挂载到 BMC 内存中的固定路径:
/dev/shm/usb_control。 - 通过对该路径的读写实现对 U 盘设备的读写。
卸载流程
- 拔出 U 盘后,usb_entry 检测到 USB 设备不在位。
- 更新 USB 设备在位状态。
- 通过 umount 命令卸载。
- 清除配置导入导出产生的残余文件。
U 盘配置导入导出流程
设置解压密码
通过 Redfish 接口设置 USB 解压密码:
PATCH https://{bmc_ip}/redfish/v1/Managers/{ManagerId}/USBMgmtService
# 请求体
{
"USBUncompressPassword":"xxxxxx"
}资源树接口:
busctl --user call bmc.kepler.iam /bmc/kepler/Managers/1/USBPorts bmc.kepler.Managers.USBAuthentication SetDecryptPassword a{ss}s 0 "xxxxxx"压缩包准备
预先在 U 盘内配置压缩包,压缩包具体要求如下:
- 压缩包名称:
ServerOperateFile.tar.gz。 - 加密方式:使用此前设置的 USB 解压密码加密压缩。
- 控制文件:压缩包内应包含一个控制文件
control.json。 - 配置文件:如果需要进行配置导入,需要包含配置文件
import/config.json。
控制文件格式
control.json 文件说明了近端运维操作的动作及执行顺序:
{
"ImportConfigurationParameter": {
"ImportConfigurationEnabled": true,
"ActiveMode": ["Immediately", "ResetBMC", "ResetOS"]
},
"ExportConfigurationParameter": {
"ExportConfigurationEnabled": true,
"AutoTag": ["sn", "model", ""]
}
}配置导入参数说明
| 参数 | 描述 |
|---|---|
| ImportConfigurationEnabled | 是否启用配置导入 |
| ActiveMode | 配置导入后的动作模式 |
ActiveMode 取值说明:
| 值 | 描述 |
|---|---|
| Immediately | 配置导入后不重启 |
| ResetBMC | 配置导入后平滑重启 |
| ResetOS | 配置导入后强制重启 |
配置导出参数说明
| 参数 | 描述 |
|---|---|
| ExportConfigurationEnabled | 是否启用配置导出 |
| AutoTag | 配置导出的文件命名规则 |
AutoTag 取值说明:
| 值 | 导出文件路径 |
|---|---|
| sn | /dev/shm/usb_control/<product_sn>/export/<product_sn>-config.json |
| model | /dev/shm/usb_control/<product_sn>/export/<ProductName ProductVersion>-config.json |
| "" | /dev/shm/usb_control/export/config.json |
配置导入导出执行流程
插入 U 盘后,执行 USB 挂载卸载和读写动作后:
- 检查
ServerOperateFile.tar.gz文件是否存在。 - 调用 iam 提供的 DecryptFile 方法解压 U 盘中的压缩包到
/dev/shm/usb_files目录。 - 解析控制文件
control.json,根据当前动作查找下一动作。 - 将下一动作更新为当前动作(当前动作为空时下一动作就是第一个动作)。
- 由于配置导入导出过程中可能包括 BMC 重启操作,当前动作需要持久化保存。
- 执行当前动作(配置导入/配置导出/平滑重启/强制重启)。
- 下一次进入 U 盘配置导入导出流程时(重启 BMC 后或下一次轮询),重复步骤 3-7 执行下一动作。
手机和便携运维
认识手机和便携运维
手机或便携笔记本电脑通过 Type-C 口连接到设备上,通过 RNDIS(Remote Network Driver Interface Specification)协议规范为这些设备提供 BMC 的网络服务。
说明
手机 app 不再维护,因此当前仅关注接入便携笔记本的场景。
RNDIS 协议
RNDIS(Remote Network Driver Interface Specification)是微软开发的协议,用于在 USB 上传输网络数据。
驱动支持
RNDIS 功能需要有驱动支持,当前 BMC 使用 RTOS 依赖的 Linux Kernel 版本编译这些驱动并加载,保存在:
/opt/bmc/apps/usb_entry/ko不支持 USB 近端运维功能的环境不加载这些驱动。
便携机近端运维
工作流程
- 便携笔记本电脑设备的 USB 口是 USB Host 设备。
- 接入服务器后 BMC 将 USB DRD 角色设为 DEVICE。
- 启动 RNDIS Device 服务,生成
usb0网口。 - 启动 DHCP Server 服务,为笔记本电脑分配 IP 地址。
- 当前固定分配的 IP 地址为
169.254.1.5。 - 分配 IP 后需要添加 iptable 转发使其能够访问各个服务。
网络转发
通过调用 bmc_network 的 AddNatRule/UpdateNatRule 函数用于增加和删除近端运维 IP 的转发。
近端运维点灯
认识近端运维点灯
USB 设备插入和拔出,执行挂载卸载任务等动作,都会触发近端指示灯的变化。
指示灯逻辑
| 状态 | 绿灯 | 红灯 |
|---|---|---|
| 无设备接入 | 熄灭 | 熄灭 |
| USB 设备接入,但 USB 管理使能关闭 | 闪烁 3s 后关闭 | 熄灭 |
| 接入了 USB HOST 或 USB DEVICE 设备 | 常亮 | 熄灭 |
| 配置导入导出操作进行时 | 闪烁 | 熄灭 |
| 配置导入导出操作完成时 | 常亮 | 熄灭 |
| 所有操作均已完成且有错误状态 | 熄灭 | 常亮 |
LED 控制
usb_entry 通过设置两个控制 LED 灯的 Accessor 来控制近端指示灯变化:
| Accessor | 对应属性 | 描述 |
|---|---|---|
| Accessor_USBGreenLed | GLedStatus | 绿灯状态 |
| Accessor_USBRedLed | RLedStatus | 红灯状态 |
USB 接口说明
接口地址
| 接口类型 | 地址 |
|---|---|
| Redfish | /redfish/v1/Managers/{manager_id}/USBMgmtService |
| Web-rest | /UI/Rest/BMCSettings/USBMgmtService |
接口功能
| 功能 | Redfish | Web-rest | CLI | IPMI |
|---|---|---|---|---|
| ServiceEnabled 管理使能状态 | GET/PATCH | GET/PATCH | 查询/设置 | 查询/设置 |
| USBDevicePresence USB 设备在位状态 | GET | GET | 查询 | X |
资源树接口
查看资源树
busctl --user tree bmc.kepler.usb_entry查看 USB LocalOMService
busctl --user introspect bmc.kepler.usb_entry /bmc/kepler/Managers/1/LocalOMServiceCLI 命令使用
查询 USB 管理状态
ipmcget -t usbmgmt -d info输出示例:
Service State : enabled
USB Device Presence : absent设置管理使能状态
# 启用 USB 管理服务
ipmcset -t usbmgmt -d state -v enabled
# 禁用 USB 管理服务
ipmcset -t usbmgmt -d state -v disabledIPMI 命令使用
查询管理使能状态
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x5b 0x11 0x00 0x00 0x00设置管理使能状态
# 关闭(最后一位 0x00 表示关闭,0x01 表示打开)
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x5a 0x11 0x00 0x01 0x00 0x00环境支持检查
检查条件
BMC 环境支持近端运维功能需要满足两个条件:
- 单板支持(Supported)。
- 挂耳在位(Presence)。
检查命令
busctl --user introspect bmc.kepler.usb_entry /bmc/kepler/Managers/1/LocalOMService两个条件均为 true 才说明该 BMC 环境支持近端运维功能。
常见问题
设置管理使能失败,USB 设备接入状态始终为未接入
可能原因一:sr 未配套
描述:系统资源配置文件未配套或版本过旧
解决方法: 升级到最新的 sr
可能原因二:环境不支持
描述:单板不支持或挂耳不在位
解决方法:
- 检查单板是否支持 USB 近端运维功能
- 检查挂耳是否在位
- 通过资源树查看 Supported 和 Presence 属性
busctl --user introspect bmc.kepler.usb_entry /bmc/kepler/Managers/1/LocalOMService确保两个属性均为 true。
LED 灯不亮
问题现象:插入 USB 设备后 LED 灯没有反应
可能原因:
- LED Accessor 配置错误
- LED 控制接口调用失败
- 硬件故障
解决方法:
- 检查 sr 文件中 LED Accessor 配置
- 检查 UsbLocalOMService 配置
- 检查 LED 控制接口调用
- 检查硬件连接
附录
参考资料
- openUBMC 官网:https://www.openubmc.cn/
- Redfish 规范:https://www.dmtf.org/standards/redfish