IPMI从驱动到应用(中篇)

上篇我们讲到了IPMI底层硬件连接和内核里驱动的实现,这样就为应用程序开发者提供了便利,用户只需要利用标准的设备文件打开操作、调用享用的IOCTL就可以向BMC发送请求或者读取响应结果。

应用程序开发工程师除了使用这种方法外,还可以利用现有开源的封装了上述操作的代码。目前开源的IPMI代码主要有ipmitool和OpenIPMI。感兴趣的读者可以用git clone git://git.code.sf.net/p/ipmitool/source ipmitool-source下载ipmitool的源代码,可以用git clone git://git.code.sf.net/p/openipmi/code openipmi-code下载OpenIPMI代码。前者会编译出一个个符合IPMI规范的用户态的命令”ipmitoo”,它能够用来向BMC查询系统主板、风扇、电源、温度等状态信息。支持了很多参数,使用灵活,短小精悍。还可以用它的raw command格式发送不同厂家自己定义实现的OEM命令,能够满足各种常用的场景。美中不足的是,它对OEM的系统事件日志的解析需要根据vendor定义的格式修改代码。此外,由于下面的几点原因,BMC需要实现System management software(SMS)来定期检测系统状态:

  • 过热或长期处于偏热的状态会减少硅上芯片的寿命;

  • 随着电容老化,系统会慢慢出错;

  • 风扇会随着使用年限慢慢出错;

  • 在器件出错前,应该采取预防性的措施防止出现灾难性的后果。

但是IPMI没有提供一套便于实现SMS的框架和接口,针对这个不足,OpenIPMI迎运而生。

OpenIPMI基于事件驱动模型,提供了回调和超时机制,封装了锁、多线程库和内存管理,隐藏了操作系统的区别,屏蔽了SMI(System Managment Interface)和Lan接口、IPMB接口的使用差异,用户可以直接使用OpenIPMI库进行二次开发,专注于和BMC IPMI相关业务的模块和实现,不用再额外考虑太多锁、同步和事件驱动模型本身的设计,极大地提高了开发效率。OpenIPM中涉及到下面六个基本概念,理解这些概念是快速把握OpenIPMI的关键:

  • connection:  凡是BMC和外部模块连接的方式都可以叫作connection,比如smi/lan/IPMB;

  • domain:   可以自动探测到的SDR/Sensors/FRU等的实体的集合;

  • Entities: 凡是能被检控的器件或者模块都叫做entity,可分为非固定位置的entity(比如机箱内的PSU/ambient)和固定位置的entity;

  • sensors: 用来监控系统上的某个对象,可分为threshod sensor and discrete sensor,前者是连续值,通过跟与设定的阈值的比较来触发SEL或者设置起特殊的状态位;而后者是离散值,不同的值表示不同的状态,以电源为例子,它表示上电、掉电、出错、AC lost等状态;

  • Controls:包括点灯、中继、显示、报警、重启动、风扇转速、one-shot-reset,one-shot-outputs、标识符;

  • Events:系统事件通常由跟sensor/control/entity相连的事件回调函数处理。回调函数需要返回一个值,来标志该handler是否已经处理那个Event.

OpenIPM和IPMI驱动的简要模块如下图所示: 

那么该怎样写一个基于OpenIPMI的程序?下面基于sample/dump_sensor.c进行分析,主要步骤如下:

1. allocate OS handler

Os handler 屏蔽了操作系统的差异,向OpenIPMI Library提供了统一的服务,以便实现事件驱动模型。这些服务包括:回调接口,超时计数器,条件变量(OpenIPMI不用)和锁和线程机制。

2.更新handler的相关设置,比如日志记录等;

3.初始化IPMI library. ipmi_init(os hanlder) 包括下面的步骤:

  • 建立起内存分配器

  • 定义了定制化的处理:在ipmi event/command/responce或者错误出现的时候的响应函数;

  • 建立连接:定义了地址设置、改变连接状态、发送命令、添加和删除事件处理函数、发送响应、处理器响应出错等连接时可能出现的问题

  • 初始化通信接口:注册smi和lan这两个接口

  • 初始化domain:domain是一个具有不同ID但是互联到management controler的集合,为什么需要引进这个domain? 需要它来区别多mc系统中某个mc以及与之连接的各个entities (_ipmi_domain_init),它初始化mc_oem_handlers、domain_change_handlers、doma×××_list、oem_handlers

  • 初始化mc:OpenIPMI基于状态机来描述INACTIVE/ACTIVE/CLEAN UP等mc的状态

  • 初始化远程console;

  • 指定payload的加密算法:AES-CBC-128/ xRC4-128 /xRC4-40

  • 指定RMCP认证算法:HMAC-SHA1 integrity

  • 注册md5算法

  • 初始化FRU解码句柄

  • 注册FRU相关读写函数,读取FRU 原始数据

  • 初始化payload size for SOL

  • 根据manufactory_ID,Product_ID来初始化一些OEM的MC, 这些型号包括:force_conn, motorala_mxp,intel,kontron,atca

  • 运行OEM Test

4.解析参数:ipmi_parse_args2: 接收用户的输入

5.建立起来连接:根据输入的参数建立起相应的连接

6. open domain并注册connection建立起来后执行的操作;

7.调用perform_one_op()来实现指定的操作。

开发者可以基于上面和sample目录下其他的例子来实现自己的功能,本人就基于demo程序实现了一个跟目标系统的库,使用起来非常方便。想知道我是怎么实现的吗?OpenIPMI的库和回调函数是怎么回事?小编还会接着和大家分析,请持续关注。

转载于:https://blog.51cto.com/xiamachao/1695818

IPMI从驱动到应用(中篇 )相关推荐

  1. IPMI从驱动到应用(下篇 )

    继续上文的讲叙,在利用OpenIPMI现成的库和例子程序之前,我们需要理解OpenIPMI 代码的结构和OpenIPMI程序运行的过程和特点. OpenIPMI的目的就是要屏蔽IPMI协议的细节,给用 ...

  2. 【ironic】ironic介绍与原理

    [ironic]ironic介绍与原理 零,配置文件 0.1 配置驱动 文件ironic.conf, ipmi硬件类型,默认值也是ipmi, pxe_ipmitool驱动也是默认值,配置驱动 [DEF ...

  3. ipmitool工具安装及常用命令,带安装包

    点击查看原文链接 一.IPMItool工具安装 1.windows版: a. 笔记本等电脑终端安装此工具,用于对远端服务器BMC发送指令,实现带外管理: 工具下载(点击下载):IPMIToolWin ...

  4. iterate mysql_ITERATE

    OutOfOrderScannerNextException: was there a rpc ti aused by: java.util.concurrent.ExecutionException ...

  5. IPMI之KCS驱动接口

    IPMI调试总结之KCS驱动接口 最近在龙芯平台调试服务器bios需要使用的IPMI接口,IPMI(Intelligent Platform Management Interface)是业界的一种规范 ...

  6. hp 服务器ipmi协议,HP DL380 G6 服务器IPMI Interface在Windows 2003 下怎么安驱动?_电脑_天涯问答_天涯社区...

    1. IPMI Interface设备驱动即为HP NULL IPMI Controller Driver,其下载地址如下: For win2003 32bit: http://h20000.www2 ...

  7. I2C从驱动到应用(中篇)

    Linux中对I2C的支持非常全面,既提供了内核态的访问方式,也提供了用户态的访问方法. Linux中对I2C的支持可以分为两个层面,一个是adapter和algorithm,对应的是i2c控制器:再 ...

  8. 服务器BMC、BIOS、IPMI、UEFI技术解析

    服务器BMC.BIOS.IPMI.UEFI技术解析 以BIOS为核心的固件产业,是信创产业链的重要组成部分,可被誉为信创产业的"山海关".在计算机体系中,BIOS 有着比操作系统更 ...

  9. ironic驱动-IMPITool

    概述 IMPITool驱动是通过ipmitool工具来管理部署节点的,目前主要有两个驱动: agent_ipmitool pxe_ipmitool 配置驱动 要修改ironic支持的驱动需要修改配置文 ...

最新文章

  1. System.Timers.Timer 多线程问题[转]
  2. 【坑爹微信】总有一款接口能坑你到吐血 --- 微信开发经验录
  3. [YTU]_2760( 字符串---首字母变大写)
  4. ITK:观察事件 Observe An Event
  5. 分享一下我的JAVA自学历程,加上我觉得效果还不错的方法
  6. Linux 手动安装Ettercap
  7. android 启动服务同时传递数据,Android Studio开发基础之起动Service,并通过从Activity向Service传递数据...
  8. 【英语学习】【Level 08】U04 What I love L1 What's on your playlist?
  9. 1.2 边缘检测示例
  10. [BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)
  11. linux 下安装 vim
  12. hping 详解_HPing3构造多种类型DDOS攻击使用详解
  13. noip模拟9 达哥随单题
  14. matlab如何把正弦转化为余弦公式,余弦和正切的换算关系(正弦余弦正切转换公式大全)...
  15. MATLAB地图作为底图,Matlab中自带地图绘制WorldMap详解
  16. 智能称重系统,车牌识别的优势
  17. 域名dns污染,如何防治?
  18. 3dmax2014【3dsmax2014】官方简体中文(64位)安装图文教程、破解注册方法
  19. 2013年度对话《3S 新闻周刊》
  20. MBT测试实例:做个“机器人”,使其随机、持续的对“web页面”做交互性测试--补充篇1一些思考

热门文章

  1. 2018-2019年新一代AI领域十大最具成长性技术展望
  2. GIS最新热点以及未来发展热门
  3. 全球自动驾驶汽车发展指数哪家强?美德领衔,中国第七
  4. 从芯片巨头沦落到收购对象 高通是怎样失去魔力的?
  5. 女程序员也有 35 岁危机焦虑吗?
  6. 硕士毕业两年算法工程师年终总结
  7. 心急如焚!程序员拥有 2.2 亿美元巨款,却想不起密码
  8. JavaScript 高级技巧 Memoization
  9. 8. Java 中的运算符 【连载 8】
  10. Compass(更新中。。。)