13

跟我学改BIOS之一:BIOS里面都有什么?

 3 years ago
source link: https://zhuanlan.zhihu.com/p/308060539
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

人物和情节完全虚构,纯属加戏,请勿对号入座。前传在这里: 老狼:内存系列一:快速读懂内存条标签

单位的小张自从上次深入学习了内存条的知识后,对计算机兴趣大增,从此没事就摆弄电脑的各种配件,慢慢地小有名气起来,人称计算机“小能手”。小伙的“研究”越来越深入,拼拼凑凑已经不能满足他装那个啥的需求了。这一天突发奇想,想DIY一个高级BIOS:“如果我的BIOS能够直接支持NTFS分区,那不是可以省掉UEFI分区了吗?一定大受欢迎!”想着,脸上不禁放出光来,开始脑补推出高级BIOS,挣一大笔钱,从此迎娶白富美,走上人生巅峰的画面。画面很美,小张咽了咽口水,说干就干,立刻把桌子上的电脑立刻大卸八块。但看到躺倒在桌子上无辜的主板,不禁拔剑四顾心茫然,从哪里开始呢?

不出意外,小张又来找我了。看到他崇拜的目光和恭维的话语,刚到嘴边的"都折现吧"被我吞了回去。好吧,老规矩,请喝一杯咖啡,带你装那个啥带你飞!半杯咖啡下肚,我虽然对他在数个TB的硬盘中节省一百来MB的主意不以为然,但还是为他出谋划策起来。这件事完全可行,不需要BIOS的源代码。为达到目标,我们需要分成三个步骤:

1.理论准备 :知道BIOS文件的构成。

2.工具准备: 如何读取主板BIOS映像文件和烧录回去修改过的BIOS文件。

3.动手实操: 利用工具在BIOS中注入NTFS驱动。

今天时间有限,我们先从第一不开始讲起。

BIOS文件发展历史

我们从应用最广泛的Intel系主板来讲。回到The good old days,那还是2005年,BIOS文件里面就是BIOS,我们的小甜甜南桥还是ICH7。多么纯粹,多么自然!可惜好日子在ICH8后改变了,为了加入ME的支持,引入了一个叫做Descriptor mode的东西,从此SPI Flash里面不再只有BIOS文件,而变成了一个这样的结构:

Rjime2e.jpg!mobile 来源参考资料1

BIOS烧片文件里面挤进来ME Image、南桥网卡的驱动和一些平台数据,叫做BIOS文件就比较勉强了。在经过一段时间的混乱后,Intel平台的BIOS文件开始统一叫做IFWI。这个官方名字让不少同学感到困惑,IFWI第一个I难道是Intel的缩写吗?非也,IFWI是(Integrated Firmware Image)的缩写,毕竟这个Image里面不仅仅是BIOS一个固件,包括了很多各种固件,所以叫做 集成固件映像文件 更加准确。IFWI文件里面最初只有ME和网络驱动,后面随着南桥里面的固件越来越多,现在内容也慢慢丰富起来,包括了ISH、TB FW、TB PHY等等内容。

BIOS编译的时候,是先编译出符合UEFI标准的BIOS文件FD,再通过一个叫做Stitch的过程,将IFWI里面的各个模块“缝合”在一起。这其中,最重要的一步就是调用一个叫做FIT的工具,将神秘的Descriptor部分填写好。那么这个”描述表“里面有些什么东西呢?

后期IFWI在还引入了一个表,固定在(4GB - 40h)这个地址,叫做FIT table的结构,用来指向BIOS签名等等信息,它的Spec大家可以自行学习。

Descriptor的内容

Descriptor,故名思意,里面是一个描述表。现在有不少公开文档介绍里面的详细内容,如ApolloLake的文档:

Y3EZvaz.jpg!mobile

总的来说是一堆指针,指向IFWI中各个固件。他们的内容可以参考参考资料1,这里面比较有意思的是这个叫做SoftStrap的节。什么叫做SoftStrap呢?它对应以前的Hard Strap,也就是主板硬件连线的Strap,从前作死在主板上的Strap,现在可以通过软件配了,所以叫做Soft。里面有很多有趣的内容,包括南桥HSIO的分配就是从这个表里面得到信息:

mMz2Qnn.jpg!mobile

尾声

一杯咖啡的时间很快就到了,看着小张求知的表情,我知道,下一杯免费咖啡有指望了。我拍拍屁股,不带走一张账单,留下小张陷入深深的思考中。

欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK