• 瑞芯微rk3568移植openbmc(二)


    2022.06.26 更新

    1、关于h264 vnc

        最近查找了一下H264的VNC相关信息,发现TigerVNC已经提前开始支持H264的解码,于是按照TigerVNC解码要求,在OB的ikvm基础上添加了H264的VNC服务器编码,效果非常不错,实测有fps 有45帧左右,远程播放高清视频都十分流畅,没感觉到一点卡顿,并且带宽占用极低,仅有10Mb/s左右(此为H264高画质配置,如果对带宽有及其苛刻的要求,可以进一步压缩H264质量,在X86桌面静止不动的情况下,实测带宽仅占用2.5Mb/s)。

     实测的视频效果可以看这里:(视频是手机录制的,看着不是特别清晰,其实实际画面很高清,但至少可以看到视频流畅度,以及带宽占用的情况)

    nas - Synology DiskStation

    2、关于通过bmc 与远程x86主机互传文件

            bmc中对于x86主机没有网络,而只有bmc有网络的情况,想要和x86进行文件互传是一件十分艰难的事情。

            对于通常的VNC,比如tightVNC是可以通过服务端与客户端传文件的,但是此方式传文件的基础是VNC server直接运行在host的主机上,client和server之间有socket连接,因此可以直接发送文件到vnc server主机。

            但BMC有所不同,BMC的VNC server并不是运行在host上,而是跑在bmc上,bmc再控制host端,因此常规的vnc传文件不适用于BMC方式。目前ob中的方式主要是将本地文件打成一个iso文件,通过虚拟光驱的方式挂在到x86 host端,此方式仅限于本地发送至x86远端,如果想从远端x86回传文件到本地是办不到的。

           因此笔者只能考虑远程挂载U盘方式,但web上的挂载并不支持直接读写硬盘,因此也不支持挂载U盘,只能考虑自己写一个客户端与服务器来实现U盘挂载的功能,软件界面如下:

     实现方式为:

            BMC上实现一个TCP socket服务器监听,本地的NBDClient为 TCP client,当client连接到server时,server开一个线程去再创建一个nbd的server(需要理解nbd协议,自己实现一个nbd server),主线程去通过调用nbdclient程序去连本地实现的127.0.0.1的nbd server,再将/dev/nbdblock以U盘的形式挂载到x86去。当x86需要读取数据时,通过nbd client向nbd server取数据,nbd server再向 tcp socket server取数据,最终是NBDClient.exe这个本地客户端把本地的数据发送过去。

            一开始笔者开发只是考虑到以挂载U盘方式可以方便远程传数据到远端x86,并且远端x86可以回传回数据到U盘,断开U盘挂载时,数据就可以回到本地来,或者可以远程挂载一个带linux 命令行的系统盘,可以实现远程启动u盘里的linux系统,但是实际使用时发现,大多数人并没有随身携带U盘的习惯,并且也害怕U盘被搞坏了导致数据丢失,因此U盘挂载这个功能反而显得十分鸡肋!!!笔者再三思考是不是有其他更好的实现方式,但最终还是没有找到更好的方法,只能迂回一下,考虑是不是可以通过模拟一个U盘来挂载,实现无需U盘也可以实现模拟U盘挂载到x86可以很方便的互传数据,这样也不怕自己的U盘坏了或数据掉了。

            google查了一圈资料和软件,发现osfmount这个软件非常符合我的需求,该软件功能十分强大,可以实现模拟U盘、硬盘、ram盘等各种功能,因此将osfmount集成到了NBDClient客户端当中,以便于实现一键模拟和一键删除。实际效果如下:

     

              笔者分别在aspeed 2500上和rock3a上进行了测试,效果十分不错~aspeed bmc受限于cpu,读写速度大概在4MB/s左右,而rock3a读写速度在28MB/s左右,互传数据十分的方便。 

    PS:部分人会担心自己开了一个socket server端口,会不会有漏洞,被攻击等等。

    我的考虑是三种方式避免被攻击:

    1、web添加控制开关,默认关闭,需要使用时通过ob的web再开启

    2、和ob的obmc-console-client实现类似,通过ssh隧道方式,在ssh隧道之上收发数据。

    3、添加用户名、密码校验机制,只有用户名密码验证正确情况下才运行连接(当前按此方式实现)

  • 相关阅读:
    poi读写操作
    23_ue4人物控制切换
    五、业务数据分析
    (免费分享)基于springboot财务管理系统
    小白自学笔记—网络安全(黑客笔记)
    Java编程技巧-定义集合常量、定义数组常量的最佳方式
    MySQL实现的一点总结(一)
    2022-01-27-JavaScript
    Unity协同程序
    系统架构设计师之使用McCabe方法可以计算程序流程图的环形复杂度
  • 原文地址:https://blog.csdn.net/feixiang3839/article/details/127697420