BMC(Baseboard Management Controller)即基板管理控制器,是IPMI(Intelligent Platform Management Interface)協(xié)議即智能平臺(tái)管理接口所定義的服務(wù)器管理體系中的核心組件。
1. 概述
1.1 IMPI簡(jiǎn)介
維基百科中IPMI定義如下:
智能平臺(tái)管理接口(IPMI)是一套為自主計(jì)算機(jī)子系統(tǒng)定義的計(jì)算機(jī)接口規(guī)范,用于提供獨(dú)立于主機(jī)系統(tǒng)的CPU,固件(BIOS或UEFI)和操作系統(tǒng)等軟硬件的管理和監(jiān)視功能。 IPMI定義了一套系統(tǒng)管理員接口,用于計(jì)算機(jī)系統(tǒng)的帶外管理和管理員操作監(jiān)視。
簡(jiǎn)言之,IPMI提供了一套基標(biāo)準(zhǔn)接口,通過(guò)嵌入到服務(wù)器主板上的BMC、相關(guān)傳感器及相應(yīng)固件,提供獨(dú)立于服務(wù)器CPU、固件、和操作系統(tǒng)等軟硬件的服務(wù)器檢測(cè)管理功能,既不需要服務(wù)器操作系統(tǒng)支持,也不占用服務(wù)器操作系統(tǒng)資源。IPMI接口提供的服務(wù)包括服務(wù)器物理健康狀態(tài)檢測(cè),服務(wù)器軟硬件信息和運(yùn)行狀態(tài)查詢,開(kāi)關(guān)機(jī),察看和修改BIOS配置,遠(yuǎn)程安裝操作系統(tǒng)等。被監(jiān)控的主機(jī)可以斷電,但是必須保持電源和局域網(wǎng)連接。
IMPI接口基于命令/響應(yīng)機(jī)制,通過(guò)網(wǎng)絡(luò)功能碼將機(jī)箱、傳感器、固件、存儲(chǔ)、應(yīng)用等主機(jī)組件進(jìn)行分類(lèi)和傳遞消息,通過(guò)軟件ID對(duì)BIOS、系統(tǒng)管理軟件、遠(yuǎn)程終端等傳感器管理軟件進(jìn)行分類(lèi),在網(wǎng)絡(luò)、串行/Moderm接口、IPMB(I2C)、KCS、SMIC、SMBus等不同接口上傳遞使統(tǒng)一格式的IPMI消息。
IPMI1.5允許IPMI系統(tǒng)通過(guò)串口,BMC專(zhuān)用的帶外網(wǎng)口,或者與主機(jī)共享的帶內(nèi)網(wǎng)口(NC-SI)與遠(yuǎn)程管理系統(tǒng)通訊。
IPMI2.0增加了SOL(serial over LAN)、群組管理系統(tǒng)、增強(qiáng)身份認(rèn)證(RAKP+、SHA-1等)、基于OpenSSL/RCMP+的安全增強(qiáng)網(wǎng)絡(luò)接口、固件防火墻和VLAN支持等。其中,SOL支持將BIOS輸出和操作系統(tǒng)終端重定向到與BMC相連的串口,進(jìn)而通過(guò)IPMI與遠(yuǎn)程系統(tǒng)管理軟件連接。并且IPMI2.0兼容系統(tǒng)通常還提供KVM over IP(基于IP的遠(yuǎn)程鍵盤(pán)鼠標(biāo)顯示器連接)、遠(yuǎn)程桌面和頁(yè)面服務(wù)器等功能,雖然這些功能并不屬于IPMI協(xié)議的一部分。
IMPI規(guī)范主體架構(gòu)如下:
此外,為了提供更多的功能和更好的安全性,DMTF(分布式管理任務(wù)組)制定了基于瀏覽器RESTful插件和JSON數(shù)據(jù)格式的的安全可擴(kuò)展數(shù)據(jù)中心管理標(biāo)準(zhǔn)Redfish API。英特爾也實(shí)現(xiàn)了IPMI 2.0的大數(shù)據(jù)中心擴(kuò)展DCMI(Data Center Manageability Interface),基于IPMI接口但是最小化可選接口數(shù)量,并包括功率上限控制等其他不同。
1.2 BMC簡(jiǎn)介
維基百科中BMC定義如下:
基板管理控制器(BMC)提供IPMI架構(gòu)中的智能特性。它是嵌入在計(jì)算機(jī)(通常是服務(wù)器)主板上的專(zhuān)用微控制器。 BMC負(fù)責(zé)管理系統(tǒng)管理軟件和平臺(tái)硬件之間的接口。
根據(jù)IPMI規(guī)范,BMC需要滿足如下條件:
- 實(shí)現(xiàn)IMPI必選命令;
- 提供任一BMC訪問(wèn)接口;
- 提供標(biāo)準(zhǔn)化的看門(mén)狗定時(shí)器接口和看門(mén)狗內(nèi)部事件產(chǎn)生功能;
- 提供可被其他主機(jī)組件使用的事件接收功能;
- 提供可通過(guò)相應(yīng)的IPMI必選命令訪問(wèn)的SDR(傳感器數(shù)據(jù)記錄)倉(cāng)庫(kù)、SEL(系統(tǒng)事件記錄)和FRU(現(xiàn)場(chǎng)可替換單元)目錄等功能;
- 提供初始化代理功能以初始化BMC和其他管理控制器的傳感器和事件產(chǎn)生組件。
簡(jiǎn)而言之,BMC就是嵌入到服務(wù)器主板上的一塊獨(dú)立處理器,通過(guò)IPMB、LPC(low-pin-count-interface)、SMBus等各種接口收集與主機(jī)內(nèi)部的其他軟硬件組件進(jìn)行通信,并通過(guò)網(wǎng)絡(luò)、串行/Moderm、PCI等接口傳向本地主機(jī)/遠(yuǎn)程服務(wù)器提供查詢和控制功能。
典型的BMC系統(tǒng)如下所示:
2. 開(kāi)源方案
BMC系統(tǒng)通常由各個(gè)服務(wù)器廠商自主實(shí)現(xiàn),開(kāi)源框架較少。目前已知的開(kāi)源方案有OpenBMC、u-bmc和coreIPM。
2.1 OpenBMC
2.1.1 概述
根據(jù)維基百科的定義:
OpenBMC項(xiàng)目是Linux基金會(huì)的開(kāi)源項(xiàng)目,目的是提供一個(gè)BMC(基板管理控制器)固件堆棧的開(kāi)源實(shí)現(xiàn)。OpenBMC是BMC 的Linux發(fā)行版,旨在跨越異構(gòu)系統(tǒng),包括企業(yè),高性能計(jì)算(HPC),電信和云規(guī)模數(shù)據(jù)中心。
OpenBMC由微軟,英特爾,IBM,谷歌和Facebook發(fā)起,使用Yocto Project作為底層構(gòu)建和發(fā)布框架。OpenBMC提供REST API、Redfish、IPMIv2.0、D-BUS等接口和自定義的HOST管理接口,支持常見(jiàn)的主機(jī)狀態(tài)查看和控制、BMC和在主機(jī)固件更新等功能。
目前OpenBMC支持的Soc如下所示:
- OpenBMC Github官方倉(cāng)庫(kù)master分支:
BSP目錄 | 單板 | SoC | ARCH |
---|---|---|---|
meta-hxt/meta-stardragon4800-rep2 | stardragon4800-rep2 | ASPEED AST2500 | arm1176jz-s |
meta-qualcomm/meta-centriq2400-rep | centriq2400-rep | ASPEED AST2500 | arm1176jz-s |
meta-inspur/meta-on5263m5 | on5263m5 | ASPEED AST2500 | arm1176jz-s |
meta-evb/meta-evb-enclustra/meta-evb-zx3-pm3 | evb-zx3-pm3 | Xilinx Zynq-7000 | arm Cortex-A9 |
meta-evb/meta-evb-aspeed/meta-evb-ast2500 | evb-ast2500 | ASPEED AST2500 | arm1176jz-s |
meta-evb/meta-evb-nuvoton/meta-evb-npcm750 | evb-npcm750 | Nuvoton NPCM7XX | arm7a-novfp |
meta-evb/meta-evb-raspberrypi | RaspberryPi | RaspberryPi | arm1176jzf-s |
meta-ibm/meta-z | ibm-z | fsp2 | PPC476 |
meta-ibm/meta-witherspoon | witherspoon | ASPEED AST2500 | arm1176jz-s |
meta-ibm/meta-palmetto | palmetto | ASPEED AST2400 | arm926ejs |
meta-ibm/meta-romulus | romulus | ASPEED AST2500 | arm1176jz-s |
poky/meta-poky | qemux86 | i586 | x86 |
meta-facebook/meta-tiogapass | tiogapass | ASPEED AST2500 | arm1176jz-s |
meta-inventec/meta-lanyang | lanyang | ASPEED AST2500 | arm1176jz-s |
meta-quanta/meta-gsj | gsj | Nuvoton NPCM7XX | arm7a-novfp |
meta-quanta/meta-f0b | f0b | ASPEED AST2500 | arm1176jz-s |
meta-quanta/meta-q71l | quanta-q71l | ASPEED AST2400 | arm926ejs |
meta-quanta/meta-runbmc-nuvoton | runbmc-nuvoton | Nuvoton NPCM7XX | arm7a-novfp |
meta-intel/meta-s2600wf | s2600wf | ASPEED AST2500 | arm1176jz-s |
meta-mellanox/meta-msn | msn | ASPEED AST2500 | arm1176jz-s |
meta-ingrasys/meta-zaius | zaius | ASPEED AST2500 | arm1176jz-s |
meta-phosphor | qemuarm | arm versatile 926ejs | arm926ejs |
meta-portwell/meta-neptune | neptune | ASPEED AST2500 | arm1176jz-s |
- Facebook OpenBMC倉(cāng)庫(kù)helium分支:
BSP目錄 | 單板 | SoC | ARCH |
---|---|---|---|
meta-bf/meta-mavericks | mavericks | ASPEED AST1250 | arm926ejs |
meta-facebook/meta-fby2/meta-fby2-gpv2 | fby2 | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-fby2/meta-fby2-ep | fby2 | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-fby2 | fby2 | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-fby2/meta-fby2-tl | fby2 | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-fby2/meta-fby2-rc | fby2 | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-yamp | yamp | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-fbtp | fbtp | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-fbttn | fbttn | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-minipack | minipack | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-lightning | lightning | ASPEED AST1250 | arm926ejs |
meta-facebook/meta-galaxy100 | galaxy100 | ASPEED AST1250 | arm926ejs |
meta-facebook/meta-wedge100 | wedge100 | ASPEED AST1250 | arm926ejs |
meta-facebook/meta-minilaketb | minilaketb | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-yosemite | yosemite | ASPEED AST1250 | arm926ejs |
meta-facebook/meta-cmm | cmm | ASPEED AST2520 | arm1136jf |
meta-facebook/meta-wedge | wedge | ASPEED AST1250 | arm926ejs |
meta-portwell/meta-pwneptune | pwneptune | ASPEED AST2520 | arm1136jf |
注意:
- 不同git branch支持BSP不一樣;
- 有效BSP必須同時(shí)包含local.conf.sample和bblayers.conf.sample文件。
2.1.2 編譯和運(yùn)行
編譯和運(yùn)行環(huán)境如下:
* kubuntu 18.04 LTS;
* OpenBMC官方倉(cāng)庫(kù);
* OpenBMC維護(hù)的QEMU倉(cāng)庫(kù),包含OpenBMC對(duì)QEMU官方代碼的補(bǔ)丁和增強(qiáng);
* Palmetto QEMU模擬目標(biāo)機(jī),真實(shí)硬件為一個(gè)使用AST2400(支持NC-SI)作為BMC的OpenPower Power8服務(wù)器。
注意:Facebook官方倉(cāng)庫(kù)編譯不成功,workaround了automake編譯錯(cuò)誤問(wèn)題后發(fā)現(xiàn)了更多問(wèn)題,無(wú)法繼續(xù)。有興趣者可參考Facebook OpenBMC倉(cāng)庫(kù)主頁(yè)和OpenBMC介紹 - 簡(jiǎn)書(shū)進(jìn)行嘗試,共同討論一下。
搭建和編譯步驟如下:
- sudo apt-get install -y git build-essential libsdl1.2-dev texinfo gawk chrpath diffstat
- git clone https://github.com/openbmc/openbmc.git
- cd openbmc
- export TEMPLATECONF=meta-ibm/meta-palmetto/conf
- . openbmc-env
- bitbake obmc-phosphor-image
注意:image存放在編譯目錄下的tmp/deploy/images/palmetto/
中。
QEMU編譯步驟如下:
- git clone https://github.com/openbmc/qemu.git qemu_obmc
- sudo apt-get install libsdl2-2.0-0 libsdl2-dev
- cd qemu
- git submodule update --init dtc
- mkdir build
- cd build
- ../configure --target-list=arm-softmmu
- make
注意:可執(zhí)行文件存放在編譯目錄下的arm-softmmu
中,因此啟動(dòng)QEMU時(shí)必須加上路徑。
QEMU配置和啟動(dòng)步驟如下:
- sudo apt-get install libvirt-dev libvirt-bin bridge-utils uml-utilities qemu-system-common
- 創(chuàng)建網(wǎng)橋配置文件, 注意文件路徑和網(wǎng)口名與系統(tǒng)相關(guān),
sudo mkdir -p /etc/qemu
sudo echo "allow virbr0" >> /etc/qemu/bridge.conf - 使用
brctl addif/delif <網(wǎng)橋名稱(chēng)> <網(wǎng)口名稱(chēng)>
命令調(diào)整網(wǎng)橋包含的網(wǎng)口并檢查,正確配置如下所示$ brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.fec6883d4c52 yes tap0 - sudo arm-softmmu/qemu-system-arm -m 256 -M palmetto-bmc -nographic -drive file=~/code/openbmc/build/tmp/deploy/images/palmetto/flash-palmetto,format=raw,if=mtd -net nic,macaddr=C0:FF:EE:00:00:02,model=ftgmac100 -net bridge,id=net0,helper=/usr/lib/qemu/qemu-bridge-helper,br=virbr0
REST API接口用法可參考OpenBMC REST cheat sheet:
- export bmc=root:0penBmc@xx.xx.xx.xx
- 查看接口
curl -b cjar -k https://${bmc}/xyz/openbmc_project/list
- 復(fù)位Host
curl -b cjar -k -H "Content-Type: application/json" -X PUT -d '{"data":"xyz.openbmc_project.State.Host.Transition.Reboot"}' https://${bmc}/xyz/openbmc_project/state/host0/attr/RequestedHostTransition
- 復(fù)位BMC
curl -b cjar -k -H "Content-Type: application/json" -X PUT -d '{"data":"xyz.openbmc_project.State.BMC.Transition.Reboot"}' https://${bmc}//xyz/openbmc_project/state/bmc0/attr/RequestedBMCTransition
Redfish接口與REST API接口類(lèi)似,用法可參考OpenBMC Redfish cheat sheet:
- export bmc=root:0penBmc@xx.xx.xx.xx
- 查詢r(jià)oot
curl -b cjar -k https://${bmc}/redfish/v1
- 建立連接
curl --insecure -X POST -D headers.txt https://${bmc}/redfish/v1/SessionService/Sessions -d '{"UserName":"root", "Password":"0penBmc"}'
grep X-Auth-Token headers.txt
export bmc_token=<X-Auth-Token> - 查看對(duì)象
curl -k -H "X-Auth-Token:
{bmc}/redfish/v1/Chassis
IMPI接口通常使用ipmitool訪問(wèn),該工具支持部分命令補(bǔ)齊,幫助信息豐富:
- sudo apt-get install ipmitool
- 查看Host電源狀態(tài)
ipmitool -I lanplus -H xx.xx.xx.xx -U root -P 0penBmc power status
- 列出SDR(傳感器數(shù)據(jù)記錄)
ipmitool -I lanplus -H xx.xx.xx.xx -U root -P 0penBmc sdr list
2.2 u-bmc
u-bmc是一個(gè)與OpenBMC并行開(kāi)發(fā)但使用gRPC而不是IPMI的BMC固件開(kāi)源項(xiàng)目。其中,gRPC是Google主導(dǎo)開(kāi)發(fā)的RPC框架,使用HTTP/2協(xié)議并用ProtoBuf作為序列化工具。
u-bmc目的在于挑戰(zhàn)行業(yè)現(xiàn)狀,例如為人詬病的安全問(wèn)題等。u-bmc借鑒OpenBMC的代碼并向其貢獻(xiàn)代碼。u-bmc仍處于試驗(yàn)階段,目前僅支持基于ASPEED AST2400的BMC。
2.3 coreIPM
coreIPM是一個(gè)開(kāi)源的IPMI BMC管理框架,符合帶有PICMG 3.0 R2.0 AdvancedTCA擴(kuò)展的IPMI v2.0規(guī)范,可以監(jiān)控傳感器并提供記錄和警報(bào),實(shí)現(xiàn)電源控制和復(fù)位等。
coreIPM支持NXP LPC系列ARM處理器和TI AM335X等,但Github代碼倉(cāng)庫(kù)中最近一次更新已經(jīng)是2009年12月。
參考
- IPMI/BMC維基百科詞條
- LPC(Low Pin Count)總線維基百科詞條
- Intel IPMI主頁(yè)(含標(biāo)準(zhǔn))
- NC-SI維基百科詞條
- IPMI/BMC百度百科詞條
- IPMI簡(jiǎn)介
- IPMI SOL – Inexpensive Remote Console
- IPMI SOL使用
- IPMI 及Serial Over Lan(Sol)的實(shí)現(xiàn)
- KVM OVER IP百度百科詞條
- 基于ARM的BMC設(shè)計(jì)與實(shí)現(xiàn)
- OpenBMC維基百科詞條
- OpenBMC主頁(yè)
- OpenBMC Github主頁(yè)
- OpenBMC介紹 - 簡(jiǎn)書(shū)
- u-bmc主頁(yè)
- u-bmc Github主頁(yè)
- coreIPM主頁(yè)
- coreIPM Google Code主頁(yè)
- coreIPM Github代碼克隆
- BMC、IPMI介紹
- AST2500 NC-SI功能調(diào)試
- DMTF Redfish主頁(yè)
- Redfish白皮書(shū)
- DCMI v1.5規(guī)范