从OpenBMC porting ACD到AMI codebase下的过程
该文章不提供ACD的代码
ACD是一个比较大的功能和卖点,它为用户提供了OOB debug CPU的功能,如果是eaglestream平台,那么还能够debug PCH 收集crash log。
但是巧合的是这个包我们没向AMI购买,所以有了这篇文章。
其实ACD的重点就是根据crashdump_input.json来执行peci然后记录结果而已,实际的decode还是需要cscript tool
我们先看看Intel提供的OpenBMC下的ACD source code tree
其中CrashdumpSection下的code主要是根据参数去执行peci命令,并将结果记录到JSON下,下图是crashlog.c的storeCrashlog函数
至于他的参数,是由flow.c去解析的,下文会讲到flow.c
可以看到它只是简单的把crashlogAgent和rawCrashlog用base64编码写进json的child下
下面看看ACD的核心部分 所谓的engine
cmdprocessor.c字如其名,主要还是执行flow.c传入的cmdInOut中的PECI cmd来调用具体的peci函数,并且将peci执行结果写入到output path中(其实就是json的key)
而flow.c是cmdprocessor.c的上层结构,主要负责解析input file的json,然后填入CmdInOut中,然后调用cmdprocessor.c的Execute,而Execute就是根据cmdInOut的param来判断寻找要log哪个section,然后在执行对应的peci命令函数
至于logger.c,它主要是用来辅助cmdprocessor来parse output path和给最后output file中生成json块用的。
最后来看crashdump.cpp,它是整个ACD的入口,怎么parse input file的json和怎么执行peci都由它来调用上面提到的flow.c、logger.c的函数
当然,这里由crashdump.cpp调用flow.c,flow.c组织cmdInOut,传入到cmdprocessor.c执行对应的peci的前提是input file中的useSections是true
否者,crashdump.cpp不会调用flow.c的PECIProcess函数,而是使用CrashdumpSection下各个section的peci执行命令,这也不会去调用cmdprocess.c
在理解这些ACD组成文件的含义后,大概就知道要怎么移植了,其实要注意的只有一点,就是OpenBMC中,这些app和bmc进程的ipc使用的是dbus,所以找到dbus的地方,改成自己的ipc形式就行,比如说下面的startHostStateMonitor,它是使用dbus进行ipc,监听BMC是否发生Warm Reset,然后把output file的json的_reset_detect设置为true,同时记录发生warm reset的cpu
最后来看一下,patchs部分要怎么打
patchs分为两部分,
recipes-core核心菜谱是pecilib的新增函数,由于AMI codebase下的peci接口不使用pecilib,所以这个补丁不是必要的,当然如果需要我们的peciapp也更新,那么要把PECI新增的函数添加到peciapp.c中。
看看kernel下的patch有哪些地方需要注意的
不难看出,这里其实是更新PECI driver的patch,如果直接把这两kernel的patch直接放到AMI codebase下的Kernel_config,可能会被rejected,所以可以手动生成一份patchs,然后在放进去,这样该PECI derver的patch就被打入驱动中了。
以上内容均由本人尝试,最后成功移植ACD到AMI codebase下
从OpenBMC porting ACD到AMI codebase下的过程相关推荐
- python os模块安装方法_基于python中pygame模块的Linux下安装过程(详解)
一.使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip.在Python3中,pip有时被称为pip3. 1.在Linux和OS X系统中检查 ...
- PS2 键盘在win10下开机过程 收发的数据
键盘向电脑发送数据的时序,理论是这样的 电脑向键盘发送数据,理论是这样的: 我总结了一句话 PS2 设备到主机DtoH: 低脉冲内电平稳定 主机到设备HtoD: 高脉冲 ...
- GDAL库简介以及在Windows下编译过程
GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库.官网http://www.gdal.org/ ...
- 朋友圈下拉刷新 android_下拉过程中的意符设计细节
♝点击上方"交互设计学堂"关注我们,送电子书 名词解释 示能是什么? 示能是一种体验细节,用来表示用户与功能之间的关系,比如"点击跳转"就是一种关系,用户可以通 ...
- Redis在windows下安装过程(转载)
转载自(http://www.cnblogs.com/M-LittleBird/p/5902850.html) 一.下载windows版本的Redis 官网以及没有下载地址,只能在github上下载, ...
- Redis在windows下安装过程
https://www.cnblogs.com/M-LittleBird/p/5902850.html 一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows ...
- Linux下软中断过程(详细)源码总结
一.简介 由于中断会打断内核中进程的正常调度运行,所以要求中断服务程序尽可能的短小精悍:但是在实际系统中,当中断到来时,要完成工作往往进行大量的耗时处理.因此期望让中断处理程序运行得快,并想让它完成的 ...
- 为什么需要卷积?为什么下采样过程中channels不断增加?
原始图像的特征信息是最完整的,但是为啥还要卷积呢?因为原始图像比如1024乘768的图像,算一下多少个像素点,如果作为输入,下一层(隐含层)有10的5次方个神经元的话,再算算有多少个参数,但是如果用卷 ...
- Opencv4.5.2 + Opencv_contrib4.5.2 VS2015 Win7下编译过程和注意事项
目录 1.下载: 2.cmake 3.VS2015编译: 4.测试 可以去我的资源下载编译好的库文件,省去自己编译的麻烦. 1.下载: 下载opencv源代码 源代码的地址是:https://git ...
最新文章
- 加州大学戴维斯分校 计算机科学,加州大学戴维斯分校的计算机专业如何?
- [转]ASP.NET1.0升级ASP.NET2.0问题总结
- 福利 | 一文读懂系列文章精选集发布啦!
- 一步一步学习C#(一)
- 让你的spring-boot应用日志随心所欲--spring boot日志深入分析
- CentOS 6.4 Heartbeat+mysql+nfs实现高可用的mysql集群
- jQuery.sap.declare(cus.crm.notes.ext.Component);
- logback日志配置
- finalize作用
- 索引 | ggplot2基础语法系列推文汇总
- 利用【数据链接属性】对话框,创建连接字符串
- 普元EOS中如何往Session的UserObject中设置自定义属性
- WPS中添加页眉和页脚
- 运用Python 模拟太阳-地球-月亮运动模型
- osg导入模型时,模型全黑的原因及解决方法分析
- 记一次修改DiyBox的经历(openwrt固件解包与打包)
- 【服务器数据恢复】nas存储服务器的数据恢复案例
- TCP协议发送SKB时ip_summed成员的设置
- Python对象类型及相关操作
- dht网络 kad协议 bencode编码 Java版 自给自足的磁力链接爬虫