openbmc web/redfish到底层设计(持续更新...)
1.说明
本节是厘清openbmc的界面层web或者redfish到底层数据获取与展示。
不可或缺的是先阅读官方关于redfish的设计文档:
- 1.https://github.com/openbmc/docs/blob/master/designs/redfish-authorization.md
- 2.https://github.com/openbmc/docs/blob/master/designs/redfish-postcodes.md
- 3.https://github.com/openbmc/docs/blob/master/development/web-ui.md
需要注意的是,官方的文档一定要细读与分析背后的设计。
2.代码简单流程分析
2.1 大致总体流程
代码包包含web和redfish,均在bmcweb中,可以使用如下命令抽取代码:
# devtool modify bmcweb
调用关系如下:
(bmcweb/src/webserver_main.cpp)
int main(int /*argc*/, char** /*argv*/) noexcept(false)
---> run() (bmcweb/src/webserver_run.cpp)---> server.add_interface("/xyz/openbmc_project/bmcweb","xyz.openbmc_project.bmcweb");---> if constexpr (BMCWEB_REDFISH)---> redfish::RedfishService redfish(app);---> redfish::EventServiceManager::getInstance(&*io);---> crow::login_routes::requestRoutes(app);---> app.run();---> systemBus->request_name("xyz.openbmc_project.bmcweb");---> io->run();
redfish()定义在文件bmcweb/redfish-core/src/redfish.cpp中,关系如下:
RedfishService::RedfishService(App& app)
---> requestRoutesMetadata(app);
---> requestRoutesOdata(app);
---> requestAccountServiceRoutes(app);
---> requestRoutesRoles(app);
---> ...
---> requestRoutesManager(app);
---> ...
---> requestRoutesSystemsLogServicesPostCode(app);
---> ...
---> requestRoutesRedfish(app);
因此,如果需要添加自己的redfish功能,可以在这里添加顶层函数功能。
拿一个函数调用:requestRoutesManager(app)举例:
(bmcweb/redfish-core/lib/managers.hpp)
inline void requestRoutesManager(App& app)
---> BMCWEB_ROUTE(app, "/redfish/v1/Managers/<str>/")...
调用返回数据。
2.2 web与redfish结合
openbmc的web与redfish怎么结合去服务用户呢?
web理解就是前端展现给用户的网页,redfish其实是与web进行沟通,所以openbmc设计理念是redfish(bmcweb)作为后台与web(web-vue)作为前端搭配起来使用的。
顺便提一下,openbmc是使用nghttp2作为web server的。
举一个简单例子,在前端js中获取数据:
async getChassisCollection() {
---> ...
---> .get('/redfish/v1/Chassis')
2.3 针对官方文档,简单分析一个例子
这一部分针对官方文档的内容,看一下例子。
官方文档如下:
- https://github.com/openbmc/docs/blob/master/designs/redfish-postcodes.md
该文档说的bios postcode的事情,可以找到代码位置:
bmcweb/redfish-core/lib/systems_logservices_postcodes.hpp
bmcweb/redfish-core/src/redfish.cpp
在文件bmcweb/redfish-core/src/redfish.cpp中调用函数requestRoutesSystemsLogServicesPostCode(),在文件bmcweb/redfish-core/lib/systems_logservices_postcodes.hpp中定义了函数:requestRoutesSystemsLogServicesPostCode():
inline void requestRoutesSystemsLogServicesPostCode(App& app)
---> BMCWEB_ROUTE(app, "/redfish/v1/Systems/<str>/LogServices/PostCodes/")...
---> BMCWEB_ROUTE(app,"/redfish/v1/Systems/<str>/LogServices/PostCodes/Actions/LogService.ClearLog/")
---> BMCWEB_ROUTE(app,"/redfish/v1/Systems/<str>/LogServices/PostCodes/Entries/")
---> BMCWEB_ROUTE(app, "/redfish/v1/Systems/<str>/LogServices/PostCodes/Entries/<str>/")
---> BMCWEB_ROUTE(app,"/redfish/v1/Systems/<str>/LogServices/PostCodes/Entries/<str>/attachment/")
比较关心的是对于设置操作如何处理。可以看到,调用的是函数handleSystemsLogServicesPostCodesPost():
inline void handleSystemsLogServicesPostCodesPost()
---> crow::connections::systemBus->async_method_call(..,"xyz.openbmc_project.State.Boot.PostCode0",
"/xyz/openbmc_project/State/Boot/PostCode0",
"xyz.openbmc_project.Collection.DeleteAll",
"DeleteAll");
因此,采取的就是一种函数调用的办法去处理的。
2.4 web获取后台数据的例子
这一节借一个web例子,可以看到web和后台是怎么交互的。
例如,在web下可以看到如下内容:

因此,明显看到后台以(redfish)json数据呈现给web,web解析即可。
相关文章:
openbmc web/redfish到底层设计(持续更新...)
1.说明 本节是厘清openbmc的界面层web或者redfish到底层数据获取与展示。 不可或缺的是先阅读官方关于redfish的设计文档: 1.https://github.com/openbmc/docs/blob/master/designs/redfish-authorization.md2.https://github.com/openbmc/docs/blob/master/designs/redfish…...
Linux init
如何检查你的 Linux 系统是否使用 systemd | Linux 中国|init|echo|stat|linux_网易订阅 初始化软件 Systemd,OpenRC,SysVinit,Busybox,runit,s6。 查看软件 stat /sbin/init readlink -f /sbin/init Artix Linux 有…...
Maven 版本管理与 SNAPSHOT 详解
1. Maven 版本管理概述 在 Maven 项目中,版本号(Version)是用于区分不同软件版本的重要标识。Maven 提供了一套标准的版本管理机制,包括: 正式版本(Release Version)快照版本(SNAP…...
TCP三次握手全方面详解
文章目录 (1) 三次握手各状态CLOSE状态SYN_SENT状态SYN_RECV状态ESTABLISHED状态 (2) 为什么握手时的seqnum是随机值,以及acknum的功能(3) 三次握手中的半连接队列(SYN队列)和全连接队列(ACCEPT队列)半连接队列全连接队…...
【C#】一维、二维、三维数组的使用
在C#中,数组是用于存储固定数量相同类型元素的数据结构。根据维度的不同,可以分为一维数组、二维数组(矩阵阵列)、三维数组等。每增加一个维度,数据的组织方式就会变得更加复杂。 一维数组 一维数组是最简单的数组形…...
MIT开源7B推理模型Satori:用行动思维链进行强化学习,增强自回归搜索
自OpenAI的o1发布以来,研究社区为提升开源LLM的高级推理能力做出了诸多努力,包括使用强大的教师模型进行蒸馏、蒙特卡洛树搜索(MCTS)以及基于奖励模型的引导搜索等方法。 本研究旨在探索一个新的研究方向:使LLM具备自回…...
【JVM详解二】常量池
一、常量池概述 JVM的常量池主要有以下几种: class文件常量池运行时常量池字符串常量池基本类型包装类常量池 它们相互之间关系大致如下图所示: 每个 class 的字节码文件中都有一个常量池,里面是编译后即知的该 class 会用到的字面量与符号引…...
w200基于spring boot的个人博客系统的设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
【算法】快速排序算法的实现:C 和 C++ 版本
1. 算法简介 快速排序(Quick Sort)是由英国计算机科学家霍尔(C.A.R. Hoare)在1960年提出的一种高效的排序算法。它采用了分治法(Divide and Conquer)策略,通常具有很好的性能。在平均情况下,快速排序的时间复杂度为 O(n log n),但在最坏情况下可能退化为 O(n^2),不过…...
前沿科技一览未来发展趋势
脑机接口技术在医疗康复领域有了新进展。这技术让机器读懂大脑信号,帮助病人找回身体功能。 比如,瘫痪人士可以用它来控制假肢。在美国,一名瘫痪者通过这个技术,能用自己意念控制机械臂,喝到饮料。这种技术对提升患者…...
js滚动到页面最底部
setTimeout(()> { //延后执行,等页面渲染结束let container document.querySelector(.raise-flag-content); //找到当前divif (container) {container.scrollTop container.scrollHeight - (container.clientHeight - 400 );}})container.scrollTop container…...
视觉硬件选型和算法选择(CNN)
基础知识 什么是机械视觉: 机械视觉是一种利用机器代替人眼来进行测量和判断的技术,通过光学系统、图像传感器等设备获取图像,并运用图像处理和分析算法来提取信息,以实现对目标物体的识别、检测、测量和定位等功能。 机械视觉与人类视觉有什…...
Mybatis篇
1,什么是Mybatis ( 1 )Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁…...
【Python】元组
个人主页:GUIQU. 归属专栏:Python 文章目录 1. 元组的本质与基础概念1.1 不可变序列的意义1.2 元组与数学概念的联系 2. 元组的创建方式详解2.1 标准创建形式2.2 单元素元组的特殊处理2.3 使用 tuple() 函数进行转换 3. 元组的基本操作深入剖析3.1 索引操…...
【AI实践】deepseek支持升级git
当前Windows 11 WSL的git是2.17,Android Studio提示需要升级到2.19版本 网上找到指导文章 安装git 2.19.2 cd /usr/src wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.gz tar xzf git-2.19.2.tar.gz cd git-2.19.2 make prefix/usr/l…...
【AI实践】Cursor上手-跑通Hello World和时间管理功能
背景 学习目的:熟悉Cursor使用环境,跑通基本开发链路。 本人背景:安卓开发不熟悉,了解科技软硬件常识 实践 基础操作 1,下载安装安卓Android Studio 创建一个empty project 工程,名称为helloworld 2&am…...
Redis数据库(二):Redis 常用的五种数据结构
Redis 能够做到高性能的原因主要有两个,一是它本身是内存型数据库,二是采用了多种适用于不同场景的底层数据结构。 Redis 常用的数据结构支持字符串、列表、哈希表、集合和有序集合。实现这些数据结构的底层数据结构有 6 种,分别是简单动态字…...
【计组】实验五 J型指令设计实验
目录 一、实验目的 二、实验环境 三、实验原理 四、实验任务 代码 一、实验目的 1. 理解MIPS处理器指令格式及功能。 2. 掌握lw, sw, beq, bne, lui, j, jal指令格式与功能。 3. 掌握ModelSim和ISE\Vivado工具软件。 4. 掌握基本的测试代码编写和FPGA开发板使用方法。 …...
ubuntu 本地部署deepseek r1 蒸馏模型
本文中的文件路径或网络代理需要根据自身环境自行删改 一、交互式chat页面 1.1 open-webui 交互窗口部署:基于docker安装,且支持联网搜索 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台,旨在完全离线操作。它支持各种 LLM…...
RestTemplate Https 证书访问错误
错误信息 resttemplate I/O error on GET request for “https://21.24.6.6:9443/authn-api/v5/oauth/token”: java.security.cert.CertificateException: No subject alternative names present; nested exception is javax.net.ssl.SSLHandshakeException: java.security.c…...
YOLO-v5小目标检测:微小物体识别效果惊艳展示
YOLO-v5小目标检测:微小物体识别效果惊艳展示 1. 小目标检测的技术挑战 在计算机视觉领域,小目标检测一直是个棘手的问题。当目标在图像中占据的像素面积小于3232时,传统检测算法往往会遇到以下困难: 特征信息不足:…...
DSP28335 EPWM模块关键寄存器配置实战指南
1. EPWM模块基础与核心寄存器概览 DSP28335的增强型PWM(EPWM)模块是电机控制、电源转换等实时控制系统的核心外设。我第一次接触这个模块时,被它强大的灵活性震撼到了——6对独立的EPWM通道,每对都能生成两路互补或独立的PWM波形。…...
解读大数据领域 OLAP 的分布式计算特性
解读大数据领域 OLAP 的分布式计算特性 关键词:OLAP、分布式计算、大数据、MPP架构、列式存储、查询优化、数据仓库 摘要:本文深入探讨OLAP(联机分析处理)在大数据环境下的分布式计算特性。我们将从OLAP的核心概念出发,分析其分布式架构设计原理,包括MPP架构、列式存储和并…...
3个关键场景:如何用Awesome Claude Code打造你的AI开发工作流
3个关键场景:如何用Awesome Claude Code打造你的AI开发工作流 【免费下载链接】awesome-claude-code A curated list of awesome commands, files, and workflows for Claude Code 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-claude-code 你…...
Gemma-3-12b-it镜像免配置实战:单命令启动多模态服务并集成Flask API
Gemma-3-12b-it镜像免配置实战:单命令启动多模态服务并集成Flask API 1. 快速了解Gemma-3-12b-it多模态能力 Gemma-3-12b-it是Google推出的轻量级多模态模型,它最大的特点就是能同时理解文字和图片。想象一下,你给它一张照片,它…...
国产AI 调用量反超美国,22个免费大模型API集结,DMXAPI 成开发者首选
据 OpenRouter 最新数据,2026 年 3 月中国 AI 大模型周调用量达 4.69 万亿 Token,连续两周超越美国,全球调用量前三席位被小米 MiMo-V2-Pro、阶跃星辰 Step 3.5 Flash、MiniMax M2.5 包揽,国产模型凭性能与性价比获全球开发者认可…...
虚幻引擎PicoVR开发避坑指南:PicoXR与PicoOpenXR插件选型与实战解析
1. PicoXR与PicoOpenXR插件核心差异解析 第一次接触PicoVR开发时,很多开发者都会被两个相似的插件名称搞懵——PicoXR和PicoOpenXR。这两个插件虽然名字相近,但在功能特性和适用场景上存在本质区别。我在去年开发健身类VR应用时就因为选错插件࿰…...
Zotero插件安装失败?手把手教你解决版本兼容问题(以better-notes为例)
Zotero插件安装失败?手把手教你解决版本兼容问题(以better-notes为例) 学术研究离不开文献管理工具,Zotero作为开源免费的文献管理神器,凭借其强大的功能和丰富的插件生态,成为众多科研工作者的首选。然而…...
智能预处理预览功能详解:Anything to RealCharacters 2.5D引擎稳定性保障机制
智能预处理预览功能详解:Anything to RealCharacters 2.5D引擎稳定性保障机制 1. 项目概述 Anything to RealCharacters 2.5D转真人引擎是一款专为RTX 4090显卡优化的图像转换系统,能够将卡通、二次元、2.5D风格的图像高质量转换为写实真人照片。该系统…...
PCB多层板设计:偶数层优势与奇数层解决方案
PCB多层板层数设计解析:偶数层优势与奇数层解决方案1. 多层PCB基础概念与现状PCB(Printed Circuit Board)根据层数可分为单面板、双面板和多层板。现代电子产品中,多层PCB的应用越来越广泛,其层数从4层到超过100层不等…...
