本发明专利技术提供一种实现Linux系统下擦写DMI数据的方法。该方法首先在Linux操作系统下构建虚拟8086模式运行的内存环境,然后使CPU及内存运行环境等跳入该虚拟8086模式,执行PnP调用例程以进行DMI数据的擦写,执行完PnP调用例程后返回Linux操作系统。本发明专利技术还提供一种实现Linux系统下擦写DMI数据的装置。本发明专利技术不需要安装DOS系统,在Linux操作系统下就可以直接执行PnP调用例程以实现DMI?MIFD中数据的擦写,因而,节省了时间与操作,并且利用本发明专利技术所提供的方法不会使计算机当机,因而更安全。
【技术实现步骤摘要】
本专利技术涉及一种数据擦写的方法及装置,尤其涉及一种DMI数据擦写的方法及装置。
技术介绍
DMI (Desktop Management interface,桌面管理接口 )是帮助收集计算机系统 信息的管理系统,用来保存计算机系统自身及外围的相关数据,这些数据包括主板序列号 (SerialNumber),主办生产厂商(Manufacture),计算机系统每次引导、启动、关闭时硬件的 故障信息(Event Log)等等。 DMI通常将上述数据保存在BIOS(Basic Input Output System,基本输入输 出系统)中 一 个4KB大小的数据区域中,这 一 数据区域通常被称为MIFD (Management InformationFormat Database,管理信息格式数据库)中。 访问匿I MIFD中数据的方式有两种。第 一 种方式是基于列表的方法 (Table-basedMethod),第二种方式是通过即插即用的功能接口 (Plug-and-Play function interface)。其中,第一种方式只提供查看MIFD数据的功能,并不能擦写MIFD中的数据。 第二种方式通过PnP (Plug-and-Play,即插即用)调用例程(Calling Convention)可以擦 写MIFD数据。然而,PnP调用例程只能在实模式(Real-mode)与16位保护模式(16-bit protected mode)系统下可用。DOS系统是16位实模式,可以直接调用PnP调用例程。DOS 系统下擦写DMMIFD数据就是通过第二种方式实现的。 然而,Linux系统是32位保护模式(32-bit protected mode),其不能直接调用 PnP调用例程。如上所述,主板序列号(Serial Number)、主板生产厂商(Manufacture)、计 算机系统每次引导、启动、关闭时硬件的故障信息(Event Log)都是匿I MIFD中的数据。以 下,分别以清除主板Event Log与烧写主板的序列号为例说明Linux系统下擦写匿I MIFD 数据的方法。 主板Event Log记载了系统每次引导、启动、关闭时的硬件故障信息,通过查看此 记录即可知道异常情况的原因及时间等信息,为解决该异常问题提供了依据。然而,Event Log的存储区域有限,当存储区域存满了之后,系统进行引导、启动等操作时就会报出错信 息,要求清除以前的Event Log。此外,当主板出厂之前,制造商也会清除Event Log。传 统的清除Event Log的方法有一是进入BIOS页面执行BIOS厂商提供的Configuration/ SetupUtility工具清除Event Log ;二是安装DOS系统,在DOS系统下直接调用PnP调用例 程来清除Event Log。 生产厂商在制作主板过程中要烧写主板序列号。目前烧写主板序列号的方法也是 通过安装DOS系统,在DOS系统下直接调用PnP调用例程来执行烧写的动作。 上述对匿I MIFD数据的清除或者烧写要么需要进入BIOS界面,要么需要另外的 安装D0S系统,无疑都是非常麻烦的。此外,由于DOS系统是一种单线程的操作系统,因此, 在DOS系统下进行烧写动作,如果被烧写的数据错误,执行烧写动作后,经常会出现当机现4象。
技术实现思路
鉴于以上内容,有必要提出一种实现Linux系统下擦写DMI数据的方法,其可以在Linux操作系统下调用PnP调用例程以实现匿I MIFD中数据的擦写。 此外,还有必要提出一种实现Linux系统下擦写DMI数据的装置,其可以在Li皿x操作系统下调用PnP调用例程以实现匿I MIFD中数据的擦写。 —种实现Linux系统下擦写DMI数据的方法。该方法包括创建一个新进程;映射BIOS的中断向量表及BIOS数据到该进程底部的一段空间;在上述空间内选择一段小于该空间的子空间,作为虚拟8086模式的系统堆栈空间,并将该系统堆栈空间的地址赋给该进程的上下文;从BIOS的物理地址中通过字符串比对的方法寻找一个PnP标签,以在紧挨着该PnP标签的一个数据结构中找到PnP调用例程的入口点;设置10操作的允许权限,以使PnP调用例程能够进行输入/输出操作;接收16位参数,将该16位参数转换为32位,并将该参数存储到上述的系统堆栈空间;设置虚拟8086的运行环境,并将该运行环境赋给该进程的上下文;设置信号阻塞,以防止其他进程的信号打断该进程向虚拟8086模式跳转的操作;及利用Li皿x系统内核所提供的虚拟8086系统调用函数使该进程进入到虚拟8086模式,并执行PnP调用例程以从上述系统堆栈空间中读出所述参数,并根据该参数对DMI数据进行擦写操作。 —种实现Li皿x系统下擦写DMI数据的装置。该装置包括进程创建模块,用于创建一个新进程;虚拟8086内存环境构造模块,用于映射BIOS的中断向量表及BIOS数据到上述进程底部的一段空间;堆栈空间构建模块,用于在该空间内选择一段小于该空间的子空间作为虚拟8086模式的系统堆栈空间,并将该系统堆栈空间的地址赋给该进程的上下文;入口点寻找模块,用于从BIOS的物理地址中通过字符串比对的方法寻找一个PnP标签,以在紧挨着该PnP标签的一个数据结构中找到PnP调用例程的入口点;权限设置模块,用于设置10操作的允许权限,以使PnP调用例程能够进行输入/输出操作;参数存储模块,用于接收16位参数,将该16位参数转换为32位,并将该参数存储到上述的系统堆栈空间;运行环境设置模块,用于设置虚拟8086的运行环境,并将该运行环境赋给该进程的上下文;信号阻塞设置模块,用于设置信号阻塞,以防止其他进程的信号打断该进程向虚拟8086模式跳转的操作;及函数调用模块,用于利用Li皿x系统内核所提供的虚拟8086系统调用函数使该进程进入虚拟8086模式,并执行PnP调用例程以从上述系统堆栈空间中读出所述参数,并根据该参数对DMI数据进行擦写操作。 相较于现有技术,本专利技术所提供的实现Li皿x系统下擦写DMI数据的方法及装置可以在Li皿x操作系统下调用PnP调用例程以实现匿I MIFD中数据的擦写,节省了时间与操作,并且即使数据烧写错误也不会出现当机的现象。附图说明 图1是本专利技术实现Li皿x系统下擦写DMI数据的装置较佳实施例的结构图。 图2是本专利技术实现Li皿x系统下擦写DMI数据的方法较佳实施例的实施流程图。具体实施例方式参阅图1所示,是本专利技术实现Li皿x系统下擦写DMI数据的装置较佳实施例 的结构图。该装置可能是一台计算机1,或者是手机、服务器、PDA (Personal Digital Assistant,个人数字助理)等。本实施例中,该装置以计算机1为例。该计算机1安装有 Li皿x操作系统。众所周知,Li皿x是一种多任务的操作系统,用户可以同时运行多个应用 程序,创建多个进程。该计算机l还包括BIOS (Basic Input Output System,基本输入输出 系统)20。该BI0S20中包括一个MIFD 200 (Management Information Format Database, 管理信息格式数据库)。 该计算机1本文档来自技高网...
【技术保护点】
一种实现Linux系统下擦写DMI数据的方法,其特征在于,该方法包括:创建一个新进程;映射BIOS的中断向量表及BIOS数据到该进程底部的一段空间;在上述空间内选择一段小于该空间的子空间,作为虚拟8086模式的系统堆栈空间,并将该系统堆栈空间的地址赋给该进程的上下文;从BIOS的物理地址中通过字符串比对的方法寻找一个PnP标签,以在紧挨着该PnP标签的一个数据结构中找到PnP调用例程的入口点;设置I/O操作的允许权限,以使PnP调用例程能够进行输入/输出操作;接收16位参数,将该16位参数转换为32位,并将该参数存储到上述的系统堆栈空间;设置虚拟8086的运行环境,并将该运行环境赋给该进程的上下文;设置信号阻塞,以防止其他进程的信号打断该进程向虚拟8086模式跳转的操作;及利用Linux系统内核所提供的虚拟8086系统调用函数使该进程进入到虚拟8086模式,并执行PnP调用例程以从上述系统堆栈空间中读出所述参数,并根据该参数对DMI数据进行擦写操作。
【技术特征摘要】
一种实现Linux系统下擦写DMI数据的方法,其特征在于,该方法包括创建一个新进程;映射BIOS的中断向量表及BIOS数据到该进程底部的一段空间;在上述空间内选择一段小于该空间的子空间,作为虚拟8086模式的系统堆栈空间,并将该系统堆栈空间的地址赋给该进程的上下文;从BIOS的物理地址中通过字符串比对的方法寻找一个PnP标签,以在紧挨着该PnP标签的一个数据结构中找到PnP调用例程的入口点;设置I/O操作的允许权限,以使PnP调用例程能够进行输入/输出操作;接收16位参数,将该16位参数转换为32位,并将该参数存储到上述的系统堆栈空间;设置虚拟8086的运行环境,并将该运行环境赋给该进程的上下文;设置信号阻塞,以防止其他进程的信号打断该进程向虚拟8086模式跳转的操作;及利用Linux系统内核所提供的虚拟8086系统调用函数使该进程进入到虚拟8086模式,并执行PnP调用例程以从上述系统堆栈空间中读出所述参数,并根据该参数对DMI数据进行擦写操作。2. 如权利要求1所述的实现Li皿x系统下擦写DMI数据的方法,其特征在于,该方法还 包括判断CPU中的AX寄存器中的值是否为0 ;及当判断AX寄存器中的值不是0时,返回一个错误代码,以提示用户PnP调用例程没有 执行成功。3. 如权利要求1所述的实现Li皿x系统下擦写DMI数据的方法,其特征在于,所述的空 间为1MB及该空间的子空间为7KB。4. 如权利要求1所述的实现Li皿x系统下擦写DMI数据的方法,其特征在于,所述的 PnP调用例程的入口点包括16位实模式的段地址和偏移地址。5. 如权利要求1所述的实现Li皿x系统下擦写DMI数据的方法,其特征在于,所述的参 数包括PnP子功能号,要写入数据的数据类型及数据内容。6. 如权利要求1所述的实现Li皿x系统下擦写DMI数据的方法,其特征在于,所述虚 拟8086的运行环境包括系统级上下文、寄存器上下文...
【专利技术属性】
技术研发人员:童默颖,
申请(专利权)人:鸿富锦精密工业深圳有限公司,鸿海精密工业股份有限公司,
类型:发明
国别省市:94[中国|深圳]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。