BIOS和BMC同时需要check 看门狗定时器的定时触发策略功能,在BIOS UI下timeout的设定选项有6分钟,5分钟,4分钟,3分钟,响应的触发策略包括power down ,reset(hard reset),下面以设定timeout为6分钟触发策略为reset为例来进行说明。
1. 为了保证足够的时间长度触发对应的动作,需要额外设定setup timeout为500(系统会停在B2/B4的界面)
2. 6分钟=360S,FRB-2记录的值是每0.1秒一个单位,即两个数字之间的间隔为0.1秒,因此360秒代表的IPMI的记录数值为3600
3. timeout的过程,初始值为3600,每秒十个数字递减直到数字减小为0000后触发对应的 策略reset
4. 使用IPMI 命令查看看门狗定时器的get watchdog timer command,返回值的第6字节,第7字节代表初始设定的timeout的数值,其中第六字节代表数值的低8位,第七字节代表设定数值的高8位,以3600为例,换算成16进制为E10,即0E10,则第六位第七位的数值为100E。同时第七字节,第八字节的初始值也应该为10,0E,其中第七字节为低八位,第八字节为高八位 。
程序需要实现的目标:
1. 定时的时间长度是否正确,检查返回值的第六字节和第七字节组合起来的数值是否为100E(3600),如果相等返回check successful,跳入timeout计算执行时间长度计算的循环。具体如下:A。数值应为一组十六进制数字,返回数值与0X0FFFF0000做与预算,提取第六字节,第七字节数值赋值给一变量var1。
            B.var1与数值100E做比较,如果相等跳入j计算timeout执行时间长度的循环,同时回显示check successful并跳入计算timeout执行时间长度的循环,不相等则跳出循环,结束程序。
  REMARK:如果使用的tool获得的数值为0Xxx ,0Xxx 需要将此数值转化为XX XX 。
2. 当读取的第六字节和第七字节的数值比对成功后,循环跳入后面的计数,算法如下,每间隔一秒抓取一次第八字节和第九字节的数值,(与0X0FFFF做与运算)保留最后16位,让它和0000相比较是否等于0000,如果等于0000,则程序停止循环计数,如果不相等,(设置一个计数变量,每次加一)则计数变量加一,并在一秒后继续抓第七字节和第八字节的数值与0000相比较,直到数值变为0000.
2.A.初始值的判定,watchdog timer的初始值为100E,初始值可能未必一开始就开始变动,如果为100E,则设置死循环跳转,一直去检查此初始值,直到此数值不等于100E,则开始跳入计数环节。
2.B.时间长度就等于变量通过循环增加到的值(以秒为单位),外加程序执行时间消耗的补偿值,此数值需要通过观察得到经验值。
2.C.1秒延时可通过ping –n 1 127.1 1>nul 2>nul来实现
2.D.当比对的数值等于0000以后,检查循环计数变量,对应的数值再加上程序执行占用的时间(以分钟为单位算补偿的秒数)即可得到timeout执行的时间长度,获得的数值可与设置的timeout时间长度进行比对。
如上可实现对于设定的timeout数值与实际的timeout执行时间。
程序执行样例:
:start
timeout on t2 timer06 25 获取定时器状态 &
提取第六字节,第七字节并转成XXXX搁置的显示
IF  %Y%  NEU 001e  goto fail #Y变量代表XXXX的数值
Echo check successful,the timer setting is %y% &
Goto timeout
:fail
Echo The geted timout is wrong !!!!! >&
Goto end
:timeout1
Set /a var=1
Ping –n 1 1>nul 2>nul
提取第八字节,第九字节并转成XXXX搁置的显示,将值赋给变量Z
IF %Z% EQU 100E goto timeout1
Echo watchdog timer start  working!!! >&
Goto timeout
:timeout
Set /a var+=1
Ping –n 1 1>nul 2>nul
提取第八字节,第九字节并转成XXXX搁置的显示,将值赋给变量Z
IF %Z% NEU 0000 goto timeout
Echo The processing of watchdog timeout has finished!!!!! >&
Set /a var=var+num #num为程序执行过程中需要假如的数值补偿
Echo The program time length is  %var% seconds  >&
:end
目前有问题部分:
1, 字节关键字的抓取,get watch timer command返回的数字之间都有空格,需要转换掉,分别与0X0FFFF和0X0FFFF0000做与运算赋值给定义的变量
2, 比较的部分是否可以出现字符100e,即字符和数字是否可以同时进行比较,还是直接将16进制数字转化为10进制,方便进行比较(把需要比较的100E换成3600。
3, 由于程序执行需要一定时间,因此会产生额外消耗的时间,此处需要根据实际的测试状况来估算补偿数值。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。