一種基于串口管理ipmi的方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體是指一種基于串口管理IPMI的方法。
【背景技術(shù)】
[0002] IPMI是智能型平臺(tái)管理接口(Intelligent Platform Management interface)。 用戶可以利用IPMI監(jiān)視服務(wù)器的物理特征,如溫度、電壓、電扇工作狀態(tài)、電源供應(yīng)以及機(jī) 箱入侵等。IPMI的核心是一個(gè)專用芯片/基板管理控制器(BaseboardManagement (:〇11杜〇116^81〇,它是獨(dú)立于0?1]、8103和03,所以用戶無(wú)論在開機(jī)還是關(guān)機(jī)的狀態(tài)下,只 要接通電源就可以實(shí)現(xiàn)對(duì)服務(wù)器的監(jiān)控。IPMI是一種規(guī)范的標(biāo)準(zhǔn),由美國(guó)英特爾、惠普 (Hewlett-Packard)、NEC、美國(guó)戴爾電腦和SuperMicro等公司制定,其最新的版本是 IPMI2.0。
[0003] 傳統(tǒng)的ipmi在linux下的實(shí)現(xiàn)由以下幾個(gè)內(nèi)核模塊組成:ipmi_msghandler,ipmi_ devintf,ipmi_serial和ipmi_serial_codec。這幾個(gè)內(nèi)核模塊分別負(fù)責(zé)不同的功能,它們 互相協(xié)作完成ipmi的功能。同時(shí)1 inux應(yīng)用層進(jìn)程通過(guò)設(shè)備文件/dev/ipmiO對(duì)上述內(nèi)核模 塊進(jìn)行通訊。
[0004]上述通訊方法比較復(fù)雜,涉及多個(gè)內(nèi)核模塊,內(nèi)核模塊之間的交互關(guān)系也非常多, 不利于應(yīng)用開發(fā)和故障定位,而且異常往往會(huì)導(dǎo)致內(nèi)核崩潰。
【發(fā)明內(nèi)容】
[0005] 為克服現(xiàn)有技術(shù)存在的缺陷,本發(fā)明提供一種基于串口管理IPMI的方法,這種方 法中l(wèi)inux應(yīng)用層與BMC直接通過(guò)串口進(jìn)行通訊,無(wú)需通過(guò)linux內(nèi)核來(lái)驅(qū)動(dòng)IPMI,克服現(xiàn)有 技術(shù)中串口上線路規(guī)程復(fù)雜等缺陷。
[0006] 為實(shí)現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案:
[0007] 本發(fā)明一種基于串口管理IPMI的方法,linux應(yīng)用層與BMC之間直接通過(guò)串口進(jìn)行 通訊;
[0008] 其中,linux應(yīng)用層與BMC通訊包括以下步驟:
[0009] 1)設(shè)備文件/dev/ttyS讀寫linux應(yīng)用層串口的16進(jìn)制數(shù)據(jù);
[0010] 2)16進(jìn)制數(shù)據(jù)轉(zhuǎn)換為ASCII文本,串口采用ASCII文本協(xié)議將ASCII文本發(fā)送到 BMC;
[0011 ] 3)BMC將ASCII文本轉(zhuǎn)換成16進(jìn)制數(shù)據(jù);
[0012] 反之,BMC與linux應(yīng)用層通訊包括以下步驟:
[0013] a)BMC將16進(jìn)制數(shù)據(jù)轉(zhuǎn)換成ASCII文本;
[0014] b)串口采用ASCII文本協(xié)議將ASCII文本發(fā)送到1 inux應(yīng)用層;
[0015] c) linux應(yīng)用層將ASCII文本轉(zhuǎn)換成16進(jìn)制數(shù)據(jù);
[0016] 在所述步驟2)或步驟b)中,ASCII文本協(xié)議采用IPMI規(guī)范。
[0017] 在所述步驟1)中,設(shè)備文件/dev/ttyS采用open或read或write函數(shù)讀寫linux應(yīng) 用層串口的16進(jìn)制數(shù)據(jù)。
[0018] 在所述步驟2)或步驟a)中,16進(jìn)制數(shù)據(jù)先加上回車字符0X0D作為邊界限定再轉(zhuǎn)換 為ASCII文本,BMC或1 inux應(yīng)用層收到ASCII文本后以回車字符\^乍為此段數(shù)據(jù)結(jié)束的標(biāo) 記。
[0019] 在所述步驟1)中,linux應(yīng)用層采用select函數(shù)對(duì)打開的串口文件句柄進(jìn)行異步 讀寫。
[0020] 本發(fā)明的有益效果在于:
[0021 ] 其一,本發(fā)明中l(wèi)inux應(yīng)用層與BMC之間直接通過(guò)串口進(jìn)行通訊,無(wú)需通過(guò)linux內(nèi) 核來(lái)驅(qū)動(dòng)IPMI,克服現(xiàn)有技術(shù)中串口上線路規(guī)程復(fù)雜等缺陷;
[0022] 其二,本發(fā)明中l(wèi)inux應(yīng)用層進(jìn)程通過(guò)串口與BMC進(jìn)行通訊,串口采用ASCII文本進(jìn) 行數(shù)據(jù)通訊,可以采用字符回車來(lái)限制數(shù)據(jù)的邊界,實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行劃分,具備可讀性強(qiáng)的 優(yōu)點(diǎn);
[0023]其三,本發(fā)明中16進(jìn)制數(shù)據(jù)采用IPMI規(guī)范所規(guī)定的CRC校驗(yàn),這樣確保數(shù)據(jù)傳輸?shù)?完整性。
【附圖說(shuō)明】
[0024]圖1為本發(fā)明實(shí)施例提供的整個(gè)模炔基于串口管理IPMI方法的示意圖;
[0025] 圖2為本發(fā)明實(shí)施例提供的16進(jìn)制數(shù)據(jù)轉(zhuǎn)換為ASCII文本的實(shí)現(xiàn)示例流程圖;
[0026] 圖3為本發(fā)明實(shí)施例提供的ASCII文本轉(zhuǎn)換為16進(jìn)制數(shù)據(jù)的實(shí)現(xiàn)示例流程圖。
【具體實(shí)施方式】
[0027] 以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述,但該實(shí)施例不應(yīng)該理 解為對(duì)本發(fā)明的限制。
[0028]本發(fā)明提供的一種基于串口管理IPMI的方法,linux應(yīng)用層與BMC之間直接通過(guò)串 口進(jìn)行通訊。
[0029] 其中,linux應(yīng)用層與BMC通訊包括以下步驟:
[0030] 1)設(shè)備文件/dev/ttyS采用open或read或write函數(shù)讀寫linux應(yīng)用層串口的16進(jìn) 制數(shù)據(jù),其中1 inux應(yīng)用層采用select函數(shù)對(duì)打開的串口文件句柄進(jìn)行異步讀寫;
[0031] 2)16進(jìn)制數(shù)據(jù)先加上回車字符0X0D作為邊界限定再轉(zhuǎn)換為ASCII文本,串口采用 ASCII文本協(xié)議將ASCII文本發(fā)送到BMC;
[0032] 3)BMC收到ASCII文本后以回車字符\r作為此段數(shù)據(jù)結(jié)束的標(biāo)記,并將ASCII文本 轉(zhuǎn)換成16進(jìn)制數(shù)據(jù)。
[0033] 反之,BMC與linux應(yīng)用層通訊包括以下步驟:
[0034] a)BMC先將16進(jìn)制數(shù)據(jù)加上回車字符0X0D作為邊界限定再轉(zhuǎn)換為ASCII文本;
[0035] b)串口采用ASCII文本協(xié)議將ASCII文本發(fā)送到1 inux應(yīng)用層;
[0036] C)linux應(yīng)用層收到ASCII文本后以回車字符\r作為此段數(shù)據(jù)結(jié)束的標(biāo)記,并將 ASCII文本轉(zhuǎn)換成16進(jìn)制數(shù)據(jù);
[0037]在上述步驟2)或步驟b)中,ASCII文本協(xié)議采用IPMI規(guī)范。16進(jìn)制數(shù)據(jù)在傳輸過(guò)程 中采用IPMI規(guī)范所規(guī)定的CRC校驗(yàn)(環(huán)冗余校驗(yàn)),這樣確保數(shù)據(jù)傳輸?shù)耐暾浴?br>[0038]圖1為本發(fā)明實(shí)施例提供的整個(gè)模炔基于串口管理IPMI方法的示意圖,詳述如下: [0039] 在步驟S101中,注冊(cè)命令處理函數(shù);
[0040]在步驟S102中,設(shè)備文件/dev/ttyS打開linux應(yīng)用層的串口并設(shè)置其屬性;
[0041] 在步驟S103中,判斷打開串口和設(shè)置屬性是否成功,是則執(zhí)行步驟S104,否則結(jié) 束;
[0042] 在步驟S104中,select函數(shù)監(jiān)聽數(shù)據(jù);
[0043] 在步驟S105中,判斷是否有數(shù)據(jù),是則執(zhí)行步驟S106,超時(shí)則執(zhí)行步驟S112;
[0044]在步驟S106中,解碼數(shù)據(jù);
[0045] 在步驟S107中,判斷是否進(jìn)行正確性檢查,是則執(zhí)行步驟S108,否則返回步驟 S104;
[0046]在步驟S108中,判斷數(shù)據(jù)是請(qǐng)求還是答應(yīng)狀態(tài),是請(qǐng)求狀態(tài)則執(zhí)行步驟S109,是答 應(yīng)狀態(tài)則執(zhí)行步驟S111;
[0047]在步驟S109中,調(diào)用和命令相關(guān)回調(diào)函數(shù),編碼并發(fā)送,記錄狀態(tài)放入消息隊(duì)列; [0048] 在步驟S110中,更新狀態(tài)機(jī),返回步驟S104;
[0049] 在步驟S111中,從消息隊(duì)列中取出發(fā)送狀態(tài),調(diào)用回應(yīng)回調(diào)函數(shù),返回步驟S110;
[0050] 在步驟S112中,從消息隊(duì)列中取出發(fā)送狀態(tài),調(diào)用超時(shí)回調(diào)函數(shù),返回步驟S110。
[0051] 其中,消息隊(duì)列包含超時(shí)回調(diào)函數(shù)和回應(yīng)回調(diào)函數(shù)。
[0052]圖2為本發(fā)明實(shí)施例提供的16進(jìn)制數(shù)據(jù)轉(zhuǎn)換為ASCII文本的實(shí)現(xiàn)示例流程圖,詳述 如下:
[0053]在步驟S201中,開始輸入16進(jìn)制數(shù)據(jù);
[0054]在步驟S202中,判斷數(shù)據(jù)輸入是否結(jié)束,是則先加上結(jié)束符\r然后結(jié)束;否則執(zhí)行 步驟S203;
[0055] 在步驟S203中,數(shù)據(jù)按位右移八位;
[0056]在步驟S204中,判斷數(shù)據(jù)是否在0-9之間,是則加上字符'0',放入輸出緩沖區(qū);否 則判斷數(shù)據(jù)是否在10-15之間,是則加上字符'A',放入輸出緩沖區(qū);
[0057] 在步驟S305中,判斷數(shù)據(jù)是否處理完畢,是則返回步驟S301;否則原數(shù)據(jù)&0x0F,返 回步驟S304。
[0058]圖3為本發(fā)明實(shí)施例提供的ASCII文本轉(zhuǎn)換為16進(jìn)制數(shù)據(jù)的實(shí)現(xiàn)示例流程圖。
[0059] 在步驟S301中,開始輸入ASCII文本;
[0060]在步驟S302中,判斷ASCII文本字符輸入是否結(jié)束,是則結(jié)束;否則執(zhí)行步驟S303; [0061 ] 在步驟S303中,設(shè)置變量v = 0;
[0062] 在步驟S304中,判斷文本字符是否在' 0 ' - ' 9 '之間,是則v = v*16+字符-' 0 ',放入 輸出緩沖區(qū);否則判斷數(shù)據(jù)是否在'A'-'F'之間,是則v = v*16+字符-'A',放入輸出緩沖區(qū); [0063] 在步驟S305中,判斷字符是否為偶數(shù)字符,是則返回步驟S304,否則返回步驟 S301〇
[0064]以linux應(yīng)用層與BMC通訊為例,設(shè)備文件/dev/ttyS讀寫linux應(yīng)用層串口的16進(jìn) 制數(shù)據(jù)為0x20 0x10 OxdO 0x5c 0x84 0x02 0x04 OxfO 0x01 0x6f 0xa2 0x01 0x00 0xb7。該16進(jìn)制數(shù)據(jù)先加上回車字符0X0D作為邊界限定,再根據(jù)圖2轉(zhuǎn)換為ASCII文本, 八5(:11文本為"2010(105〇840204仰016€32010(^7\^,此45(:11文本采用1?]\01.5規(guī)范來(lái)解析, 如下表1所示。BMC收到ASCII文本后以回車字符\r作為此段數(shù)據(jù)結(jié)束的標(biāo)記,并根據(jù)圖3將 ASCII文本轉(zhuǎn)換成16進(jìn)制數(shù)據(jù)。
[0065] 表1 ASCII文本采用IPMI 1.5規(guī)范的解析 [0066]
[0068]本說(shuō)明書中未作詳細(xì)描述的內(nèi)容,屬于本專業(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。
【主權(quán)項(xiàng)】
1. 一種基于串口管理IPMI的方法,其特征在于,1 inux應(yīng)用層與BMC之間直接通過(guò)串口 進(jìn)行通訊; 其中,linux應(yīng)用層與BMC通訊包括以下步驟: 1) 設(shè)備文件/dev/ttyS讀寫1 inux應(yīng)用層串口的16進(jìn)制數(shù)據(jù); 2) 16進(jìn)制數(shù)據(jù)轉(zhuǎn)換為ASCII文本,串口采用ASCII文本協(xié)議將ASCII文本發(fā)送到BMC; 3. BMC將ASCII文本轉(zhuǎn)換成16進(jìn)制數(shù)據(jù); 反之,BMC與1 inux應(yīng)用層通訊包括以下步驟: a) BMC將16進(jìn)制數(shù)據(jù)轉(zhuǎn)換成ASCII文本; b) 串口采用ASCII文本協(xié)議將ASCII文本發(fā)送到1 inux應(yīng)用層; c) linux應(yīng)用層將ASCII文本轉(zhuǎn)換成16進(jìn)制數(shù)據(jù); 在所述步驟2)或步驟b)中,ASCII文本協(xié)議采用IPMI規(guī)范。2. 根據(jù)權(quán)利要求1所述的基于串口管理IPMI的方法,其特征在于,在所述步驟1)中,設(shè) 備文件/dev/ttyS采用open或read或write函數(shù)讀寫linux應(yīng)用層串口的16進(jìn)制數(shù)據(jù)。3. 根據(jù)權(quán)利要求1所述的基于串□管理IPMI的方法,其特征在于,在所述步驟2)或步驟 a)中,16進(jìn)制數(shù)據(jù)先加上回車字符0X0D作為邊界限定再轉(zhuǎn)換為ASCII文本,BMC或linux應(yīng)用 層收到ASCII文本后以回車字符\r作為此段數(shù)據(jù)結(jié)束的標(biāo)記。4. 根據(jù)權(quán)利要求1所述的基于串口管理IPMI的方法,其特征在于,在所述步驟1)中, linux應(yīng)用層采用select函數(shù)對(duì)打開的串口文件句柄進(jìn)行異步讀寫。
【專利摘要】本發(fā)明公開了一種基于串口管理IPMI的方法,該方法通過(guò)設(shè)備文件/dev/ttyS對(duì)linux應(yīng)用層串口進(jìn)行讀寫,將16進(jìn)制數(shù)據(jù)先加上字符0X0D作為邊界限定再轉(zhuǎn)換成ASCII文本,該ASCII文本在BMC上轉(zhuǎn)換成相應(yīng)的16進(jìn)制數(shù)據(jù);反之,BMC的回應(yīng)數(shù)據(jù)也需要做類似的編碼轉(zhuǎn)換,再通過(guò)串口發(fā)送到linux應(yīng)用層;其中,ASCII文本通訊協(xié)議采用IPMI協(xié)議規(guī)范。此外,linux應(yīng)用層采用select函數(shù)對(duì)打開的串口文件句柄進(jìn)行異步讀寫。本發(fā)明中串口采用ASCII文本進(jìn)行數(shù)據(jù)通訊,可以采用字符回車來(lái)限制數(shù)據(jù)的邊界,具備可讀性強(qiáng)的優(yōu)點(diǎn)。
【IPC分類】G06F11/30, G06F13/42, G06F11/10, G06F9/30
【公開號(hào)】CN105677505
【申請(qǐng)?zhí)枴緾N201610085447
【發(fā)明人】王乾, 馬紅兵
【申請(qǐng)人】南京貝倫思網(wǎng)絡(luò)科技股份有限公司
【公開日】2016年6月15日
【申請(qǐng)日】2016年2月15日