- 积分
- 5
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2021-10-27
- 精华
|
马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
我分析的是intel image格式的bios文件哈,不是uefi版本的。
事情起源于我2011年的老主板,想着换上e3v2处理器,无赖bios空间只有4MB,没法刷官方最新的bios固件,于是自行网上搜索,发现了一个4MB的版本,刷入后能亮机,但没有网络,说是要添加gbe region,才能解决。网上搜索了一遍,也没找到教程,于是自行分析研究,最终添加成功。补上这篇帖子,希望后面的人员少走弯路。
bios完成的数据结构可以参见intel的桥片手册io-controller-hub-10-family-datasheet.pdf:22.2 Flash Descriptor Registers,里面有完整的数据结构描述。原文档800+页,英文版的,在此我提取了一个简化的版本,14页,需要的可以参考,只提取没翻译哦。
完整的bios数据结构分为5个region:desc、bios、me、gbe、pdr。desc占用0x1000字节长度,gbe占用0x2000字节长度,其他region长度不是固定的。desc部分
对bios的其他部分数据段进行了描述。
desc关键数据结构说明如下:
00000000 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
00000010 5A A5 F0 0F 03 00 04 03 06 02 10 12 20 01 21 00 Z........... .!.
00000020 25 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF %...............
00000030 23 00 90 64 00 00 00 00 00 00 00 00 FF FF FF FF #..d............
00000040 00 00 00 00 80 01 FF 03 03 00 7F 01 01 00 02 00 ................
00000050 FF 1F 00 00 FF FF FF FF FF FF FF FF FF FF FF FF ................
00000060 00 00 FF FF 00 00 FF FF 18 01 FF FF FF FF FF FF
0x0-0x0f:reserve 保留;
0x10-0x13: signature 0FF0A55Ah identifies a valid flash descriptor
0x14-0x2F: descriptor map
0x14-0x17:FLMAP0,03=指定component的描述段地址为0x3<<4;
00=1 Component,也就是一片flash;
04=指定region描述段的偏移地址为:0x04<<4;
03=指定总的Regions的数量为3,从0开始计数,3表示bios中包含desc、bios、me、gbe region
(0->desc,1->bios, 2->me, 3->gbe, 4->pdr)
0x18-0x1B: FLMAP1, 06=define Flash Master location
02=master的数量,从0开始计数;
10=ICH Strap Base Address
12=ICH Strap length
0x1C-0x1F: FLMAP2, 20=MCH Strap Base Address
01=MCH Strap length
0x40-0x53: 32bit一组,指定region占用的空间范围,0-12bit指定base、16-28bit指定limite
0x44-0x47:80 01 FF 03 就是指定bios占用的空间,从0x0180_000->0x03FF_FFF;
0x48-0x4B:03 00 7F 01 就是指定me占用的空间, 从 0x0003_000->0x017F_FFF;
0x4C-0x4F:01 00 02 00 就是指定gbe占用的空间,从 0x0001_000->0x0002_FFF;
0x50-0x53:FF 1F 00 00 就是指定PDR(platform date record)占用的空间,因为base > limite ,表示无效。一般不使用,刷机是经常会看到提示:no valid pdr region,就是因为这儿没启用;
0x60-0x6B: Flash Master Permissions,指定bios、me、gbe region的访问权限;
00 00 FF FF 00 00 FF FF 18 01 FF FF(0000表示cpu、me; 0118表示GBE; 0xFFFF表示所有权限,在dos、win下通过fpt刷写需要)
00 00 1B 1A 00 00 0D 0C 18 01 08 08(默认值,只有部分权限)
有上述数据结构,添加或更改各个region的方法就清楚了:
如果只是修改各个region的位置和大小,那就直接改base和limit的值,然后拼接时把相关数据段放到对应的位置就可以了;
如果是新增加一个gbe region,那就需要修改regions的数量,修改base、limit, 然后把数据放到对应的位置;
如果想要后续刷机方便,那就直接改权限位即可;
bios修改注意事项:
1、ICH Strap、MCH Strap跟板卡强相关,不同板卡不通用,如果升级需要保留原板卡的配置;
2、me有版本,需要跟特定芯片组配合使用,不能乱搭配;
3、南桥上的集成网卡,需要gbe region进行配置,否则不能使用。刷bios后,如果系统找不到网卡设备,很大可能就是跟gbe 、strap有关。
4、板载网卡不需要gbe region哈
5、desc中还有bios使用芯片的容量、速率、ID等参数的描述,如果换芯片类型需要注意修改;
|
|