该文章不提供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下的过程相关推荐

  1. python os模块安装方法_基于python中pygame模块的Linux下安装过程(详解)

    一.使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip.在Python3中,pip有时被称为pip3. 1.在Linux和OS X系统中检查 ...

  2. PS2 键盘在win10下开机过程 收发的数据

    键盘向电脑发送数据的时序,理论是这样的 电脑向键盘发送数据,理论是这样的: 我总结了一句话 PS2  设备到主机DtoH:     低脉冲内电平稳定        主机到设备HtoD:     高脉冲 ...

  3. GDAL库简介以及在Windows下编译过程

    GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库.官网http://www.gdal.org/ ...

  4. 朋友圈下拉刷新 android_下拉过程中的意符设计细节

    ♝点击上方"交互设计学堂"关注我们,送电子书 名词解释 示能是什么? 示能是一种体验细节,用来表示用户与功能之间的关系,比如"点击跳转"就是一种关系,用户可以通 ...

  5. Redis在windows下安装过程(转载)

    转载自(http://www.cnblogs.com/M-LittleBird/p/5902850.html) 一.下载windows版本的Redis 官网以及没有下载地址,只能在github上下载, ...

  6. Redis在windows下安装过程

    https://www.cnblogs.com/M-LittleBird/p/5902850.html 一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows ...

  7. Linux下软中断过程(详细)源码总结

    一.简介 由于中断会打断内核中进程的正常调度运行,所以要求中断服务程序尽可能的短小精悍:但是在实际系统中,当中断到来时,要完成工作往往进行大量的耗时处理.因此期望让中断处理程序运行得快,并想让它完成的 ...

  8. 为什么需要卷积?为什么下采样过程中channels不断增加?

    原始图像的特征信息是最完整的,但是为啥还要卷积呢?因为原始图像比如1024乘768的图像,算一下多少个像素点,如果作为输入,下一层(隐含层)有10的5次方个神经元的话,再算算有多少个参数,但是如果用卷 ...

  9. Opencv4.5.2 + Opencv_contrib4.5.2 VS2015 Win7下编译过程和注意事项

    目录 1.下载: 2.cmake 3.VS2015编译: 4.测试 可以去我的资源下载编译好的库文件,省去自己编译的麻烦. 1.下载: 下载opencv源代码  源代码的地址是:https://git ...

最新文章

  1. 加州大学戴维斯分校 计算机科学,加州大学戴维斯分校的计算机专业如何?
  2. [转]ASP.NET1.0升级ASP.NET2.0问题总结
  3. 福利 | 一文读懂系列文章精选集发布啦!
  4. 一步一步学习C#(一)
  5. 让你的spring-boot应用日志随心所欲--spring boot日志深入分析
  6. CentOS 6.4 Heartbeat+mysql+nfs实现高可用的mysql集群
  7. jQuery.sap.declare(cus.crm.notes.ext.Component);
  8. logback日志配置
  9. finalize作用
  10. 索引 | ggplot2基础语法系列推文汇总
  11. 利用【数据链接属性】对话框,创建连接字符串
  12. 普元EOS中如何往Session的UserObject中设置自定义属性
  13. WPS中添加页眉和页脚
  14. 运用Python 模拟太阳-地球-月亮运动模型
  15. osg导入模型时,模型全黑的原因及解决方法分析
  16. 记一次修改DiyBox的经历(openwrt固件解包与打包)
  17. 【服务器数据恢复】nas存储服务器的数据恢复案例
  18. TCP协议发送SKB时ip_summed成员的设置
  19. Python对象类型及相关操作
  20. dht网络 kad协议 bencode编码 Java版 自给自足的磁力链接爬虫

热门文章

  1. DC voltage、AC magnitude、Amplitude详细解读
  2. Python全栈工程师要掌握的五种知识
  3. mysql时区时间戳_Java MySQL时间戳时区问题
  4. python关闭防火墙命令
  5. 地宫取宝----第五届蓝桥杯
  6. 【通信原理】确知信号的性质分析与研究
  7. Kettle 使用教程(1)—入门
  8. php重定向3中方式
  9. 基本类型和包装类型的区别
  10. 现在的小孩为什么不爱学习