超详细openBmc Virtual Media 功能及实现流程(1)

后续会 持续更新相关debug 技巧

1. VirtualMedia 功能介绍:

  • BMC的 Virtual Media(虚拟介质) 功能是一项重要的远程管理特性,主要用于通过远程服务器模拟本地存储设备(如 CD/DVD)供主机访问;
  • 基于VirtualMedai 功能,管理员可以加载本机镜像,并将镜像挂载到远程服务器主机,从而实现远程镜像安装,而无需去机房接入实际的镜像介质。

2. VirtualMedai 实现框架:

2.1 VirtualMedia Module 依赖:

  • 浏览器:该功能需要浏览器加载本机镜像
  • bmc 服务:该功能需要bmc VirtualMedia 服务通过websocket 与浏览器沟通
  • nbd 网络块:该功能需要nbd 网络块设备能将远程的sock 数据通过内核块转入bio_vec
  • USB-Gadget:该功能需要usbGadget 将网络块nbd与USB设备的file 进行关联,以遍bio_vec 中的数据可以通过USB 到达主机

2.2 镜像数据传输流程:

  • 本地镜像上传浏览器,然后通过websocket 发送给bmc VirtualMeida 服务
  • bmc VirtualMedia 从websocket 读取数据并写入管道
  • nbd_proxy 进程从管道读取数据并写入sock_client
  • nbd 服务接收sock 数据并存储到bio_vec以便通过USB 协议传输给主机;

2.3 底层cmd 传输流程:

  • 底层USB 请求转化为块请求,然后通过nbd server sock 通知到nbd_client
  • nbd_proxy 从sokcet 读取数据并写入pipeout
  • bmc VirtualMedia 从pipeout 中读取请求数据并通过websock 发送给NBDServer.js
  • NBDServer.js 从load的文件中读取指定偏移&指定长度的数据

2.4 框架简化:

在这里插入图片描述

3. VirtualMedia 的具体实现:

3.1 Web code Flow:

在这里插入图片描述

3.2 nbd-proxy Flow:

在这里插入图片描述

3.3 nbd-client Flow:

在这里插入图片描述

3.4 nbd Module Flow:

参考我之前所写文章:
https://blog.csdn.net/gege_hxg/article/details/148118291?spm=1001.2014.3001.5501

3.5 VirtualMedia 整体传输Flow:

  • 详细请下载openbmc_VirtualMedia_allFlow.drawio 文件;
    在这里插入图片描述

4. 感悟:

  • 刚拿到openbmc code 不知道VirtualMedia 所依赖的Module 有哪些,对应哪些Source;
  • 需要查阅openbmc 开源技术文档确认VirtualMedia 的大致流程,VirtualMedia 开源技术文档参考如下:
    • https://github.com/openbmc/docs/blob/master/features.md
    • https://github.com/openbmc/docs/blob/master/designs/virtual-media.md
  • 从代码中依据数据传输线进行确认,找到所依赖的进程以及整个数据传输流程;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值