发明内容
本申请的目的是提供一种BIOS选项的带外设置方法、带外设置系统、计算机可读存储介质和服务器,能够
为解决上述技术问题,本申请提供一种BIOS选项的带外设置方法,具体技术方案如下:
S101:当检测到带外修改指令时,轮询所有BIOS选项;
在结构体数组接口中通过每个所述BIOS选项的特定字符串标识在json文件中匹配设定值;
若所述设定值存在,将所述带外修改指令对应的设定值更新至非易失性随机访问存储器。
可选的,还包括:
创建结构体数组接口并关联至所述BIOS,并将联动主选项、被联动子选项以及所述联动主选项指向关联子选项设定值的结构体指针写入所述结构体数组接口;其中,所述被联动子选项包含所述特定字符串标识,所述联动主选项包含联动选项的设置标记位。
可选的,将所述带外修改指令对应的设定值更新至非易失性随机访问存储器之后,还包括:
将所述带外修改指令对应的设定值写入内存,并将存在所述设定值的当前轮询选项的特定字符串标识和选项值写入选项联动函数;所述选项联动函数用于通过所述结构体指针配置所述当前轮询选项对应的所有被联动子选项。
可选的,将存在所述设定值的当前轮询选项的特定字符串标识和选项值写入选项联动函数之后,还包括:
判断所述当前轮询选项是否为轮询主选项;
若是,轮询所有BIOS选项并确定所述轮询主选项对应的被联动子选项;
根据所述当前轮询选项的选项值从所述结构体数组接口中确定被联动子选项对应的子选项设定值;
根据所述子选项设定值对所述被联动子选项进行赋值;
将作为轮询主选项的当前轮询选项的标记位置起。
可选的,将作为轮询主选项的当前轮询选项的标记位置起之后,在轮询所有BIOS选项时还包括:
若当前联动选项的设置标记位置起,确定设置标记位置起的目标联动主选项;
通过所述特定字符串标识判断当前轮询选项是否为所述目标联动主选项对应的被联动子选项;
若是,停止对所述目标联动主选项对应的被联动子选项进行赋值。
可选的,还包括:
通过所述联动选项包含的钩子函数设定修改所述带外修改指令对应的设定值。
可选的,还包括:
当检测到带外修改选项值不为0时,生成所述带外修改指令。
本申请还提供一种BIOS选项的带外设置系统,包括:
轮询模块,用于当检测到带外修改指令时,轮询所有BIOS选项;
匹配模块,用于在结构体数组接口中通过每个所述BIOS选项的特定字符串标识在json文件中匹配设定值;
设定模块,用于若所述设定值存在,将所述带外修改指令对应的设定值更新至非易失性随机访问存储器。
本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的方法的步骤。
本申请还提供一种服务器,包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时实现如上所述的方法的步骤。
本申请提供一种BIOS选项的带外设置方法,包括:当检测到带外修改指令时,轮询所有BIOS选项;在结构体数组接口中通过每个所述BIOS选项的特定字符串标识在json文件中匹配设定值;若所述设定值存在,将所述带外修改指令对应的设定值更新至非易失性随机访问存储器。
本申请解决了通过Redfish带外修改BIOS配置未实现选项联动功能的技术缺陷,通过在BIOS代码层面添加选项联动接口,当检测到带外修改指令时,在联动接口中进行匹配查找,待所有的选项检索完毕后,统一更新非易失性随机访问存储器,在重启前变量即同步更新生效,且统一的联动配置接口利于调试添加。
本申请还提供一种BIOS选项的带外设置系统、计算机可读存储介质和服务器,具有上述有益效果,此处不再赘述。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参考图1,图1为本申请实施例所提供的一种BIOS选项的带外设置方法的流程图,该方法包括:
S101:当检测到带外修改指令时,轮询所有BIOS选项;
S102:在结构体数组接口中通过每个所述BIOS选项的特定字符串标识在json文件中匹配设定值;
S103:若所述设定值存在,将所述带外修改指令对应的设定值更新至非易失性随机访问存储器。
当检测到带外修改指令时,需要轮询所有的BIOS选项,从而确定发生修改的BIOS选项。在此对于如何检测带外修改指令不作具体限定,可以对带外修改选项值进行检测,即当检测到带外修改选项值不为0时,生成带外修改指令。带外修改选项值针对于带外修改,即只要存在带外修改,则带外修改选项值会发生变化,从而表示存在带外修改。
此后在结构体数组接口中通过每个所述BIOS选项的特定字符串标识在json文件中匹配设定值。该json文件为BIOS中的json文件,其包含了带外菜单设置。而结构体数组接口为本实施例所创建的接口,用于匹配BIOS选项的特定字符串标识和json文件中的设定值。本实施例中,每个BIOS选项都包含对应的特定字符串标识。则通过匹配特定字符串标识对应的设定值,若相应设定值存在,表明该BIOS选项被带外修改,否则未被带外修改。若被带外修改,则将带外设置的BIOS选项值更新至BIOS对应的非易失性随机访问存储器(NVRAM,Non-Volatile Random Access Memory),使其生效。
在此对于结构体数组接口的具体内容和创建方式不作限定,其可以在步骤S102执行前,创建结构体数组接口并关联至BIOS,并将联动主选项、被联动子选项以及联动主选项指向关联子选项设定值的结构体指针写入结构体数组接口。其中,被联动子选项包含特定字符串标识,联动主选项包含联动选项的设置标记位。
此外,在将带外修改指令对应的设定值更新至非易失性随机访问存储器之后,可以将带外修改指令对应的设定值写入内存,并将存在设定值的当前轮询选项的特定字符串标识和选项值写入选项联动函数。选项联动函数用于通过结构体指针配置当前轮询选项对应的所有被联动子选项。通过将带外修改指令对应的设定值写入内存,使得在带外修改指令对应的设定值未生效前先在内存中缓存。
本申请实施例解决了通过Redfish带外修改BIOS配置未实现选项联动功能的技术缺陷,通过在BIOS代码层面添加选项联动接口,当检测到带外修改指令时,在联动接口中进行匹配查找,待所有的选项检索完毕后,统一更新非易失性随机访问存储器,在重启前变量即同步更新生效,且统一的联动配置接口利于调试添加
在上述实施例的基础上,作为优选的实施例,在对BIOS选项轮询时可以针对当前轮询选项是否为轮询主选项作相应的步骤变化。具体的,将存在设定值的当前轮询选项的特定字符串标识和选项值写入选项联动函数之后,还包括如下步骤:
第一步、判断当前轮询选项是否为轮询主选项;若是,进入第二步;
第二步、轮询所有BIOS选项并确定轮询主选项对应的被联动子选项;
第三步、根据当前轮询选项的选项值从结构体数组接口中确定被联动子选项对应的子选项设定值;
第四步、根据子选项设定值对被联动子选项进行赋值;
第五步、将作为轮询主选项的当前轮询选项的标记位置起。
在进行BIOS选项轮询时,对当前轮询选项是否为轮询主选项进行判断。若为轮询主选项,则再次轮询所有BIOS选项,从而确定当前轮询的主选项对应的被联动子选项。在查到所有被联动子选项后,根据当前轮询选项的选项值从结构体数组接口中确定被联动子选项对应的子选项设定值,并进行赋值。从而实现了当前选项为联动列表内的主选项时,根据联动列表内的设置对联动子选项进行设置,待所有的选项检索完毕后,统一更新非易失性随机访问存储器,不必再单独寻找BIOS主选项的被联动子选项进行修改。
且在所有被联动子选项进行赋值后,将当前轮询主选项的标记位置起,表明该轮询主选项对应的所有被联动子选项已经被赋值,即使后续在轮询所有BIOS选项时,由于标记位置起将不在对被联动子选项进行赋值,具体过程如下:
若当前联动选项的设置标记位置起,确定设置标记位置起的目标联动主选项;通过特定字符串标识判断当前轮询选项是否为目标联动主选项对应的被联动子选项;若是,停止对目标联动主选项对应的被联动子选项进行赋值。
此外,考虑到除了选项设定值的联动,个别情况下需要额外的联动动作,在此函数内也增加了2个联动动作的钩子函数,分别在当前轮询选项值写入内存的前后,可以视情况添加。钩子函数可以用于修改设定值。
可以看出,本实施例的执行思路如下:
①通过特定字符串标识与联动主选项的特定字符串标识进行匹配,若为联动主选项,则根据当前主选项的选项值在联动选项的结构体数组接口中检索出当前的设置值。
②将所有BIOS选项再轮询一遍,从中查找出联动子选项,再根据主选项的设定,从联动选项的结构体数组接口中获取出关联子选项对应的设定值,最终对子选项进行赋值。
③所有选项轮询完毕后,为当前主选项置起设置标记位。
下面对本申请实施例提供的BIOS选项的带外设置系统进行介绍,下文描述的带外设置系统与上文描述的BIOS选项的带外设置方法可相互对应参照。
参见图2,图2为本申请实施例所提供的一种BIOS选项的带外设置系统结构示意图,本申请还提供一种BIOS选项的带外设置系统,包括:
轮询模块,用于当检测到带外修改指令时,轮询所有BIOS选项;
匹配模块,用于在结构体数组接口中通过每个所述BIOS选项的特定字符串标识在json文件中匹配设定值;
设定模块,用于若所述设定值存在,将所述带外修改指令对应的设定值更新至非易失性随机访问存储器。
基于上述实施例,作为优选的实施例,还包括:
结构体创建模块,用于创建结构体数组接口并关联至所述BIOS,并将联动主选项、被联动子选项以及所述联动主选项指向关联子选项设定值的结构体指针写入所述结构体数组接口;其中,所述被联动子选项包含所述特定字符串标识,所述联动主选项包含联动选项的设置标记位。
基于上述实施例,作为优选的实施例,还包括:
选项联动配置模块,用于将所述带外修改指令对应的设定值写入内存,并将存在所述设定值的当前轮询选项的特定字符串标识和选项值写入选项联动函数;所述选项联动函数用于通过所述结构体指针配置所述当前轮询选项对应的所有被联动子选项。
基于上述实施例,作为优选的实施例,还包括:
选项联动模块,用于判断所述当前轮询选项是否为轮询主选项;若是,轮询所有BIOS选项并确定所述轮询主选项对应的被联动子选项;根据所述当前轮询选项的选项值从所述结构体数组接口中确定被联动子选项对应的子选项设定值;根据所述子选项设定值对所述被联动子选项进行赋值;将作为轮询主选项的当前轮询选项的标记位置起。
基于上述实施例,作为优选的实施例,还包括:
联动处理模块,用于若当前联动选项的设置标记位置起,确定设置标记位置起的目标联动主选项;通过所述特定字符串标识判断当前轮询选项是否为所述目标联动主选项对应的被联动子选项;若是,停止对所述目标联动主选项对应的被联动子选项进行赋值。
基于上述实施例,作为优选的实施例,还包括:
设定值修改模块,用于通过所述联动选项包含的钩子函数设定修改所述带外修改指令对应的设定值。
基于上述实施例,作为优选的实施例,还包括:
修改指令检测模块,用于当检测到带外修改选项值不为0时,生成所述带外修改指令。
本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请还提供了一种服务器,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然所述服务器还可以包括各种网络接口,电源等组件。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例提供的系统而言,由于其与实施例提供的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。