IT教程 ·

【UEFI】— 探讨BIOS NvRam空间的位置以及大小

依据国际惯例--先上问题:
1. 什么是NvRam空间,内里存储了什么数据
2. 怎样找到NvRam空间在BIOS-bin文件中的位置

NvRam空间的学名为: Non-Volatile Ram即非易失性存储空间,简朴来讲就是一段掉电也不丧失数据的存储空间。这类存储介质有许多,像多半的E2prom,Rom都是能够作为该类空间的介质。而细致到BIOS的话,多半情况下能够明白为在BIOS-Rom中挖了一段空间,用来作为我们愿望掉电也不丧失数据的存储空间。

问题1:NvRam空间都存储了什么数据?
NvRam在BIOS现实用处中实在分为几类,个中最经常应用的应当是就是BiosSetup设置界面下你能看到的一大堆设置接口了吧。BIOS-Setup下一切的数据变量终究在代码中显现的模样应当是如许:

【UEFI】--- 探讨BIOS NvRam空间的位置以及大小 IT教程 第1张

固然实在另有许多,没有完整显示出来,而经由历程末了的SYSTEM_CONFIGURATION这个构造体变量名应当也能够看到,一切的变量终究都被封装进了一个很大的构造体变量中。终究这个构造体变量会被存在NvRam空间中,用户每次在BIOS Setup界面下的操纵实在终究都是修正这个变量而且末了保留在Rom中NvRam那段空间中。

 

问题2:NvRam空间在BIOS-Bin文件的哪一个位置?

提出这个缘由的目的是因为有一个需求是请求BMC在更新BIOS时要做到保留用户设置数据,那末计划就是BMC在更新BIOS的数据时,先从BIOS中把NvRam那段空间的数据读出来做备份,然后刷掉全部ROM空间中的数据,再把新版本得BIOS数据写入ROM存储介质中,末了再把预先备份的数据依据BIOS Layout规划写入指定的位置即可。基于如许的一个目的,因而BIOS须要供应NvRam空间的规划。也算是折腾了一段时间吧,大抵的体式格局以下:

1)在layout规划文件中找到全部工程文件的团体规划,平常是在*.fdf文件中,比方我用的insyde的工程能够看到project.fdf文件能够看到每一个地区的Size和Offset公式盘算定义。标红框的时NVRam地区的SIZE,下面也有每一个细致的NvRam地区的Offset盘算,没截出来。依据这里的定义应当能终究能够盘算出来。

【UEFI】--- 探讨BIOS NvRam空间的位置以及大小 IT教程 第2张

 

扩展问题思索于剖析:

问题3:怎样疾速盘算频移地点?

在盘算这一大堆数据的时刻,请肯定应用python/shell剧本,不然手算累死了,学会应用的你盘算机妙技,进修是为了用,学软件就是为了让事变变得更简朴。

 

问题4:为什么查阅终究的16M的Bin文件找不到希冀的数据?

依据我终究盘算出来的值为0x5b0000,我在编译出来的16M的BIOS-Bin文件找不到抱负的值,满是0xff。

【UEFI】--- 探讨BIOS NvRam空间的位置以及大小 IT教程 第3张

缘由:因为当前的BIOS是已将ME和最原始的BIOS-bin文件打包进一同后的文件,因而这里的0x005b0000现实基础就不是我们原始BIOS的数据。原始BIOS的文档应当是*.fd文件,依据我的工程可找到GRANGEVILLE.fd也就是GrangeVille这个平台的BIOS文件,经由历程二进制文档可检察效果以下图:GRANGEVILLE.fd这个BIOS源文件的大小是8M,这个文件不管大小,照样layout都是由是源码中*.fdf文件指定的,细致可查阅该文件。

【UEFI】--- 探讨BIOS NvRam空间的位置以及大小 IT教程 第4张

 

问题5:为什么在GRANGEVILLE.fd找到了目的数据,但现实数据的数目却少的不幸?

这个处所不能不牵扯到BIOS的代码实行,虽然BIOS已定义了大批的NvRam的Variable数据来举行数据保留,然则这是第一次编译的效果,现实的数据应当是BIOS代码在实行时,读取后再写入到这个位置的。而且因为Variable现实存储是以Variable的体式格局来Get或许Set,所以以至大概涌现同一个ROM不做任何改动过,就在机械上做两次启动,然后用烧录器把BIOS-Bin文件读取出来,NvRam空间的数据都是不一样的。细致缘由就要跟BIOS经由历程GUID来Get或许Set变量这类体式格局有关,有时间再把这个给提高下。

 

问题6:包过ME的Bin文件怎样肯定Offset,以及ME是依据什么划定规矩来举行打包的?

刚已说过,现实BIOS的程序编译出来的文档大小是8M,然则我们经由历程ME东西打包后,一般能够将BIOS扩展到16M或许32M,那末是怎样扩展的呢?我以16M的BIOS.bin组成引见,以下图:32M的话,中心OXFF添补部份随之扩展。

【UEFI】--- 探讨BIOS NvRam空间的位置以及大小 IT教程 第5张

 

问题7:借助东西举行剖析

我也是厥后才晓得能够用东西直接剖析BIOS终究Bin的组成,以此来肯定。不过总归是要晓得道理明白的才深入,下面简朴引见下东西,来和我们上述剖析历程举行考证.应用东西为UEFITool.exe东西

【UEFI】--- 探讨BIOS NvRam空间的位置以及大小 IT教程 第6张

【UEFI】--- 探讨BIOS NvRam空间的位置以及大小 IT教程 第7张

如上图,我们能够在该东西下,BIOS-Region中NVRam空间的范例,以及细致信息。Offset为0x5b0000,Full Size为0x30000。刚开始推断NvRam空间是,我认为唯一下面标红的一个,所以对比了半天bin文件数据,老是对不上。厥后才意想到下图四个都是NvRam的规划,只是用处差别,下面四个数据的Size相加可得也是0x30000,和东西恰好对上。

【UEFI】--- 探讨BIOS NvRam空间的位置以及大小 IT教程 第8张

 

至此,将此次剖析中所碰到的一切问题,均剖析终了。若有毛病的地方,迎接随时联络我指出。

也请随时关注我的民众号:像蚊子一样飞行。

一同讨论,一同提高!感谢!

 

参与评论