文档库 最新最全的文档下载
当前位置:文档库 › BIOS工程师技术指导

BIOS工程师技术指导

B I O S工程师技术指导书

素质要求

1)强烈的责任心和敬业精神

项目的BIOS工作,与独立的软件工作有一个重要的区别就是,BIOS工作配合硬件、电源、Layout、测试、EMI、测试等部分紧密工作,如果由于BIOS的Delay,那么可能造成这个项目的严重Delay,这样不但拖住产品上市,而且拖住整个项目的资源,造成资源的严重浪费。所以,BIOS 工程师必须有十分强烈的时间观念,这种的较强的时间观念不仅仅表现在整个项目中间,更表现在一些小问题上,例如,如果某个问题能够一天解决的话,我们就不要拖到两天。

另外,BIOS工作和底层硬件、上层操作系统的结合非常紧密,很多时间,BIOS工程师需要解决各种BUG,而且这些BUG的直接原因可能很难寻找和界定,这要求BIOS工程师对于各种BUG,必须时时刻刻从BIOS出发,从系统和全局出发去分析每一个BUG的原因以及解决方法。同样,有的问题,可能从硬件和软件等角度都可能解决,BIOS工程师必须根据成本和品质综合衡量,寻找较优的解决方法。

而且,在实际项目开发中间,BIOS工程师必须具有主动精神。例如,为了解决某个问题,我们需要验证这个现象,那么我们需要一个机台去验证,这时,我们不能等待别人给我们送来机台,而应该主动去库房借用,或者就在测试室借用。在BIOS工程师工作过程中间,遇到问题等待,或者无能为力而等待是致命的。所以BIOS工程师必须具备寻求多种资源解决问题的能力,但是BIOS 必须对这些问题负责,具有主动精神。

2)开放的思想

BIOS工作,由于牵涉的内容广而深。所以,对于一个BIOS工程师不可能对于每一个部分都了解的十分清楚,所以,BIOS工程师对于所有问题认识都必须有一个开发的心态,虚心听取别人的意见,他山之石,可以攻玉。而且,对于不同的内容从不同角度出发可能理解和解决方法都不一样。

有很多工程师,在考虑问题的时候,不能够从大局出发考虑问题,总是局限自己的一个小范围,这样的工程师的发展前途是不大的。例如,测试部或者品质部就某个BUG向BIOS工程师施加压力的时候,有些BIOS工程师就急了,和其它部门争论,说明这些问题不是问题,或者不是自己的问题。这样的态度本身就是不对的,我们的正确态度应该建立在大家都是为了产品利益的基础上考虑的,即使真的是其它部门的问题,我们也应该考虑从BIOS角度是否可以更经济的解决问题。

保证开发的思想很重要,很多刚毕业的学生,或者刚到一个新的环境中的新员工,对于新的环境很多都是不熟悉的。很多员工不愿意问问题,不懂装懂,怕问了外行的问题别人笑话。其实术业有专攻,如果我们只是不懂装懂,那么将来结果就是我们真的不懂了,即使以后搞懂了,我们进步的速度也没有喜欢问问题的工程师快。

3)强烈的求知欲和优秀的学习能力

BIOS工作,向下需要理解硬件的工作的物理和逻辑原理,向上需要了解OS的工作机理。所以,无论从深度上而言,还是从广度上而言,BIOS都是很深的。所以,作为一名优秀的BIOS工程师,必须具有强烈的求知欲和优秀的学习能力。

BIOS是本身是非常枯燥和琐碎的工作,很多的时间,BIOS工程师都在和各种各样的BUG打交道。如果BIOS工程师没有一种对于各种设备工作原理强烈的求知欲,是很难有耐心处理这么多琐碎的BUG,也是很难深入理解这些总线、协议的深层原理的。

强烈的求知欲首先表现在学习态度上。在学习态度上,一定要清楚的能明白每一种总线、协议的工作原理,不要不懂装懂,随便糊弄自己,敷衍自己,不去深究自己不懂的地方。在学习和工作中间,遇到不懂的地方,我们要仔细思考,探询合理的答案,如果经过自己仔细思考,还是能不明白,可以暂时放过这个问题,以后一定再回头思考,或者是向别人请教寻求答案。但是,无论如何都不能随便放掉自己不能的问题。

如果向别人请教,但是所得到的答案你并不满意,那么BIOS工程师必须具有打破沙锅问到底的精神,最后,如果还是得不到满意的答案,只有靠自己去探索。

BIOS所牵涉的知识特别多,所以很多的知识是没有办法靠别人来一点一点的教你的,主要还得靠自己自学。当然,我们也会提供一系列的讲座,但是,这些讲座只是给你提供一些重点的思路和一些难点问题,而且,讲课特别密集,或者是时间长了都是容易忘的,所以,还得靠自己自学。

自学包括学习理论知识和阅读代码,如何学习是一个方法的问题,方法因人而异,每一个肯定都有自己的方法。这里提出一些方法仅供参考。

在实际工作中,我们发现很多工程师学习理论知识并不深入。究其原因,很多工程师的解释是BIOS牵涉的内容太多,特别是一接触项目的时候,一会儿测试给你报一个ACPI方面问题,一会儿给你报一个PCMCIA方面问题,一会儿又给你报一个网络方面的问题,所以很多工程师阅读各个方面的理论知识只是泛泛了解,没有深入进去。其实这是非常错误的思想。实际解决问题,需要特别精准的理解,这样才能保证项目的质量。泛泛的理解,对于解决问题而言,等于没有理解。这样,我们如何处理工作中间如此之多方面的问题,后面我们介绍的一些BUG解决方法,可以简单的解决,另外,我们还可以通过向这方面熟悉的工程师请教。还有一点,技术资料很多,但是其结构和术语都是差不多,如果我们先花力气,读完一个之后,我们再去读其它的可能会容易的多。这就是中国一句古话“伤其十指,不如断其一指”。

首先自学要有记笔记的习惯,有人喜欢有纸和笔来记,有人喜欢有电脑记,反正效果都是一样的。记录的内容一般包括一些重点、纲要和难点等。当然,也要记录自己不懂的地方,也可能是自己有理解歧异的地方。例如,如果我们阅读PCI规范的开头一句“The PCI Local Bus is a high performance 32-bit or 64-bit bus with multiplexed address and data lines.”,这句话对于一个初次接触PCI总线的人可能就存在歧异,这里说“PCI是一个32位或者64位总线”,这里是说“PCI总线是64根数据线吗?还是指PCI总线支持64位地址?”“32位和64位的或者是什么关系,是在一个一定的总线上要么设计成32位,要么设计成64位?还是指一个总线在一种条件下可以作为32位使用,而在另一种条件下是作为64位使用?还是指在时间上,有时根据需要可以作为64位来用,而在另一个时间根据需要又可以作为32位来使用?”等等,我们可以提出很多的问题,当然,这些问题随着我们学习的深入,可以自动解决。这种提问题的能力非常关键,我相信有很多工程师拿过一本规范,翻着翻着就读完,然而,度过后你问他学到什么,他肯定是一问三不知。所以,能不能提问题,表明你的学习是否投入,以及你的思考能力如何。另外,我们在听别人讲座的时候,也一定要多提出问题,只要是自己没有听懂,或者是理解有歧异的地方都可以提问。

上面讲了阅读规范的时候记笔记的方法,在阅读BIOS源代码的时候,更应该养成记笔记的习惯。BIOS的代码,很多时候都是汇编代码,结构性差,而且注释晦涩,或者是没有注释,我们如何你一步一步的阅读这些代码呢?有一种的方法,就是我们从整体读到局部的方法。在整体上,我们首先画出系统的流程图,然后,一部分一部分,逐步喜欢,最后,我们不但可以看懂这个框架,还可以深入到每一个细节中。当然,看程序前,我们必须对基本的理论知识熟悉,当然,阅读源代码也可以加深我们对于理论知识的理解。阅读程序的时候,画出这些流程图是很好的学习方法。

很多大师都提到过,如果你真正懂一个原理,那么就把这个原理讲给一个外行听。如果我们把一堆术语、公式和程序讲给一个外行听,外行肯定是听不懂的,那么如何把一些“深奥”的理论讲给一个外行听呢?最好的方法就是使用比喻的方法。万物的运行法则是一样的,其中肯定是可以类比的。使用这种方法我们可以深刻理解一些理论的原理。例如,如果有一个学文科的人问你,“为什么接上一个USB摄像头需要安装一个驱动程序?这个驱动程序是不是就是在桌面形成的那个”如果打个比喻来回答这个问题,我们可以这样比喻,如果把一个笔记本软硬件系统(包括OS)比喻成一个公司,那么我们接入一个外接设备就是类似于新买了一辆轮船、一架飞机等。虽然买了轮船,但是轮船自己不会动,例如老板不能直接向轮船发送“请把货物给我送到法国的加来港去”,老板必须给这个轮船配备相应的船员(报告船长和驾驶员),有了船员之后,老板就可以给船员下“请把货物给我送到法国的加来港去”的指令了,接到这个指令,船员就会把货物装上船,然后,驾驶员就可以把船开到法国的加来港去。如果这样比喻,设备的驱动程序就是轮船的船员了。那么为什么有的设备不需要安装驱动程序呢?例如把USB硬盘接入系统。这就相当于公司买了一辆汽车,因

为汽车的驾驶等都是成熟的和标准化的,所以,无论是雪铁龙的,还是标志的,还是奔驰的,宝马的,他们的驾驶方式都是一样的,所以,即使不要安装驱动程序,我们也可以使用这样成熟的设备。不要安装驱动程序,不等于不需要驱动程序,这就好比公司买了一辆汽车,公司不需要配新的司机,不等于汽车不需要司机可以自动行驶。

那么为什么需要在桌面上放置一个程序呢?这个是不是驱动程序呢?我们说不是,这个程序我们一般叫做Applet,这个程序是怎么工作的呢?我们可以这样比喻,公司买了一条轮船,那么我们需要接单子才能有货物运输,所以,我们必须有一个人接单子,也就是Sales。也就是,如果我们想使用一个航运公司的船把货物运送到加来港,我们不能直接让航运公司的船员直接给我们运送。我们只有通过船运公司的Sales运送这些货物。而我们根本就不知道是哪些船员把货物送到的。这个Applet就相当于Sales。

这样,我们可以通过一些简单比喻把一些复杂的理论简单化。通过这样的简单化,我们可以加深对于这些理论的认识。其实这些工作并不是一些琐碎无聊的工作,许多科学家都做过这些工作,就是写一些科普读物。同样,在我们工作中间,我们不同的岗位许多互相合作,互相学习,所以BIOS 要给测试培训,硬件要给信号培训等等。例如,虽然测试不要求测试完全细致学习ACPI规范,但是测试必须了解ACPI规范,所以,BIOS工程师如果能把ACPI规范讲懂给一个测试工程师听懂,而且觉得有所真正收获,那么,这说明BIOS工程师真的搞懂ACPI。

总结,学习了之后必须写总结,这样可以整理自己的思路,加深这些对这些内容的理解。不论是听别人的讲课,看别人写的PPT,还是阅读资料,资料写的东西都是别人的,只有经过自己的总结,这些东西才能成为自己的东西。所以不论学习什么规范,都要使用自己的思路和语言,把这些东西变成自己的东西。另外,BIOS工作所牵涉到内容太多,所以,BIOS工程师更要互相学习,所以,BIOS工程师学习完一项内容之后,要互相分享,互相学习,给其它BIOS工程师讲课。

许多BIOS相关资料,例如ACPI规范,内容都是非常琐碎和具体,所以,学起来相当枯燥。有些BIOS工程师要不就学习的相当粗,要不就学不下去,学不下去非常容易发累发困,尤其许多BIOS 相关资料都是英文资料,对于细节理解起来更是有些困难,所以,这时,BIOS工程师可以采用抄写的方式学习。这样,抄写可以稳定急躁的情绪,另外,抄写可以留给自己足够的时间思考细节,深入理解。

学习方法因人而异,不论采用什么方法,必须达到深入理解的、熟练应用的目的。

4)很强的动手能力

理论是枯燥的,而且读起来非常晦涩,如果想深入理解,那么必须和实际结合在一起。动手能

力对于解决问题相当关键。前面讲到,BIOS工程师很多时间都在解BUG,BIOS工程师可以从BugList系统上得到Bug的描述,但是,BIOS工程师如果解决BUG,必须自己能够复现这个现象。BIOS在复现这些现象的时候,加深对于BUG的认识,可能同时就解决了问题。例如,测试工程师汇报机台不能上网。BIOS工程师接到这个BUG以后,应该重现这个问题,BIOS工程师使用自己的机台验证这个问题,可能在BIOS工程师的机台上就无法重现这个BUG,所以,BIOS工程师就可以把这个BUG局限到有的机台出现,有的机台无法重现。

很多理论,我们必须联系到实际应用中间才能深刻理论。例如在USB协议中间,提到很多抽象的包、交易、传输、描述符等,如果单看理论,非常复杂和抽象。但是,如果我们阅读别人写的USB驱动程序,那么理解起来就比较容易。如果设备允许,BIOS工程师有USB分析仪,那么BIOS 使用USB分析仪去理解这些协议,那么理解这些协议就更加容易。

所以,对于BIOS工程师而言,无论怎样的理论学习,都无法代替试验。动手能力对于BIOS 工程师尤其重要。

5)优秀的分析能力和问题处理能力

BIOS工程师,遇到很多的问题,都是系统级问题,如果BIOS不具备优秀的分析能力和问题处理能力,许多问题根本无法解决。在后面我们会详细讨论如何解决BUG,在这里,我们主要分析一些处理问题的基本能力。

在学校里,学生主要培养的是学习能力。那么,作为一个合格的毕业生,进入实际工作中后,除了,除了具有学习能力外,更应该培养解决问题的能力,也就是工作的能力。作为一名优秀的BIOS 工程师,BIOS工程师做事必须注意工作三点原则。“凡是必须文档化、凡是必须计划、凡是必须总结”

作为一名BIOS工程师,必须注意形成写文档的习惯。很多软件工程师都有经验,在写程序的时候,对于每一行、每一句和每一段都了如指掌,当时认为写文档是非常无聊很没有意义的事情。但是,等到几个月或者半年以后,回头再去读的时候,可能一点都看不懂,所以,后来必须花掉很多的时间去重新温习以前写过的代码。如果在写程序的时候,BIOS工程师就很好的做好注释,这些代码,在以后的工作中间,不仅修改容易,而且,这些代码很容易应用到其它项目中间。

前文也提到过,我们在学习的时候,最好也能够记笔记,这些笔记一边可以总结自己的思路,另外,如果以后想忘记,可以回头查找。这个习惯也是使用文档的方法。另外,在我们工作中间,很多时候,我们都需要各种环节来记录我们的工作交付,这些工作需要Check工作,Check工作可以保证我们工作做到位,保证产品质量。所以,我们一定要养成写文档的习惯。

下面我们解释计划的重要性。在学习的时候,不论是做课后习题,还是做课程设计,这些题目都是比较小。在我们的实际工作中间,尤其是我们笔记本的开发,是非常巨大的工程,不但需要各个部分的紧密配合,而且开发工作长达数月之久,如果没有缜密的计划,我们开发不但无法保证我们的质量,而且没有办法优化我们的资源配置和缩短开发周期,这些都是我们的优势所在。

计划对于我们开发独立的软件项目也非常重要,例如,如果我们在BIOS中间开发一套硬盘备份和恢复的工作,我们应该做如下的计划。第一步,我们要讨论整个项目的目标。第二步,我们讨论我们的工作设计多少内容。我们的项目涉及到如下几个部分:硬盘的操作与INT13知识、文件系统知识、OS下备份恢复的Applet和硬盘操作驱动程序。第三步,我们根据各个部分的内容分别研究各个部分内容,学习相关知识,制定相关的部分接口。第四步,上一步,我们将工作划分成几个部分,各个部分的工作可以独立开发。我们根据各个部分的文档,可以开发我们的程序。

通过以上四步,我们很容易开发我们的功能,而且各个部分和各个步骤可以有条不紊的进行,而且,如果人员许可,我们可以安排很多部分并行进行。当然,在学习开发过程中,每一部分和每一步骤都可能存在困难,但是,这个困难可以逐个突破和逐个解决,不会影响其它部分的开发。否则,我们可能陷入每个琐碎的困难中间没有办法自拔。所以说,计划能力对于我们的开发工作非常重要。

计划的执行对于工作的每日工作也很重要。一些工程师的工作的每一步都需要别人督促,一个很重要的原因就是做事缺少计划性。这些工程师如果没有别人督促就是坐在那里发楞,其实事情很多,那是没有计划在那里,所以没有人督促就想不起应该干什么事情,所谓“好记性比不上好笔头”。一个很好的工作习惯就是每天早上上班之前给自己一天的工作做一个很好的计划,花上几分钟思考一下今天有那些工作需要做,主要回忆今天项目中间有那些事情要做?有哪些文档要写,有哪些资料需要学习,有哪些BUG需要解,有那些会议需要参加,有那些Mail需要处理,等等,做一个简单的回顾,我们就可以列一个简单的List,这样,工程师在没有什么事情做的时候,可以看看什么事情没有做。所以,计划是一个很好的工作方式。

其实计划的能力对于我们调试的时候也是非常有用的。特别是一些系统级的问题,其原因可能多方面的,到底是那个问题造成的?需要我们逐个分析和逐个排除。为此,我们需要分析可能的原因,逐个排除。例如,系统出现S3 Resume之后,播放媒体文件异常,我们怎么分析?有那些可能的原因呢?我们可以如下分析,第一,可能是Aliza的声卡有关,这是ICH6M与ICH4M的不同。第二,这可能是BIOS对于Codec初始化错误造成。第三,这可能是S3中,Codec的配置值丢失造成的。第四,可能是Codec驱动程序的问题。然后,我们按照可能性和分析的难易程度排序,然后逐个实现,最终,我们可能找到解决方法。如果我们没有计划,东一头、西一头,遇到困难就退,然后找新的方法,结果是浪费时间,往往解决不了问题,还走入了死胡同。所以,计划性就是对于我们解决一个BUG也是非常关键。

计划执行以后,后面的关键就是我们如何实施机会了。这关键就看我们的执行力了。好的执行

力加上计划,可能比过一些个人能力上的缺陷,这就是我们常说的,有时候“按部就班解决问题可能是最快的”,我想打过RPG游戏的工程师可能知道,在RPG游戏中间,很多时候我们都在走迷宫,从迷宫中到出口,肯定有一条最近的路线,然后,在迷宫中间,我们肯定不能一下看出到出口的最近路径,随意,这时,我们如果按照“左手法则”或者“右手法则”才是最好的走迷宫方法。“按部就班”就是我们解一些复杂BUG的“左手法则”。

计划可以逐层分解,结果,分成了一步一步的小步骤。所以,我们就去逐步实施这些小步骤就可以。例如,在上面的“系统出现S3 Resume之后,播放媒体文件异常”的BUG的第三个计划中,我们分析可能是S3中间,Codec的电源丢了,所以,一些寄存器丢了。于是,我么就可以,比较S3前后的PCI配置空间寄存器的值、IO空间寄存器的值。比较PCI配置空间的值,我们需要在S3之前,记下PCI配置空间的值,然后做S3,然后Resume,之后读取PCI配置空间的值,之后比较,看有那些寄存器的值变化了,然后分析那些值可能造成这个BUG,在S3 Resume的BIOS 程序中间恢复这些值。这样一步一步都是非常简单的动作,这就看我们的耐心和细心了。

如何做好小事是非常关键的能力,然后这些能力也是一些刚毕业不久的学生最缺少的能力。大学生以“骄子”自居。毕业以后,都想做一番大事,结果不愿意做一些小事。结果不愿意做一些小事,最好,自己的能力一天一天退步。其实,大学中间学习的东西离实际工作中间的要求是不同的,特别是BIOS工作,毕业的学生几乎的从头学起。工作中间的事情必须从小事一步一步坐起,大事都是由一步一步的小事组成的,只有每个小事的环节都成功,这样,大事才能够成功。另外,工作中间,每一个工作都关乎产品的质量,研发的成本,所以每一步都和经济直接挂钩,只有证明自己能力的工程师才能够从小事做起,一步一步的接一些大的事情做。这些原则,对于初步接BIOS工作的工程师尤其重要。

另外,我们在执行计划的过程中间也要注意计划的执行的时间性。公司内的工作与学校中间的试验有许多的不同,其中一个重要的不同就是公司内的项目时间性比实验室内的项目强的多。一些比较大的项目往往计划的步骤很多,所以,很多工程师在做项目的时间性上比较差,例如,一个项目分十步,计划3个月完成,计划前三天完成第一步,到第四天完成第二步,到第七天完成第三步,。。。。。。,很多工程师在前几步的时候时间Delay了,这时工程师会给自己一些借口和安慰,前面Delay无所谓,不过是前面比较难,后面的比较简单的,我能够步回来。其实这种想法本身就是错误,工作中间的每一步都是困难的,我们不能轻视每一步,后面的可能比开头更难。另外,如果Delay,我们必须重视,赶紧补上,否则,一定会造成整个项目的Delay。这种思想时间紧迫性的思想在BIOS工程师中间一定要树立。

优秀的工程师必须善于总结,总结的目的就是为了以后做的更好,总结经验吸取教训。总结分成几种,有项目总结、周报、关键事件总结等等。每种总结我们都要认真做。这里强调几天,第一就是我们周报必须做,很多工程师在工作一段时间之后,如果让写工作总结等,很困难,好像每天都很忙,但是回过头去仔细分析,好像并没有做什么事,这就是因为我们没有做周报的习惯,如果我们一直做周报,等到后期,我们回头总结,把以前的周志拿过来就可以看到我们做什么,我们的

效率到底怎么样。这时,我们可以有一个非常全局的观点审视我们的过去,可以很好的总结。对于一个项目也是,因为一个笔记本开发项目的周期很长,所以,在项目结束的时候,让PM或者PL 总结的时候,确发现没有什么可以总结,然后好像在项目中间遇到很多很多问题,也有过很多很多的想法,为此,我们项目总结也要做到经常话,例如可以一个月总结一个,这样,在项目结束的时候,我们可以把前面56个月的总结放到一起,可以作为整个项目的总结。

那么总结一般总结那些内容呢?我们总结一般而言,应该主要总结一些成功的经验和教训。对于成功的方法,我们可以加以扩大发扬。例如,我们第一次做SONOMA项目是S27I项目,由于Chipset和BIOS Code全部是新的,所以到稳定需要一个相当长的时间。特别是一些新的功能,我们工程师心理没有底,例如PCI Express等等,于是我们给的解决方法是先在915系列主机板上调试,虽然Chipset不一样,一个是台式的,一个是笔记本的,但是我们可以对于一族芯片组的主要特征熟悉和掌握。这个经验对于我们S27I平台前期工作进展非常顺利,所以,以后新的Chipset 的导入,我们都应该提前做类似的工作。另外,我们也可以看到我们的不足。例如,本来我们想6月份就启动主板的调试,结果6月份由于CPU的问题,我们一直没有启动,其实,如果我们向Intel 要Sample的,会非常容易,结果我们没有去要,这就是我们的失误,否则,我们S27I的BIOS进展应该更顺利。等等,类似的经验我们都可以去总结,包括技术上新的认识。

提到做事能力,我们这里不得不提一下对待困难的态度。我们做产品研发,也纯粹的科学开发不同,对于我们的研发可以说没有解决不了的困难,区别的只是你的态度。有很多工程师,在遇到的困难的时候,就想放弃,好像真的解决不了,其实,并不是这样的,只要你用心肯定是能够解决的了的。所以,不怕困难,敢于迎着困难上,一个作为优秀BIOS工程师的基本做事态度。

上面我们简单的讨论了BIOS工程师应该具有的一些基本素质。当然,一个基本的职业道德和能力也是需要,例如,能够吃苦耐劳等等,由于这部分是企业文化的内容,我们不在这里详细讨论

技能要求

1,深刻汇编语言和C语言。

X86汇编语言是BIOS工程师的基本语言,要求BIOS工程师必须深刻掌握。对于汇编语言的理解包括对于各种常用指令的理解,汇编语言编译方法、文件链接、文件组织和结构等理解,对程序分段控制等位语言的理解,另外,我们还必须理解MAK语法等内容。C语言也是BIOS工程师必须掌握的语言,因为BIOS中间的有一部分程序是用C语言写的,而且很多时候BIOS工程师需要写一些小的Utility工具,所以BIOS工程师必须熟练掌握C语言的高级用法。

2,对于计算机架构有深刻的认识。

BIOS工程师必须对现代计算机架构有深刻的认识,包括对于X86处理器内部架构认识,IO 空间和Memory空间的使用,中断和SMI的认识,DMA的认识,Pipeline工作方式的理解等等。

3,熟练掌握ACPI规范和编程。

ACPI规范是由Microsoft和Intel等公司制定的一个规范,其使用抽象的ASL语言向OS 汇报系统硬件配置和电源管理方法。在ACPI之前,这些功能分别由APM、PnP BIOS和MP 等规范定义。随着Microsoft的强大,BIOS工程师的工作很大部分局限到ACPI部分,所以对于BIOS工程师必须熟练掌握ACPI规范。这里说明一下,ACPI涵盖的配置和电源管理功能是没有包含在其它规范定义的,像PCI、USB等,其相应的电源管理功能由相应的总线驱动程序实现。笔记本BIOS与台式电脑的主要不同就表现在电源管理上面,所以,BIOS工程师必须熟练掌握ACPI规范理论知识,并可以熟练编程。

这个地方还需要详细描述ACPI的细节。

4,熟练掌握PCI、ISA等相关规范。

第一代BIOS主要是IBM的8086 BIOS,叫做AT BIOS,主要集中在DMA、PIC等功能初始化和配置,和中断服务程序的提供,其总线是ISA总线。第二代BIOS叫做PnP BIOS,主要是符合PnP BIOS规范的BIOS。现在的BIOS,叫做PCI BIOS,主要专著于PCI架构和ACPI。可见,PCI规范对于BIOS工程师而言,一个必须熟练掌握的规范。

PCI总线产生的主要目的就是解决ISA总线的几个主要缺点:1.随着CPU频率的迅速提高,IO接口的总线很快表现为系统的瓶颈。2.由于传统的总线缺乏灵活的资源分配机制,所以随着外设的品种与数量的不断增加,设备冲突的问题也表现的越来越严重。

对于第一个问题,PCI的解决方案通过几个方面提高了系统的吞吐率。首先,将总线的始终频率提高到33MHZ,这对于以前的ISA总线而言,已经是很大的改进。同时,还在传输的机制上支持突发传输(Burst Transport),突发传输的意义就是对于地址连续的传输,只要给出其开始地址,而以后的传输靠地址的有序递增而计算出相应的数据的地址,这样提高了有效数据传输的吞吐量。

我们知道对于IntelX86家族的处理而言,外设的资源主要是指Memory、IO空间以及中断,而PCI的解决方案就是给定一种灵活的机制,使用软件在启动过程中给每一个设备分配互不冲突的资源,从而是不同的设备可以协调的使用资源。其实更具体的讲,PCI规范的体统实现了可编程的地址解码器,和可编程的中断路由设备,从而实现资源的灵活分配。

作为BIOS工程师,我们必须熟悉PCI配置交易的操作,熟悉PCI Memory和IO资源分配原则,熟悉PCI的中断Routing和分配方式,了解PCI ROM的结构和调用方式等等。

5,熟悉BIOS基本架构和现代主机板架构。

现代主板是基于PCI总线的逻辑架构,由上往下,由CPU、北桥、南桥和SuperIO等主要部件组成,逻辑上表现为PCI的树形的总线、设备和功能的结构。现代BIOS是基于PCI 架构的BIOS。从BIOS初始化流程上讲,CPU上电开始,去内存F000:FFF0处运行,由于设备处于初试状态,所以这个内存地址指向Flash ROM,这段ROM中的程序主要的功能是完成Chipset的一些简单初始化、RAM的初始化等等,然后将程序从ROM中解压到Memory中间,然后把E000-F000处内容Shadow到RAM中运行。

在RAM中间,主要进行PCI系统的初始化,VGA初始化,PnP初始化和Compatible PnP 系统初始化,也就是SuperIO。然后是Keyboard控制器初始化、ISA系统初始化(包括LPT 和COMM口等)、IDE初始化、USB初始化、ACPI初始化和CPU电源管理部分初始化、ISA ROM 初始化和PCI ROM初始化。在这些主要程序初始化之后,调用INT19启动OS,OS启动过程中间,将调用ACPI的程序,继续配置系统,最后OS Boot完成。

这些功能初始化都是主要部分,其中还有一些细节没有描述。这些部分都要求BIOS工程师能够熟悉。

6,掌握ATA、USB、DDR、PnP、VESA、APM、PC Card、1394、AC97、SMBus等相关常用规范。

前面分析BIOS流程的时候,提到各个主要功能部分初始化的时候,要求BIOS工程师最好掌握各个部分内容。其实各个部分内容是非常复杂的,所以能够全部掌握是需要艰苦努力的。

ATA指的是系统硬盘系统的相关部分内容,主要包括以下几个部分内容:1,ATA/ATAPI 部分,描述ATA控制器、硬盘和CDROM等结构操作等2,INT13例程3,硬盘的文件系统4,OS下的硬盘驱动系统。

USB部分主要包括以下几个部分内容,UHCI和OHCI协议、USB总线传输协议、USB 设备架构和USB类设备架构等。只有掌握这个几个部分的内容,BIOS工程师才可以利用USB 协议对USB系统和USB设备进行操作。

DDR系统,是指系统RAM系统,因为DDR是现在流行的SDRAM。这个部分内容要求BIOS工程师对DDR的组成结构和交易规范,Memory Sizing机制等等。这个部分内容比较繁琐,所以BIOS工程师必须深入理解这部分。

PnP规范是基于ISA和EISA规范,是PCI之前BIOS的结构。PnP部分主要包括PnP ISA 规范、PnP BIOS规范和Compatible PnP相关内容。由于ISA规范已经基本退出历史舞台,所以这部分内容在手提电脑的开发中可以不考虑,PnP BIOS规范定义了给操作系统使用的一些BIOS功能调用和数据结构,Compatible PnP就是现在长使用的SuperIO相关内容。PnP BIOS虽然不长使用,但是这个部分内容如果配置不正确可能会造成一些小的BUG。由于红外、COMM、LPT等内容还都是在SuperIO上实现,所以这部分内容BIOS必须深刻掌握。

VESA规范这里我们对于显示系统的通称,主要包括VESA规范和VGA BIOS的相关内容,VESA规范定义了在DOS下进行真彩色显示相关中断调用,VGA BIOS包括内容更多,BIOS 工程师这里更关注的内容是LCD、CRT的切换等等相关内容。

SMBus是一个简单的协议,对于BIOS工程师一个入门级的协议,对于BIOS工程师必须掌握。SMBus操作方式是典型的PIO方式交易,而且简单,所以这是一个理解设备操作的最好的例子。SMBus在笔记本电脑中应用非常广泛,Memory的SPD操作使用SMBus、Clock Chip的操作也是使用SMBus,另外,EC的Battery等设备的操作都是使用SMBus,所以,BIOS工程师必须熟悉SMBus协议。

PC Card规范对于笔记本电脑来讲,非常重要,现在笔记本系统几乎都用PC Card接口。

PC Card分成两个部分,一部分是16位卡,一部分是32位CardBus。虽然,PC Card即将被PCI Express Card取代,但是在未来的一段时间内,BIOS工程师还必须掌握PC Card规范。

等等,除了这些规范意外,SD Card、1394、AC97等等协议都是BIOS工程师经常接触到,所以BIOS工程师也需要熟悉。

7,熟悉Intel/VIA/SIS等芯片组功能结构

以上各个部分功能的实现都是基于不同的芯片组实现的,对于我们系统厂商,我们经常使用的芯片组包括Intel、VIA和SIS等芯片组。

现代常用的Intel笔记本类型芯片组包括855系列和915系列(915GM、915PM、910GL)等等。855系列配合ICH4M的南桥使用,915系列配合ICH6M的南桥使用。

855系列北桥包括三种855PM、855GME、852G,北桥内容主要包括以下几个部分功能,HOST桥,和CPU接口;Memory Controller主要控制Memory;Hub Link接口主要是和南桥接口。另外855GME和855GM还包括一个内置的VGA控制器。855PM主要是使用外接AGP 显卡使用的,所以有一个AGP的控制器。

VIA、SIS芯片组的结构和Intel差不多,这些芯片组都要求BIOS工程师掌握。

8,熟悉Windows的基本原理与操作

BIOS基础知识

BIOS,是技术机系统的基本固件,是系统基本组件。对于一般的用户,BIOS紧紧局限于CMOS 设置程序,对于Award BIOS是在POST过程按Del键进入的Setup程序,对于Insyde笔记本BIOS 是按F2进入的SCU工具。但是对于BIOS工程师而言,BIOS具有的含义绝对不止这个配置工具。

BIOS最初是系统基本输入输出系统(Basic Input and Out System)的意思,最初是IBM 8086兼容机提出的概念,当初的BIOS功能相对简单,除了引导DOS以外,提供了一些系统基本硬件的中断服务程序,例如并口串口的中断调用。

随着现代计算机的发展,BIOS已经从单纯的系统基本输入输出的概念,演化成更复杂的系统。BIOS变成一个平台硬件和操作系统中间一个必要纽带。BIOS使得硬件平台的发展和OS独立,使得两个部分发展的自由度更大,有利于整个产品链的发展。BIOS,作为一个平台硬件和操作系统纽带,其作用主要是硬件初始化,不同媒质上OS的引导,以及把不同的平台信息抽象成一定格式信息给OS,如ACPI表格等,另外,一个更重要的特征,就是现在X86 CPU都提供了SMI的模式,通过这个模式,BIOS可以提供一个Runtime的程序,这个程序可以针对平台,做一些有价值的操作。

计算机一上电,CPU读取的第一条指令是FFFFFFF0h,这个地址被系统映射到BIOS ROM 中间,CPU在从BIOS ROM中读取第一条BIOS程序指令之后,开始运行BIOS程序。一般而言,BIOS前面程序的主要作用就是初始化系统RAM,如果系统程序一直在BIOS ROM程序中运行的话,有很多局限,例如,ROM运行速度远比RAM慢,ROM由于其只读特性,导致很多编程语言没有办法使用,如Call的指令没有办法正常执行,等等。所以BIOS一上电的首要任务就是初始化RAM。把RAM初始化方法划为BIOS的功能,对于RAM技术发展非常有利,RAM技术从SDR、发展到DDR、DDR2。

RAM初始化部分主要根据接入RAM的技术参数来配置Memory Controller,Memory Controller 一般逻辑设计为系统北桥的一个PCI Function。主要配置参数包括Frequency、RAM颗粒宽度、TRAS、TRP、TRCD、CAS Latency和Refresh Period等参数。在初始化之后,然后做简单的校验,如果校验通过,那么RAM就可以正常工作了。

在RAM初始化之后,还有一个工作就是Clock Chip的编程。现代Clock Chip一般都是在SMBus 上的(上面RAM的SPD也是通过SMBus编程)。Clock编程一般是为了省电的目前,关掉一些不需要的Pin,例如,PCI Clock Pin、CPU Clock Pin 2等,另外,PCI电源Stop PCI特性配置以及CPU Clock C3 Stop的配置等等。

RAM可以工作以后,下面的工作就是解压缩功能模块,例如,PCI初始化模块、PnP功能模块、ACPI功能模块、SCU模块、电源管理模块以及VGA等等ROM模块。由于BIOS ROM空间一般比较下,现在常用的BIOS ROM一般是2M/4M/8M比特。所以对于这么多的功能模块,BIOS ROM空间比较紧张,所以,一般都是把各个模块压缩放入BIOS ROM。所以,必须把压缩部分的代码解压缩到RAM中间才可以正常运行。

在ROM解压缩中,有两个特殊的模块,就是E000段和F000段的模块。我们知道,在BIOS 刚刚上电的时候,BIOS ROM占有的地址空间E000段和F000段(4G高端的部分是双映射的)。所以,如果把BIOS E000段和F000段目标代码解压缩到这两段,必须Chipset做一个Shadow动

作,这个动作就是把E000段和F000段地址从BIOS ROM重新映射到RAM。一般,BIOS先把这部分模块解压缩其他段,然后Shadow,之后,再从其他段Copy到E000段和F000段。

在ROM运行的模块还有一个特殊的模块,就是BootBlock。BootBlock是现在Flash ROM的一个技术,这个模块可以被保护,这样就不会被更新。在解压缩过程中,如果发现某个关键模块坏了,可以进入一个Crisis,在这个模块中将对系统做一个简单的初始化,然后从USB Floppy中寻找新的BIOS ROM文件,更新系统。这样,可以防止BIOS刷死的时候可以方便的更新系统。

然后,BIOS需要对Chipset做一些特别的配置,例如,SMI、PMBase等。接着BIOS初始化8259(或者APIC),完成之后,可以初始化Keyboard,因为Keyboard需要使用中断,Keyboard 初始化之后,内置键盘就可以使用(注意,在Legacy模式下,由于USB键盘是使用Trip的方式,所以Keyboard Controller初始化必须正确,否则USB keyboard也将不能使用)。当然之后还有DMA 等系统设备的初始化。

然后系统BIOS进行PCI初始化,在PCI初始化部分主要任务就是遍历PCI总线,填写总线号,然后统计每个设备的资源需求,从系统资源池中间给每一个设备分配资源,设备资源需要包括Memory资源、IO资源以及中断资源。在资源分配成功之后,BIOS将Enable这些设备的解码。BIOS初始化PCI总线有两个目的,其一是POST过程的必须的设备,例如PCI显卡、USB键盘和PATA和SATA硬盘等,如果使用的话,必须分配资源才可以使用,而且这些资源分配不能够重复。其二,对于Windows 98和老的Unix的,其本身没有PCI的初始化驱动,所以这些OS必须依赖BIOS的初始化。

PCI初始化是分成几个模块的,这些模块是分开运行的。在前面主要动作是遍历PCI总线,之后在IDE初始化之后,才进行PCI设备资源的配置,接着运行PCI设备ROM。

在PCI初始化之后,BIOS需要对VGA系统进行初始化,对VGA初始化主要就是查找显卡的VGA ROM,如果是外接的VGA卡,例如AGP或者是PCI Express的,那么BIOS本身没有这个卡的ROM,此时,BIOS必须从这个卡的ROM地址中读出ROM。如果这个卡本身是Onboard的,那么BIOS必须把ROM解压缩到RAM(可能已经解压缩过了)。之后,BIOS把VGA ROM Copy 到RAM的C000段,然后,按照PCI ROM数据结构,找到ROM的初始化入口,跳到ROM的初始化部分执行,在这个初始化程序中间,将对显卡做简单的初始化,然后,把INT10安装到系统中。之后,BIOS就可以调用INT 10在系统显示屏上显示信息。

接着系统需要对键盘控制器进行初始化。首先系统检测是否有键盘接入,这是靠发送键盘Enable命令给键盘控制器,然后读键盘的回应状态,如果回应是0FAh,那么表明有键盘接入,否则没有键盘接入。然后Check键盘的Out Buffer Full中断功能是否正常。然后编程Keyboard的Command寄存器,进一步Check这些功能是否正常。在这些检测之后,则表明键盘可以使用。??????????????

在PCI初始化之后,系统的主要初始化任务就是初始化PnP系统,PnP系统主要任务包括四个部分,建立系统Device Node和PnP Runtime信息,初始化PnP ISA系统,建立DMI信息和初始化SuperIO部分。Device Node包括两个部分信息,一部分是静态信息,主要包括RTC、DMA、PIC等Legacy部分,另一个部分是系统的动态信息,包括COM、IrDA、LPT等部分。PnP Runtime 信息主要是提高OEM INT15需要的系统信息部分内容,包括系统资源使用和内存大小等信息。PnP ISA一个古老部分内容,一般笔记本系统都不会Enable这个Function,这个部分内容主要通过ISA 的配置和数据口,枚举PnP ISA设备,并分析设备的资源需求和分配资源给该设备,然后Enable 这个设备。然后,在PnP收集之后,需要建立$PnP的Installation Check表格。SuperIO初始化,包括SuperIO设备的资源分析和资源分配,以及COM口等初始化动作。最后一个部分内容就是根据系统配置情况,更新系统DMI信息。

在这些初始化之后,BIOS可以点亮系统Panal,或者CRT显示。显示系统LOGO,或者POST 信息,这个部分主要是根据VESA规范,调用VBIOS提供的各个功能调用。BIOS还会检测CPU 的类型,然后显示CPU类型信息。如果用户选择的话,BIOS将检查一边系统RAM,是否有错误。

BIOS接下来需要做的事情就是填写系统的硬件中断向量和系统BIOS数据区相关信息。因为很多的系统中断需要参考BIOS数据区,所以必须先去填写BIOS数据区,然后初始化中断向量,这样很多硬件,如键盘,才可以使用。BIOS数据区初始化部分主要是填写并口串口的Timeout时间和键盘的Buffer地址等部分内容。中断向量初始化包括两个部分,硬件部分和软件部分,硬件部分包括两个主从8259,主要是键盘、Floppy、系统时钟等,软件部分包括INT10、INT15和INT13等。在这些初始化之后,BIOS还可选的对于PS/2鼠标进行初始化。

下面进入了一个BIOS的大的功能块,USB的初始化一共需要7步,第一步,给每个USB控制器分配资源,主要IO资源,第二步,在RAM中分配一段内存空间给USB建立QH和TD的数据结构,第三步,初始化QH和TD,第四步,Reset USB端口,第五步,把QH和TD的开始地址连接各个控制的Frame List上,第六步,把Frame List的基址写入各个控制器的相应寄存器,第七步,RUN USB控制,开始枚举USB系统设备。在枚举设备的时候,记录设备信息,初始化设备,如果是USB HDD、USB CDROM等设备,还需要填写系统的BBS Table。这样枚举过后,系统的USB键盘鼠标硬盘等设备就可以使用了。

在系统的USB初始化之后,BIOS需要初始化ACPI部分。这个部分的主要内容是在系统建立ACPI相关的Table和DSDT表,并根据OEM配置修改DSDT部分内容。这些表格包括RSDP、DSDT、RSDT、BOOT、FACP和FACS。更新DSDT表主要时修改Mail Box的地址。

接下来,BIOS需要进行处理器电源管理的初始化,这部分代码主要是初始化处理器的P State

电源管理,C State电源管理,以及Throttle和Thermal等的电源管理。P State初始化主要就是Intel SpeedStep技术,其主要动作就是根据CPU的类型,在SSDT中间插入_PSS的内部参数表。在C State初始化中间主要就是Enable C1E feature和建立C State的ACPI部分需要的表格。

接着,BIOS需要初始化Floppy和Hard Disk系统。传统Floppy的使用已经很少了,所以这个部分我们不必深究。而硬盘系统是我们整个BIOS重中之重。硬盘部分主要是检测每个硬盘,然后初始化硬盘,之后建立EDPT,初始化之后,我们可以使用INT 13访问硬盘。ATA设备和ATAPI 设备由于其许多指令是不同的,所以,这两个部分初始化的路径是分开的。在硬盘初始化之前,我们必须对硬盘控制器进行初始化,这个部分的初始化主要涉及到各个时序的支持以及PCI资源分配等等。

接着,BIOS需要对系统电源管理进行初始化,特别是APM支持的系统。这个部分主要部分是初始化PM需要的各种数据,配置PM寄存器。然后Enable SW SMI功能。

在PM初始化之后,BIOS调用Int 19h,引导OS。Int 19h根据CMOS的配置和POST过程中BBS设备的Detect结果,尝试从各个Bootable设备启动。最终,Boot到OS。在引导OS的时候,可引导的媒质上的引导程序将继续使用BIOS提供的INT 13以及其他中断程序,知道OS使用自己的程序将这些中断程序替代掉。

在OS下面,ACPI系统将起到非常重要的作用,OS将分析ACPI数据结构,在特定时候执行ACPI的方法,完成平台要求的任务。除了ACPI之外,BIOS还有一些其他数据结构,如果PnP、PCI BIOS和MP数据结构,不同的OS可能使用这些数据结构。除了OS可见的数据结构之外,BIOS SMI程序可能被软件或者是硬件触发,独立于OS程序,执行我们定义的特殊功能。

以上是针对BIOS功能的一个简单描述,具体的BIOS实现会有所不同。如果仔细了解每一个部分内容,需要对每一个部分相关的规范和代码仔细阅读。

主板架构基础知识

上图是一个具体主板框图的例子,图中的CPU是支持Banias或者Dothan CPU。北桥是855GME,南桥是ICH4M,北桥集成VGA控制器,输出两路,一路是数字信号的LVDS,一路是模拟信号的CRT接口。内存控制器支持DDR,最高Support DDR 333。Host FSB支持400MHz。

CK408??

南桥PATA部分接出两路,一路是Primary,用来接HDD,一路是Secondary,用来接ODD。USB引出两个独立Controller的Port。PCI总线外接三路,一路接Onboard LAN;一路接Ricoh的CardBus Controller,这个设备是一个多功能设备,本身集成了四合一读卡器;一路接一个Mini PCI Socket,这个Socket可以接入Wireless Lan,或者是TV Card等Mini PCI设备。LPC上接两个设备,一个是EC,一个是SIO。Flash ROM 外挂在EC上,所以EC除了解码键盘端口60h/64h和EC端口62h/66h外,还必须解码Flash ROM的内存地址。SuperIO采用的是National Semicondact的PC87381,内含串口控制器和FIR控制器。AC97分成两个部分,一部分是数字部分,内置在南桥内,一部分是模拟部分的AC 97 Codec,AC97在逻辑上是一个PCI设备。

1,CPU

a)

2,MCH

3,ICH

4,

Insyde BIOS架构

现代BIOS,一般采用Flash ROM,常用的是2M/4M/8M bits.我们以4M Flash ROM为例描述BIOS结构。现代BIOS ROM一般直接或者间接接在LPC上,LPC可以配置为把Memory Cycle 在E000h和F000段,映射到BIOS ROM的相应高端,同时也可以把相应的(4G-ROM Size)的Memory Cycle也映射到相应的BIOS ROM上。由于CPU一上电的指令指向F000:FFF0,所以这条指令就是BIOS上电的初始指令,这条指令将给Chipset映射到BIOS ROM的相应位置,所以BIOS ROM相应F000:FFF0位置必须存放相应的BIOS初始化代码,这些代码是不可以压缩的。在Insyde BIOS上,这段代码就是放BLOAD.ROM代码,如果Support BootBlock,那么这个地址放置的是BBLOCK.ROM的代码。前面已经讲过,这些没有压缩的代码主要作用就是简单初始化Chipset,然后初始化RAM系统,在RAM系统初始化成功之后,这个模块将把BIOS其他部分的压缩代码解压缩到RAM中间,然后跳到RAM中运行。所以,纵观整个BIOS ROM的代码结构,ROM的地段对应F000:FFF0地方放置非压缩的代码,往下的空间则防止压缩的BIOS代码模块,例如DSDT表和PCI初始化代码等。对于一部分笔记本计算机,为了Cost Down的原因,一般把EC ROM和BIOS ROM合起来使用同一个ROM,例如NS87591L的EC。这样,根据EC解码特性,必须把BIOS ROM最低端的两个段分配给EC使用,这一部分代码是EC的代码,可能不是X86处理器的指令。这样,这个BIOS ROM分成三个部分,最高端存放非压缩BBLOCK和BLOAD 代码,最低端存放EC代码,中间是压缩的BIOS代码。

Insyde BIOS ROM生成在BIOS SourceCode的OEM\BIND目录下的MakeBIOS.mak文件中生成,如下方式

romloc: $(ROMLOC_FILES) .\makedir\bios.loc

romloc .\makedir\bios.loc

这段代码使用一个romloc.exe程序,这个根据根据bios.loc文件中定义的各个模块在BIOS ROM 中摆放的位置,把各个模块的压缩或者非压缩代码放到BIOS ROM中间,生成BIOS.ROM文件。BIOS.loc文件由BIOS.lpp生成,其在MakeBIOS.mak中的代码如下:

.\makedir\bios.loc: bios.lpp ..\shared\config.h ..\shared\project.h

set INCLUDE=..\shared;$(INCLUDE)

CL /EP /nologo %s > .\makedir\bios.lo1

delempty .\makedir\bios.lo1 > .\makedir\bios.loc

set INCLUDE=$(INCLUDE)

BIOS.lpp是一个简单的文件,使用C语言的方式定义BIOS.ROM各个模块位置,典型的BIOS.lpp 内容如下:

;----------------------------------------------------------------------------

#include

; BIOS Build Utility

; The ROMLOC program builds a 512KB x 8 BIOS (4MBit) using the following files.

OUTPUT = RELEASE\BIOS.ROM

MAPFILE = RELEASE\ROMLOC.MAP

SIZE = 512K

FILL = FFFF

;--- File Name -------- @ ROM ------------------- @ RAM

ROMSRC\ECBIOS\FBR.ROM @ 0000 ;;V02+

MAKEDIR\VGA.CHB @ 10000 ; Video BIOS C000:0 //yl012704

;Compressed Video bios size should not exceed 48K Bytes!!!!

MAKEDIR\DISPSEG.CHB @ APPEND,align16 ; DISPSEG

MAKEDIR\IMAGE.CHB @ APPEND,align16 ; IMAGE.PCX

;Intel OSB Code

MAKEDIR\OSB.CHB @ APPEND,align16 ; LOGO.OSB ;Intel OSB module MAKEDIR\USB.CHB @ APPEND,align16 ; USB BIOS E000:0

MAKEDIR\ACPI.CHB @ APPEND,align16 ; E400:0

MAKEDIR\DSDT.CHB @ APPEND,align16 ; E500:0

MAKEDIR\SCU.CHB @ APPEND,align16

MAKEDIR\MENUENGL.CHB @ APPEND,align16

MAKEDIR\SCUSRVR.CHB @ APPEND,align16

MAKEDIR\MAXSMI.CHB @ APPEND,align16

MAKEDIR\PCI.CHB @ APPEND,align16 ; E800:0

MAKEDIR\PNP.CHB @ APPEND,align16 ; EC00:0

MAKEDIR\BIOS.CHB @ APPEND,align16 ; F000:0

MAKEDIR\PXE.CHB @ APPEND,align16 ; PXE BIOS C800:0 ROMSRC\DMIROM.ROM @ 60000 ;must in 2k boundary

;-----------The above code should not exceed @70000------------

; Micro code put the following location.

ROMSRC\mcu\m206D210.pdb @ 67000 ;(Dothan) Mobile Pentium-M A1

相关文档