闲人

君子性非异也 善假于物也
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

AMI用模块化打败AWARD,结构化的设计影响传统软件领域

Posted on 2005-07-21 15:05  闲人  阅读(1784)  评论(9编辑  收藏  举报

    从华硕走出来已经2个多月了,今天突然回忆起在华硕的一些事情。我虽然不喜欢华硕的文化氛围,但是还是为在华硕做过bios感到一点点自豪。
    初入华硕的时候,在华硕看到的bios是一个很不同的面孔——AMI。平时电脑用的多,和bios打交道是很平常的事,但是国内的bios,还是以AWARD居多,而我,更是不知道有AMI这个东西。当我知道AMI是华硕的channel(华硕的叫法,贴自己牌子的产品)的主要bios的时候,就更惊讶不已了。因为华硕的主板产量世界第一,每年总出货量比排在他后面的三大厂商的总合还要多,这些主板的bios竟然用的是陌生的AMI?几个月后,等我能够融入到华硕bios项目开发的时候,我也渐渐认识到AMI的厉害了。
    传统的软件开发领域,包括像bios这样大型汇编语言系统,和一些底层的C软件项目,会大量的用到编译预处理,也就是宏,然后用ifdef等等方法管理编译过程。举个C语言的例子,写一个config文件,定义一些编译预处理:
        #define MOTOROLA_CPU 1
        #define INTEL_CPU 0
在程序中include进来这个config文件,用#ifdefined(xxx)来控制使用不同cpu时应该编译的不同代码。一般来说这样是很好用的,但是在大型程序里,这种编译预处理使用的非常多,有时候一个config文件里要放几百个这样编译预处理来指导编译工作,这种情况下,程序员就要详细知道每个编译预处理的情况,实际上这是不能保证的。所以经常会出现,代码反复改,结果都一样的情况,往往是因为一个参数定义成了0导致编译器错过了这段代码。
    当然,AMI的bios也采用这种方法,但是主要的模块控制已经不是靠编译与出来完成的了。AMI开发了一整套自己的工具实现了完美的模块控制。他根据功能,把所有代码分成各自独立的模块,比如这个模块用来初始化intel 915的芯片,那个模块用来控制super io,这样,要组成一块新主板的bios,我只要知道主板用那些芯片,需要实现什么功能,就可以用工具选择相应的模块,组合起来就可以了。举例来说,华硕新出品的P5GL-MX主板采用intel915+ich6芯片组,cpu用775接口,用ICS954123时钟控制器,用华邦super io,要有超频功能,那么我只要选择通用基本模块,intel915北桥模块,ich6南桥模块,ICS954123超频模块,华邦super io模块,和支持775接口的intel cpu微程序集就可以组成大概的bios,然后稍微修改一些地方使和自己的主板兼容就可以了。而如果使用AWARD项目(AWARD项目代码对大陆不公开,我没见过),就好好的去研究每一个编译预处理的参数吧。
    模块化最大好处不在于组装代码,在于代码的维护。很显然的,采用编译预处理的方式,很多为不同功能服务的代码放在同一个文件中,用编译参数控制,所以项目的维护,不得不以文件的方式来分配。假设有一个文件用来控制cpu的初始化,里面要有所有可能用到的cpu,包括AMD K6,AMD K7,AMD K8,INTEL P4,INTEL SIMITH等等的代码,那么这个文件的维护人员就是一个熟练掌握所有这些cpu的初始化流程的超级天才。如果分开控制,由于所有代码在同一个文件,又会出现同步的问题,这些东西都是非常令人讨厌的!但是AMI的模块化管理很好的解决了这个问题,因为所有的功能被分成了不同的模块,每个模块的负责人只要是一个领域的专家就可以了,而在这个小领域成为专家并不是什么难事。在华硕的时候整天可以收到这种邮件:xxxmodule check in,呵呵好了,换服务器上的新模块来更新你负责的项目吧,一定是有人又解决掉什么大麻烦了。
    还来谈谈华硕。华硕的抠门是出了名的,但是在bios上,华硕一直使用比AWARD贵的多的AMI bios,因为华硕的产品更新速度奇快,经常是新产品一个接一个的出来,而且华硕对产品质量要求非常严格,而模块化的AMI bios快速开发和易于维护的特性正好对上华硕的胃口。
    据说,国外的很多电脑厂商进几年都已经改用了AMI,国内一些厂商好像也有这个趋势。全新的AMI bios改变了AWARD一家独大的格局,从这也可以看出来,结构化的设计不但在新的技术上光彩夺目,也悄悄的改变了传统领域。
    还听说intel要用EFI取代bios了,希望华硕和AMI能顶住这次挑战。