Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1024457
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类:

2011-07-04 22:36:31

星期四, 九月 27, 2007


一旦正确的频率供给给system后, BIOS便依据既定的POST table(类似行程表)来做事. 首先,与chipset最为相关的便是 [chipset config stage]. 意即,在此阶段BIOS必须对 chipset registers填入正确的值,俾使其正常运作. 一般而言,要config下列的 devices:

- NB(还记得前面有提过北桥内部约可分 4 blocks; "有些" blocks 需要 在此 program...)

- SB(即 PCI-ISA bridge)

- ACPI registers

- USB registers

- SATA registers

- PATA registers

...


* 在此所谓的 registers指的是: PCI config registers(除了ACPI registers以外). PCI spec所定义的 PCI config registers 00~3Fh 为 PCI header part,这个范围的registers并不是此阶段的主要工作(当然还是会touch,只是不多),而是稍后BIOS PCI kernel的事情.此阶段将 focus on :offset 40h以后的 registers,因为,这些是 device specific的部分,是 chipset自己加function/feature之处 !!!


* ACPI registers通常透过 IO 来存取

Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h

mov dx, 855h

in al, dx ; <- al = ACPI Reg55h's value


* 上述所列的 devices多为 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要对 device 下 PCI configuration read/write便可以 config device registers.


Ex. 假设: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)

=> 简单的 assembly can be:


mov eax, 80002750h

mov dx, 0cf8h

out dx, eax


mov dx, 0cfeh

in al, dx

or al, 00001000b

out dx, al 


事实上每家BIOS都 maintain many "tables" 来说明: 哪一个 device 中的哪些 registers要填?值.相关的 access routine都已经写好. Programmer只需更改表里面的值即可 ^_^


*当有人要求改 register setting时,我们必须知道三件事:

1. why (为什么要改?)

2. what(改成何值?)

3. when(什么点改?)


*对于 BIOS kernel与 OEM coding的人言,这部分会是较少碰触的,因为,这些code会由 chipset porting的人负责撰写及维护.


张贴者: Harrison Hsieh 于 8:41 下午 


标签: BIOS相关


8 意见:




tonyya 提到...


无意间发现你的部落格


很多文章都觉得受益良多


我也刚接触这门领域不久


很多东西都似懂非懂


不知对于一个新人而言


有没有什么好的训练方式


可以及早进入状况

十月 03, 2007 5:53 上午 




Harrison 提到...


现在的BIOS有分成Legacy BIOS(汇编语言)与UEFI BIOS(C语言),但是这两种BIOS对于一个刚接触的新手来说就只是Win98跟WinXp使用方式的差别而已,接口不同,但是要做的事情几乎一样。


所以我的建议是多去了解这些工具的用法(汇编语言指令/C语言用法)还有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因为了解系统架构才是最基本的。


如果要快速上手的话,你就先必须知道"设定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),还有如何调整PIRQ/GPIO/ASL Code...等,如何透过SMbus/LPC存取? 何谓KBC/EC? 又要如何把OpROM 加载到内存,然后把控制权交给OpROM,执行后又把控制权还给BIOS/CPU Microcode如何更新?...etc. 这些都是基本OEM BIOS会做的事情,至于BIOS核心就必须很了解IA32架构你才有办法去做。

十月 04, 2007 5:39 下午 




tonyya 提到...


首先感谢你的回复


1.目前接触的是Legacy BIOS(汇编语言)


2.IA32的系统架构有在看,目前也在积极补强一些相关的spec知识,不过还是要有实际做过才有感觉,对我而言如果只是光看的话无法深刻的体会


3.关于你说的设定方式,有的有碰过,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我会去补强你所提到而我没碰到的部份


4.进入这行的感想是对于一些硬件的知识比以前来的了解,辛苦的是要一直摸索找方向,虽然东西很多要K,问题就在于太多东西反而有时不知从何着手 @@!


5.再次感谢你所提供的意见

十月 05, 2007 8:09 上午 




chiehlin@mail2000.com.tw 提到...


PCI Register 是 cf8 cfc Index ,Data

十月 25, 2007 11:17 上午 




PT 提到...


关于SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)

mov eax, 80002750h

依照我的理解方式是

10000000^00000000^00100^011^01010000

所以应该是80002350h



询问大大 这样是否有错?

十月 21, 2008 7:37 下午 




Harrison Hsieh 提到...


恩恩~~没错啦~

十月 23, 2008 9:04 上午 




星 提到...


这是一项有全球化事业的商机,

而且潜力无穷,任何人都可以去从事。

现在只要在家工作,越早加入就能越早赢得改变人生的机会。

请先免费 注册体验12周:

网址登入:

祝~天天都是有美好的一天˙快乐与您同在

七月 29, 2010 3:36 上午 




翁 提到...


哈啰~~板主您好:

由于最近在考虑未来的方向!

想请教一下!!!

BIOS & EC 是一样的工作内容吗?

还是其实差异很大?

可以麻烦板主告诉我 EC 的工作内容大概是什么吗?

二月 15, 2011 5:32 上午 


 

阅读(912) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~