Intelligent Platform Management Interface (IPMI)相关知识学习

IPMI用于连接系统下的管理软件,OS及管理软件可以通过IPMI可以提供更多有关精密控制、错误处理及警告的功能。IPMI的核心是BMC。

IPMI同样支持拓展的平台管理,该功能需要与系统连接额外的管理控制器IPMB。IPMB是基于I2C的串口线,它用于管理控制器之间的连接。

SEL,全称System Event Log,SEL是由BMC提供的,用来记录是系统进程停止的错误的信息。通过IPMI commands的设置可以读取、添加或清空SEL的信息。

IPMI为描述平台管理能力的信息提供两种机制:

(1)capabilities commands,IPMI command

(2)Sensor Data Records(SDR),command about sensor

IPMI定义了三种标准系统接口来向BMC传送信息。

(1)       Keyboard Controller Style (KCS),

Intel 8742 Universal Peripheral Interface microcontroller

(2)       System Management Interface Chip(SMIC),

当BMC没有建立KCS接口时,SMIC提供一个可选择的选项。

(3)       Block Transfer(BT),

统提供的一个更高执行效率的接口,与前两者不同,它以a per-block handshake来进行数据传输。

除了以上基本接口,还有我们常用的串口,LAN口。

串口支持3种connection modes

Basic Mode        PPP Mode       Terminal Mode:

SOL, Serial Over LAN ,

它被用于异步的serial-based OS and pre-OS communication同BMC。

 

BMC Transfer在我们的code中一般通过KCS接口实现。

了解实现过程之前首先要了解KCS Interface Registers

1,Status Register

系统中总会开始一些信息传送,传送之前需要判断设备的状态,对于KCS接口就通过他的Status Register来进行判断。Status Register每一位代表的信息如图所示:

Bit6,Bit7两个状态位总共表示接口会处于的4种状态。

2,Command Register

当IBF被清除时,可以向其中写进命令。

3,Data Registers

BMC用来传输数据。

 

CODE中如何实现通过KCS接口向BMC写入数据:

(1)       读取Status Register信息,获得IBF的值,直至等到IBF值为0时,继续执行。

(2)       清除   OBF

(3)       检查KCS状态

(4)       以byte为单位向BMC发送数据

(5)       再次检查KCS状态

从BMC读取数据:

(1)       检查KCS状态,若为IDLE_STATE,则返回EFI_SUCCESS。

(2)       从DATA_OUT读取数据。

(3)       将DATA_OUT读出的数据写入DATA_IN

 

注意到KCS在PEI与DXE两个阶段中的code并不一样。

 在DXE阶段memory已经初始化好了,所以KCS在DXE阶段的使用需要判断是否是SMM模式。

 

posted on 2018-03-08 10:18  米兰达莫西  阅读(5450)  评论(0编辑  收藏  举报