找回密码
 注册
快捷导航
查看: 20195|回复: 120

[CPU] 【原创】说说CPU微码 —— 升级CPU, 给CPU打补丁了么?

[复制链接] |自动提醒
阅读字号:

2095

回帖

15

积分

3757

资产值

高级会员 Rank: 2Rank: 2

注册时间
2004-2-10
发表于 2007-1-3 12:40:01| 字数 2,219| - 中国–广东–深圳 电信 | 显示全部楼层 |阅读模式

CPU也要打补丁

在十多年前的Pentium时代, INTEL曾经发布过有缺陷的CPU, 因为浮点运算表边界上有几个数据错误, 导致在某些应用会出现错误, 这个错误概率很小, 出错几率小于千万分之一, 但在还是被捅出来了. INTEL为此召回CPU.

从Pentium Pro起, INTEL决定给CPU留出一个补丁接口, 当CPU内部有缺陷的时候, 通过加载微码(Microcode), 可以修复CPU的部分缺陷.

INTEL说, 他们只测试过的CPU都是加载了微码的, 如果没有加载微码, INTEL不保证会出现什么问题.

现在的CPU有一个CPUID, 通过执行CPUID指令, 可以知道当前CPU的版本和Stepping. 根据这个信息, 再给CPU打相应的补丁.

下图就是CPUID=06D2, Rev.A2


何时给CPU打补丁?

在给CPU初始化的时候, 就需要把INTEL提供的微码写进CPU去, 因此, 加载CPU微码就是系统BIOS的任务.

如果系统的CPU是可更换的, 那么其微码也需要更换. 因此, 在BIOD里, 一般要包进若干个ID的CPU微码, 以便工厂安排不同的SKU出货. 如果BIOS发布是在CPU发布之前, 那么BIOS里很可能就没有包进最新的微码, 这个系统要使用新CPU的时候, CPU微码是无法加载的.

另外, BIOS ROM容量有限, 一个微码补丁最小有2K, 如果平台兼容的CPU很多, 则微码数量是十分巨大的, 台式机某些主板可能兼容20多个CPU版本, 那么微码的体积很大, BIOS里根本包不下这么多东西, 于是, 厂商不得不缩水, 去掉一些不常用的微码. 这些不常用的微码一般都是早期的CPU, 如DOTHAN早期的A STEPPING就很可能没有对应的微码包进你的本本中去.

不打补丁会有什么问题?

INTEL说他们没测过不打补丁的CPU, 也就不知道会出什么问题. 呵呵, 这显然, 他们不想说太多技术细节而已. 以俺的经验, 如果不打补丁, 99.99%的时候, 用户是感觉不到的, 除非问题特别突出. 只是俺遇到过几个明显的例子, 为此出了几身汗. 有几个案例:

1, 某Prescott CPU, 在台式机上发热量特别大, 超出Design Point, 后来发现没加载微码, 加上微码就正常了;
2, 某Pentium D CPU, 进WINDOWS XP会蓝屏, 以安全模式进去后, 安装一个SP2补丁, 就正常了. 后来查出, 也是微码没加载;
3, 某Pentium M架构CPU, 在使用CPU内部TSC时, 发现测出的CPU内部频率高出实现的4倍, 如2GHz CPU测出却有8GHz, 后查, 也是没加载微码造成的异常.

此类案例很多, 特别是Core架构CPU, 不但微码必须加载, 而且要求尽早加载, 否则, 连BIOS都跑不完, 系统就挂了. 但是INTEL但至今没有任何官方对每个CPU微码版本进行描述的文件.

怎么检查CPU微码是否加载?

加载微码后, 在CPU的MSR(机器特定寄存器)里可以读出版本号. INTEL IA-32编程手册上给出标准检查方法:


  1. MOV ECX, 008bh
  2. XOR EAX, EAX
  3. XOR EDX, EDX
  4. WRMSR                          ;向MSR 8BH写0, 清除MSR中的信息

  5. MOV EAX, 0001
  6. CPUID                             ;读CPUID, 让CPU查看微码版本, 并把微码版本送到MSR 8B中

  7. MOV ECX, 008bh
  8. RDMSR                           ;读出当前CPU微码版本
复制代码


执行上面的代码后, 如果EDX的值为0, 则说明你的CPU微码是没有没加载的, 你的CPU运行在有缺陷的状态. 如果不为0, 则显示的是当前微码版本号

以上代码可以在DOS环境下, 用DEBUG32调试界面执行.

我很郁闷……

我有一个杂牌的本本, 上的是Dothan CPU, 某一天, 俺升级CPU, 却发现发热水平异常, 于是检查微码加载情况, 果然, BIOS里没有这种CPU版本的微码

换回原来的原厂CPU继续一测, 竟然也没有加载微码

后来换了Banias CPU才测到CPU微码加载上了. 也就是说, 厂商在升级CPU的时候, 居然没有升级BIOS, 这就是某些小品牌电脑厂商的水平, 郁闷

你的CPU升了么?

很多同学把低配的T4X本本换了CPU, 不知道这些同学用得怎么样, 呵呵, 你检查过你的CPU微码么? BIOS有升级支持么?



升级/检查微码的方法, 在资料

Intel® 64 and IA-32 Architectures
Software Developer’s Manual
Volume 3A:
System Programming Guide, Part 1

里第9章有详细说明, 这份资料是公开的, 大家有兴趣的话, 可以到INTEL网站上下载, 资料编码是

Order Number: 253668-022US
November 2006

只要搜索253668就可以了.

俺摘的部分代码来自该手册, 见附图. 在BIOS源码中, 也是这样的代码检查微码是否加载的, 这段代码也写在INTEL CPU BIOS Porting Guide中.



按下图, 使用DEBUG32工具调试就可以了, 执行完图中的代码, 查看DX值, 不为0就OK了. DEBUG32工具请自行在后面的跟贴里下载吧. 注意, 一定要在纯DOS下执行这些代码, AP访问MSR是OS严重禁止的.


下面找了台PIII的移动平台主板, 实物拍出来请大家参考, 执行到最后, 看到DX的值就是当前补丁的值, 下图中补丁版本是0E.



第64楼找出俺的本本的BIOS中的问题, 修改BIOS2进制代码文件, 成功加载了微码, 图片在62楼

[ 本帖最后由 茄子 于 2007-1-7 01:54 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1技术分 +2 收起 理由
yansy + 2 鼓励原创好文

查看全部评分


性价比高的东西都是破东西

8万

回帖

528

积分

2万

资产值

天下无敌I Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

注册时间
2006-7-5
金牌荣誉勋章(注册20年以上会员)
发表于 2007-1-3 12:56:14| 字数 6| - 中国–浙江–杭州 电信 | 显示全部楼层
说详细一点啊
感谢维森特,另外我的签名死哪儿去了?
回复 支持 反对

使用道具 举报

5443

回帖

0

积分

1580

资产值

入门会员 Rank: 1

注册时间
2002-11-5
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2007-1-3 12:57:08| 字数 4| - 中国–浙江–杭州 电信 | 显示全部楼层
怎么升呢
¤╭⌒╮ ╭⌒╮
╱?██◣╭
|田︱田田| ╰
╬╬╬╬╬╬
T61P 6459CTO
回复 支持 反对

使用道具 举报

5009

回帖

2

积分

1524

资产值

初级会员 Rank: 1

注册时间
2005-9-15
发表于 2007-1-3 12:59:00| 字数 11| - Reserved | 显示全部楼层
没……没下文了?……?
T43p 2.13/2G/V3200/5k160/WD5000BPVT/2878/Win7 Pro
X40 1.4/1.25G/32G SSD/5400.3/Ultrabase/Win7 Pro
回复 支持 反对

使用道具 举报

364

回帖

0

积分

411

资产值

入门会员 Rank: 1

注册时间
2006-5-8
发表于 2007-1-3 13:06:06| 字数 12| - 美国 | 显示全部楼层
有头无尾,详细点,专业点
我为小黑狂<br />
x24 1.13GHz 384M 80G WIFI
回复 支持 反对

使用道具 举报

4707

回帖

78

积分

1万

资产值

至尊会员I Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2004-3-28
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2007-1-3 13:11:12| 字数 20| - 中国–江苏–南通 电信 | 显示全部楼层
hehe ,楼上的几位心急了啊!再回来看看
T420
回复 支持 反对

使用道具 举报

1万

回帖

106

积分

2967

资产值

至尊会员I Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2005-4-26
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)银牌荣誉勋章(注册10年以上会员)铜牌荣誉勋章(注册8年以上会员)
发表于 2007-1-3 13:25:28| 字数 8| - 中国–湖北–武汉 电信 | 显示全部楼层
路过,学习一下~
回复 支持 反对

使用道具 举报

364

回帖

0

积分

411

资产值

入门会员 Rank: 1

注册时间
2006-5-8
发表于 2007-1-3 13:31:04| 字数 17| - 美国 | 显示全部楼层
自行升级cpu的xd们好好学习了!
我为小黑狂<br />
x24 1.13GHz 384M 80G WIFI
回复 支持 反对

使用道具 举报

1173

回帖

1

积分

1735

资产值

初级会员 Rank: 1

注册时间
2004-8-7
发表于 2007-1-3 13:31:22| 字数 18| - 中国–四川–成都 电信 | 显示全部楼层
有头无尾,把DEBUG得参数写清楚嘛
QQ:2277165 旺旺:zjtzh
T61 t7300/250G/3G/FX140M 128M/1G询盘,1400X1050屏,D刻,
回复 支持 反对

使用道具 举报

2095

回帖

15

积分

3757

资产值

高级会员 Rank: 2Rank: 2

注册时间
2004-2-10
 楼主| 发表于 2007-1-3 13:35:24| 字数 39| - 中国–广东–深圳 电信 | 显示全部楼层
楼上的同学, 用DEBUG是不能调试的, 因为32BIT代码, 必须用DEBUG32

性价比高的东西都是破东西

回复 支持 反对

使用道具 举报

917

回帖

0

积分

1659

资产值

入门会员 Rank: 1

注册时间
2005-2-6
发表于 2007-1-3 13:38:03| 字数 11| - 中国–上海–上海 电信/Intel中国北京或上海研发中心 | 显示全部楼层
cpu升级? 骗人的巴戏
回复 支持 反对

使用道具 举报

2095

回帖

15

积分

3757

资产值

高级会员 Rank: 2Rank: 2

注册时间
2004-2-10
 楼主| 发表于 2007-1-3 13:43:23| 字数 15| - 中国–广东–深圳 电信 | 显示全部楼层
在DOS下, 用DEBUG32吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

性价比高的东西都是破东西

回复 支持 反对

使用道具 举报

3861

回帖

0

积分

4684

资产值

入门会员 Rank: 1

注册时间
2004-12-19
发表于 2007-1-3 13:59:19| 字数 6| - 中国–甘肃–兰州–城关区 电信 | 显示全部楼层
菜鸟止步 ^^
回复 支持 反对

使用道具 举报

2095

回帖

15

积分

3757

资产值

高级会员 Rank: 2Rank: 2

注册时间
2004-2-10
 楼主| 发表于 2007-1-3 14:09:40| 字数 9| - 中国–广东–深圳 电信 | 显示全部楼层
debug32工具

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

性价比高的东西都是破东西

回复 支持 反对

使用道具 举报

6469

回帖

1

积分

802

资产值

初级会员 Rank: 1

注册时间
2002-9-27
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2007-1-3 14:15:42| 字数 33| - 中国–广东–深圳 电信 | 显示全部楼层
升级BIOS到最新版本就行了,如果没法支持CPU升级也不会成功的。
T61: Core 2 Duo 2.5GHz/2G/500G/1400x1050/ABGN/BT
T440P: I7 2.4GHz/8G/250G SSD/1920x1080/BGN/BT
回复 支持 反对

使用道具 举报

2095

回帖

15

积分

3757

资产值

高级会员 Rank: 2Rank: 2

注册时间
2004-2-10
 楼主| 发表于 2007-1-3 14:20:38| 字数 134| - 中国–广东–深圳 电信 | 显示全部楼层
QUOTE:
原帖由 fasthorse 于 2007-1-3 14:15 发表
升级BIOS到最新版本就行了,如果没法支持CPU升级也不会成功的。


这是臆推? 还是官方声明?

讨论技术就用数据说话, 还没听说因为BIOS中不包对应微码就不能用对应的CPU的, 只是某些机器会报警说微码没加载

性价比高的东西都是破东西

回复 支持 反对

使用道具 举报

101

回帖

3

积分

1212

资产值

中级会员 Rank: 2Rank: 2

注册时间
2006-12-19
发表于 2007-1-3 14:29:49| 字数 7| - 中国–广东–东莞 电信 | 显示全部楼层
升级bios吧
HP840 G8 I5 1145G7/32G/1T/1080
T480S I5 8350U/8G+16G/1TB/2K
回复 支持 反对

使用道具 举报

6056

回帖

150

积分

1万

资产值

至尊会员II Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2003-4-28
铜牌荣誉勋章(注册8年以上会员)
发表于 2007-1-3 15:05:06| 字数 35| - 中国–上海–上海–徐汇区 电信/长宁区电信 | 显示全部楼层
没说详细,怎么看返回的结果?
这里会用debug的xd估计不多,照顾一下
回复 支持 反对

使用道具 举报

141

回帖

0

积分

131

资产值

入门会员 Rank: 1

注册时间
2006-12-3
发表于 2007-1-3 15:28:57| 字数 14| - 中国–湖北–武汉–洪山区 电信 | 显示全部楼层
好帖子,就是不知道该怎么做。
回复 支持 反对

使用道具 举报

1万

回帖

6

积分

2万

资产值

中级会员 Rank: 2Rank: 2

注册时间
2003-10-5
铜牌荣誉勋章(注册8年以上会员)
发表于 2007-1-3 16:03:58| 字数 6| - 中国–安徽–合肥 电信 | 显示全部楼层
又见楼主大作
A31没有p,P4M-2.4G,2048M,SXGA+,5k80 (80G+60G),pcpopDVD+RW(MSI),¥1 combo,Razer2100+IE3+MX500+3S,2631+1020 =USTC-0108=
回复 支持 反对

使用道具 举报

277

回帖

0

积分

106

资产值

入门会员 Rank: 1

注册时间
2006-4-30
发表于 2007-1-3 17:10:22| 字数 15| - 中国–浙江–杭州 电信 | 显示全部楼层
太深懊了点,不太懂,需要充电。
回复 支持 反对

使用道具 举报

1385

回帖

0

积分

260

资产值

入门会员 Rank: 1

注册时间
2003-6-1
铜牌荣誉勋章(注册8年以上会员)
发表于 2007-1-3 17:15:30| 字数 6| - 中国–江苏–南京 电信 | 显示全部楼层
吊大家的味口
600E/T22/X22/R52,treo650 穷人也用上迅驰了
回复 支持 反对

使用道具 举报

1334

回帖

0

积分

799

资产值

入门会员 Rank: 1

注册时间
2006-11-3
发表于 2007-1-3 17:38:50| 字数 8| - 中国–江苏–苏州 电信 | 显示全部楼层
先学着,等待下文
回复 支持 反对

使用道具 举报

4617

回帖

2

积分

1458

资产值

初级会员 Rank: 1

注册时间
2003-2-17
铜牌荣誉勋章(注册8年以上会员)
发表于 2007-1-3 17:46:07| 字数 27| - 澳大利亚 | 显示全部楼层
太厉害了。观摩学习,难得一见的好贴啊。

估计至少是2分的
回复 支持 反对

使用道具 举报

5万

回帖

349

积分

13万

资产值

至尊会员III Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2006-8-20
铜牌荣誉勋章(注册8年以上会员)月全勤勋章银牌荣誉勋章(注册10年以上会员)铜牌荣誉勋章(注册8年以上会员)
发表于 2007-1-3 18:33:18| 字数 4| - 中国–广东–深圳 电信 | 显示全部楼层
等待后续
T400 T9400 8G 256G wxga+
IdeapadYoga i5 3317U 4G 128G wxga+
iPad Pro(11 英寸)2021 256G
回复 支持 反对

使用道具 举报

2095

回帖

15

积分

3757

资产值

高级会员 Rank: 2Rank: 2

注册时间
2004-2-10
 楼主| 发表于 2007-1-3 20:13:34| 字数 72| - 中国–广东–深圳 电信 | 显示全部楼层
有点晕. 结果在上面说了啊, 执行g=100后, DEBUG32会自动显示当前寄存器状态, 如果DX为0, 则没有打上补丁, 如果不为0, 就是当前补丁的版本

性价比高的东西都是破东西

回复 支持 反对

使用道具 举报

2万

回帖

153

积分

1734

资产值

至尊会员II Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2005-9-28
发表于 2007-1-3 20:24:34| 字数 6| - 中国–广东–深圳–龙岗区 电信 | 显示全部楼层
有点看不懂。
回复 支持 反对

使用道具 举报

6056

回帖

150

积分

1万

资产值

至尊会员II Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2003-4-28
铜牌荣誉勋章(注册8年以上会员)
发表于 2007-1-3 20:30:04| 字数 145| - 中国–上海–上海–徐汇区 电信/长宁区电信 | 显示全部楼层
QUOTE:
原帖由 茄子 于 2007-1-3 20:13 发表
有点晕. 结果在上面说了啊, 执行g=100后, DEBUG32会自动显示当前寄存器状态, 如果DX为0, 则没有打上补丁, 如果不为0, 就是当前补丁的版本


执行g=100后直接退出,什么也没有显示

上面的图片为什么没有把g=100的执行结果也抓下来?
回复 支持 反对

使用道具 举报

2095

回帖

15

积分

3757

资产值

高级会员 Rank: 2Rank: 2

注册时间
2004-2-10
 楼主| 发表于 2007-1-3 20:58:23| 字数 204| - 中国–广东–深圳 电信 | 显示全部楼层
QUOTE:
原帖由 zealoghu 于 2007-1-3 20:30 发表


执行g=100后直接退出,什么也没有显示

上面的图片为什么没有把g=100的执行结果也抓下来?


上面抓图是因为没有执行, 呵呵, 如果执行结果就会跟你的一样, 直接退出了

因为访问MSR是要特权指令的, 在WINDOWS下不允许用DEBUG去访问MSR, 执行WRMSR/RDMSR都会引起OS保护.

正确有做法是在纯DOS下执行上述代码.

但那样的话, 抓不了图

性价比高的东西都是破东西

回复 支持 反对

使用道具 举报

2095

回帖

15

积分

3757

资产值

高级会员 Rank: 2Rank: 2

注册时间
2004-2-10
 楼主| 发表于 2007-1-3 21:13:27| 字数 64| - 中国–广东–深圳 电信 | 显示全部楼层
找了台PIII的, CPUID=0681, 用数码相机, 上了图在首贴, 供大家参考.

[ 本帖最后由 茄子 于 2007-1-3 21:15 编辑 ]

性价比高的东西都是破东西

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.5 © 2001-2023 Comsenz Inc

GMT+8, 2025-1-8 01:42 , Processed in 0.245463 second(s), 79 queries , Gzip On, OPcache On.

手机版|小黑屋|安卓客户端|iOS客户端|Archiver|备用网址1|备用网址2|在线留言|专门网

返回顶部