资源描述:
《BIOS-CPU微码深度解析.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、cpu微命令(CPUMicroCode)在十多年前的Pentium时代,INTEL曾经发布过有缺陷的CPU,因为浮点运算表边界上有几个数据错误,导致在某些应用会出现错误,这个错误概率很小,出错几率小于千万分之一,但在还是被捅出来了.INTEL为此召回CPU.从PentiumPro起,INTEL决定给CPU留出一个补丁接口,当CPU内部有缺陷的时候,通过加载微码(Microcode),可以修复CPU的部分缺陷.INTEL说,他们只测试过的CPU都是加载了微码的,如果没有加载微码,INTEL不保证会出现什么问题.现在的CPU有一个CPUID,通
2、过执行CPUID指令,可以知道当前CPU的版本和Stepping.根据这个信息,再给CPU打相应的补丁.下图就是CPUID=06D2,Rev.A2何时给CPU打补丁?在给CPU初始化的时候,就需要把INTEL提供的微码写进CPU去,因此,加载CPU微码就是系统BIOS的任务.如果系统的CPU是可更换的,那么其微码也需要更换.因此,在BIOS里,一般要包进若干个ID的CPU微码,以便工厂安排不同的SKU出货.如果BIOS发布是在CPU发布之前,那么BIOS里很可能就没有包进最新的微码,这个系统要使用新CPU的时候,CPU微码是无法加载的.另外
3、,BIOSROM容量有限,一个微码补丁最小有2K,如果平台兼容的CPU很多,则微码数量是十分巨大的,台式机某些主板可能兼容20多个CPU版本,那么微码的体积很大,BIOS里根本包不下这么多东西,于是,厂商不得不缩水,去掉一些不常用的微码.这些不常用的微码一般都是早期的CPU,如DOTHAN早期的ASTEPPING就很可能没有对应的微码包进你的本本中去.不打补丁会有什么问题?INTEL说他们没测过不打补丁的CPU,也就不知道会出什么问题.呵呵,这显然,他们不想说太多技术细节而已.以俺的经验,如果不打补丁,99.99%的时候,用户是感觉不到的,
4、除非问题特别突出.只是俺遇到过几个明显的例子,为此出了几身汗.有几个案例:1,某PrescottCPU,在台式机上发热量特别大,超出DesignPoint,后来发现没加载微码,加上微码就正常了;2,某PentiumDCPU,进WINDOWSXP会蓝屏,以安全模式进去后,安装一个SP2补丁,就正常了.后来查出,也是微码没加载;3,某PentiumM架构CPU,在使用CPU内部TSC时,发现测出的CPU内部频率高出实现的4倍,如2GHzCPU测出却有8GHz,后查,也是没加载微码造成的异常.此类案例很多,特别是Core架构CPU,不但微码必须加
5、载,而且要求尽早加载,否则,连BIOS都跑不完,系统就挂了.但是INTEL但至今没有任何官方对每个CPU微码版本进行描述的文件.怎么检查CPU微码是否加载?加载微码后,在CPU的MSR(机器特定寄存器)里可以读出版本号.INTELIA-32编程手册上给出标准检查方法:MOVECX,008bhXOREAX,EAXXOREDX,EDXWRMSR;向MSR8BH写0,清除MSR中的信息MOVEAX,0001CPUID;读CPUID,让CPU查看微码版本,并把微码版本送到MSR8B中MOVECX,008bhRDMSR;读出当前CPU微码版本执行上面
6、的代码后,如果EDX的值为0,则说明你的CPU微码是没有没加载的,你的CPU运行在有缺陷的状态.如果不为0,则显示的是当前微码版本号以上代码可以在DOS环境下,用DEBUG32调试界面执行.