BIOS基础调试内容简介•硬件基本访问方式•PCIIRQRouting•PCIBusDecode•BIOS与Memory映射•关机与重启•Strap引脚基本工具•RU:DOS和Win98下访问硬件信息的工具•SE:功能基本同于RU,运行于WinNT/2000/XP下主板基本架构硬件的基本访问方式•1.Memory•2.I/O•3.ISAI/O•4.PCIConfigurationSpace•绝大部分硬件的寄存器访问是通过以上方式中的一种或几种实现的硬件的基本访问方式•Memory•32位的CPU最大寻址可到4GB。•可用Memory方式访问的设备:•物理内存,PCI/PCIX/PCIE设备,FlashROM,APIC,ISA设备,南北桥内部寄存器等。•注:插4GB物理内存真正可以使用的通常只有3GB多一些。硬件的基本访问方式•I/O•通常可访问的I/O空间为0~0FFFFh,共64KB。•可用I/O方式访问的设备:•PCI/PCIX/PCIE设备,ISA设备,LPC设备,南北桥内部寄存器等。硬件的基本访问方式•ISAI/O•典型设备为RTC和SuperI/O的logicdevice。•RTC访问是通过70h/71h两个I/OPort访问。•SIO的logicdevice通过2Eh/2Fh或4Eh/4Fh来访问,具体I/OPorts取决于硬件StrapPin设计。硬件的基本访问方式•PCIConfigurationSpace•每个PCI设备的配置空间有256字节。•每个PCI设备由Bus,Device,Function三个参数决定。•Bus:由PCI设备所在桥的寄存器决定。•Device:由PCI设备IDSEL引脚连接的AD号决定(Intel芯片是AD号-16)。•Function:单功能设备的Function为0。PCIDeviceConfigurationSpace以上3幅图片摘自PCI和PCItoPCIBridge规范,具体设备寄存器含义会有所不同,需要参考具体Datasheet。硬件的基本访问方式•除PCI配置空间外,PCI设备的其他寄存器会通过Memory或I/O映射的方式来访问,具体地址取决于配置空间的BaseAddress寄存器。•Intel南桥的UHCI和EHCIController分别对应I/O和Memory映射。硬件的基本访问方式•Legacy:早期设备使用固定资源,比如COM,LPT,PS/2,ISA卡等,OS无法自动侦测到该设备,需要手动添加并且配置资源,随着PnPBIOS和ACPI的发展,板载的COM,LPT,PS/2等设备可以由BIOS把他们的资源提供给OS,不需要再手动配置资源。•PnP:PCI卡等设备,接入后OS可自动检测到,安装完驱动即可,不需要再配置资源。PCIIRQRouting•中断向量:内存地址0-3FFh这256个Dword分别对应0-0FFh共256个中断向量。•IRQ:IRQ0-7对应从Vector8到F,IRQ8-15对应从Vector70h到77h,硬件中断发出后会立即转入相应的中断服务程序来执行。•PCIIRQ:PCI规范中规定PCI设备有INTA#/B#/C#/D#四个引脚,低电平有效,单功能设备通常只用INTA#,多功能设备的每个功能使用哪个Pin取决于配置空间的offset3Dh,1-4分别对应A#-D#PCIIRQRouting•PIRQA-H:Intel南桥中断控制器通常引出8个引脚,每个PCI设备的INTA#-D#分别会连接到PIRQA-H之一,通过BIOS的PCIIRQRoutingtable把硬件的连接方式通知给OS和上层软件。•注:VIA或AMD的某些芯片组的中断控制器可能只引出4个引脚,如CS5536和686B。PCIIRQRouting•SerialIRQ:COM,LPT,PS/2等LPC设备和ITE8888使用SerialIRQ来进行中断,硬件上通过一根引脚进行传输,实现的前提是该IRQ一定不能被PCI设备使用。PCIIRQRouting•板载额外的桥芯片时,桥后设备不需要BIOS提供IRQRoutingTable,OS的Driver和硬件连线需符合PCIEtoPCI/PCIX和PCItoPCI的规范。•table8-1:摘自PCIEtoPCI/PCIX桥芯片规范。•table9-1:摘自PCItoPCI桥芯片规范。PCIBusDecode•PositiveDecodeEnable:大部分PCItoPCI桥和PCIE桥属于此类,只响应Memory和I/Obase(Limit)声明范围内的寄存器访问。•Subtractivedecode:一个系统中只能有一个Subtractive设备,对所有不在其他设备的正译码范围内的Memory或I/O地址响应。PCIBusDecode•ICH4,ICH5:这两个芯片集成的PCItoPCI桥可支持正译码和减译码。•ICH6以后:南桥中的PCItoPCI桥仅支持减译码。•其他芯片厂家的南桥,如CS5536和SB600,都与ICH6类似。•仅支持减译码的南桥搭配ITE8888时,需要ITE8888设置为正译码。BIOS与Memory映射•X86架构CPU第一条指令指向FFFF:0000(PowerOnResetVector)•BIOSROM会把自己的一部分映射到如下Memory地址:BIOS与Memory映射•BIOS的Bootblock阶段Memory初始化之前,CPU指令主要从F000段的ROM中取,Memory初始化之后,剩余BIOS代码被复制到物理内存中,而F000和E000段的属性也被改回到物理内存,共后续BIOS和OS使用。关机与重启•PowerButton关机:非ACPIOS下按Powerbutton之后,会产生一个SMI,CPU会进入BIOS预设好的代码中进行处理,最后会去写Sleeptype/enable寄存器,从而实现关机;ACPIOS下,会产生一个SCI,OS接下来按照BIOS提供的硬件信息来处理关机动作。•PowerButtonOverride:持续按PowerButton约4秒左右,系统会无条件进入关机状态,这种关机是南桥自己的动作,没有通过SMI实现,绝大部分唤醒功能会无效。关机与重启•重启:•ResetPin:对sys_reset#输入低电平,南桥内部进行reset。•Ctrl+Alt+Del:BIOS的中断服务程序处理后,最后转入0CF9h进行PLTRST#。•KBCReset:I/Oport64h写入0FEh后,SIO发出KBRST给南桥的RCIN#,南桥再发INIT#给CPU,CPU接收到INIT#后会从PowerOnResetVector开始执行指令,此时的F000段由BIOS提供,最终仍会再次进行0CF9h的Reset。Strap引脚•SWStrap:从ICH8开始Intel引入此概念,把Strap配置以一定的格式存入BIOSROM,上电时南桥先读取SPIflash中的设置,之后CPU再动。•HWStrap:大部分StrapPin在PWOK的上升沿取样(具体请参考Datasheet),此时的电平才是在Strap功能中起决定作用的。•常用的Strap:SIO的indexport,CPUBSEL,南桥PCIE的x1/x4,北桥PCIE或SDVO等。