【我所认知的BIOS】->反汇编BIOS之Bootblock(4)
--initialize Super IO
By Lightseed
5/13/2010
一、BIOS的主流程
到目前为止,我们已经看了两个重要的函数了,也是BIOS的必经之路。如下面的代码片段,BT_CPU_Init和Chipset_Reg_Init_Early我们都详细探讨过,那么随着流程下去,就是讨论SuperIO_INIT这个函数了。
到目前为止,我们的BIOS主流程如图1所示,
图1 BIOS主流程
那么今天就和大家详细来看看SuperIO_INIT这个函数都做了什么。BIOS究竟是怎么来初始化我们听的耳朵都起茧了的一个芯片——super IO。
二、SuperIO_INIT
废话就不多说了,让我们来看看code吧,这样一下子就明了了。
_F000:E274 mov ax, cs:[si]
_F000:E277 mov dx, 2Eh ; '.' ; Superio_Config_Port
_F000:E27A out dx, al
_F000:E27B out 0EBh, al
_F000:E27D xchg ah, al
_F000:E27F inc dx
_F000:E280 out dx, al ; out to SIO's configuration register
_F000:E281 add si, 2
_F000:E284 out 0EBh, al ; delay
_F000:E286 loop loc_FE274
这是SuperIO_INIT的主函数。不难发现其实中间的逻辑很简单,与之前初始化chipset的逻辑差不多,只是操作稍微有点点区别。对于上面这个函数,大部分看注释应该就能懂了,我只想单独说明一点。对于初学者而言,可能会问:
_F000:E268 mov al, 87h ; '?
_F000:E26A out dx, al
_F000:E26B nop
_F000:E26C nop
_F000:E26D out dx, al ; Enter SIO configurating mode
为什么上面要有两次的把87H送到DX的port上去。我的回答是,这是由super IO的芯片决定的。在super io的datasheet里面有说明,只有两次向super IO的固定端口写入entry key才能使得该super IO进入到配置模式,从而初始化它的寄存器。在datasheet的第九章有说明。在
http://blog.csdn.net/lightseed/archive/2009/09/02/4512464.aspx
这个章节里也有详细的论述。(再次提醒一下,blog里面的之前的那些文章都是基础,所以比较杂乱一点,但是在我们反汇编BIOS的阶段全部都会用上的。呵呵。。。如果您对反汇编BIOS还是有点兴趣的话,到是可以回头再温习一下我blog里面的其他文章。)
继续追踪,在
_F000:E26E mov si, 0E210h ; Source data pointor
这一行里面,我们可以看到把super io的初始化table的偏移给了SI,后续通过对SI的调整来做的动作。那么我们来看看0E210h这个地方都存了什么样的数据。
_F000:E210 ;---------------------------------------------------
_F000:E210 Global confaguration register initial start
_F000:E210 Low byte is configuration register
_F000:E210 High byte is the value will be configurated
_F000:E210 ;---------------------------------------------------
_F000:E210 Superio_Init_Tbl db 24h ; $ ; Chip(Global)Control Register 24h
_F000:E211 db 0C4h ; ? ; 16 bit Address Qualification
_F000:E211 ; Clock is 48 Mhz
_F000:E211 ; KBC is enabled after hardware reset.
_F000:E211 ;
_F000:E212 db 29h ; ) ; CR 29H
_F000:E213 db 0 ; ; All GPIO multiplexed pin not be selected gpio
_F000:E213 ;
_F000:E214 db 2Ah ; * ; CR 2AH
_F000:E215 db 7Ch ; | ; PIN 124~128 are selected GPIO
_F000:E215 ;
_F000:E216 db 2Bh ; + ; CR 2BH
_F000:E217 db 0C0h ; ? ; PIN 91,92 are selected GPIO
_F000:E217 ;
_F000:E218 db 2Ch ; , ; CR 2CH
_F000:E219 db 3 ; ; winbond Reserved
_F000:E219 ;
_F000:E219 ;
_F000:E21A ;---------------------------------------------------
_F000:E21A Global confaguration register end
_F000:E21A ;---------------------------------------------------
_F000:E21A db 7 ;
_F000:E21B db 0 ; ; Select device 0 FDC
_F000:E21B ;
_F000:E21C db 30h ; 0
_F000:E21D db 1 ; ; set the FDC active
_F000:E21D ;
_F000:E21E db 0F0h ; ?
_F000:E21F db 0Eh ; ; Defualt value is 0EH, BIT 1 FDC DMA Mode is enabled
_F000:E21F ;
_F000:E220 db 7 ;
_F000:E221 db 1 ; ; Select device 1 Parallel Port
_F000:E221 ;
_F000:E222 db 30h ; 0
_F000:E223 db 1 ; ; Set Parallel Port active
_F000:E223 ;
_F000:E224 db 7 ;
_F000:E225 db 5 ; ; Select device 1 KBC
_F000:E225 ;
_F000:E226 db 30h ; 0
_F000:E227 db 1 ; ; set the KBC active
_F000:E227 ;
_F000:E228 db 60h ; `
_F000:E229 db 0 ;
_F000:E22A db 61h ; a
_F000:E22B db 60h ; ` ; The first KBC io base is 60h
_F000:E22B ;
_F000:E22C db 62h ; b
_F000:E22D db 0 ;
_F000:E22E db 63h ; c
_F000:E22F db 64h ; d ; The second KBC io base is 64h
_F000:E22F ;
_F000:E230 db 70h ; p
_F000:E231 db 1 ; ; default valve is 01h
_F000:E231 ;
_F000:E232 db 72h ; r
_F000:E233 db 0Ch ; ; default value is 0ch
_F000:E233 ;
_F000:E234 db 0F0h ; ?
_F000:E235 db 80h ; € ; KBC input clock is 12Mhz
_F000:E235 ; Port 92h is disabled
_F000:E235 ; Gate20 software control
_F000:E235 ; Kbrst software control
_F000:E236 db 7 ;
_F000:E237 db 7 ; ; Select device 7 game port
_F000:E237 ;
_F000:E238 db 30h ; 0
_F000:E239 db 1 ; ; set the game port active
_F000:E239 ;
_F000:E23A db 60h ; `
_F000:E23B db 0 ;
_F000:E23C db 61h ; a
_F000:E23D db 0 ; ; game port io base is 0h
_F000:E23D ;
_F000:E23E db 62h ; b
_F000:E23F db 0 ;
_F000:E240 db 63h ; c
_F000:E241 db 0 ; ; MINI port io base is 0h
_F000:E241 ;
_F000:E242 db 70h ; p
_F000:E243 db 0 ; ;
_F000:E243 ;
_F000:E244 db 7 ;
_F000:E245 db 8 ; ; Select device 8 GPIO Port 2 and Watch Dog Timer
_F000:E245 ;
_F000:E246 db 7 ;
_F000:E247 db 9 ; ; Select device 9 GPIO Port 3
_F000:E247 ;
_F000:E248 db 30h ; 0
_F000:E249 db 1 ; ; set the device active
_F000:E249 ;
_F000:E24A db 60h ; `
_F000:E24B db 8 ;
_F000:E24C db 61h ; a
_F000:E24D db 0 ; ; winbond datasheet do not release
_F000:E24D ;
_F000:E24E db 0F3h ; ?
_F000:E24F db 0 ; ; Suspend LED pin is drived low
_F000:E24F ;
_F000:E250 db 7 ;
_F000:E251 db 0Bh ; ; Select device B hw Monitor
_F000:E251 ;
_F000:E252 db 30h ; 0
_F000:E253 db 1 ; ; set the HW monitor active
_F000:E253 ;
_F000:E254 db 60h ; `
_F000:E255 db 2 ;
_F000:E256 db 61h ; a
_F000:E257 db 90h ; ? ; HW monitor io base address is 902h
_F000:E257 ;
_F000:E258 db 7 ;
_F000:E259 db 0Ah ; ; Select device A ACPI controller
_F000:E259 ;
_F000:E25A db 0E6h ; ?
_F000:E25B db 40h ; @ ; Clear CASEOPEN#(Pin 76)event (HF only)
_F000:E25B ;
_F000:E25C db 0E6h ; ?
_F000:E25D db 0 ;
我觉得对上面的这个table的注释应该是很详细了,如果您在看的过程中还有不明白的,那么我们再深入探讨。
三、小结
Super IO在整个计算的架构上还是扮演着比较重要的角色。比如KBC经常会在这里出问题,HW monitor的实时读取,GPIO的操作,ACPI controller的中断等等一些问题都是很有研究价值,也很有趣的问题。单纯从BIOS的角度上讲,那么super io的简单的早期的初始化就差不多结束了,让我们继续期待BIOS的下一步动作吧。
分享到:
相关推荐
**D5** - BOOTBLOCK检查,这是BIOS的一个小部分,能够在主BIOS损坏时引导系统。 **D6** - BIOS校验和,用于验证BIOS代码的完整性和未被篡改。 **D7** - CPUID检查,确认处理器型号和特性,以优化系统性能。 **D8*...
描述中提到了“万能BIOS备份工具”,这类工具如Award Bootblock BIOS Recovery、AMI BIOS Backup等,能够帮助用户安全地备份现有的BIOS到ROM文件,以防意外情况导致BIOS损坏,从而无法启动计算机。备份BIOS是一个...
接着,根据主板所使用的BIOS类型(如Phoenix-AwardBIOS或AMI BIOS),下载对应的BIOS刷新工具(如Awdflash或Amiflash)。通过命令行模式执行刷新工具,并指定新BIOS文件的位置,即可开始刷新过程。需要注意的是,在...
### M6117D BIOS自检码详解 #### 标题解读 “M6117D BIOS 自检码”这一标题明确指出本文档主要介绍M6117D型号计算机主板上使用的BIOS(基本输入/输出系统)自检代码的相关信息。 #### 描述解析 描述部分重复了标题...
在 bootblock.s 文件中,需要加入 nop 指令使得程序从要运行的第一条指令开始运行,如 start code 中加入了 10 条 nop 指令,每条 nop 指令为 4 个字节,共增加了 40 字节的空间,即 0x28。 测试 在本任务中,需要...
热插拔法的危险之处在于带电操作的风险,可能会导致BIOS芯片彻底损坏。 对于BIOS芯片修复技术的学习和掌握,对计算机硬件维修人员来说至关重要。这不仅能够帮助他们减少维修成本,提升工作效率,还能在缺少备件的...
BIOS通常存储在计算机主板上的ROM或Flash Memory中,其中包含了引导代码(BOOTBLOCK)和配置数据(ESCD),以及一系列的中断服务例程。 2. USB(Universal Serial Bus)通用串行总线:USB是一种广泛使用的串行总线标准,...
可以使用工具如Award BootBlock BIOS Recovery或Flash Utility来备份。 3. **获取新LOGO**:新LOGO通常为BMP格式,分辨率一般为320x240像素,颜色深度为256色(8位)。你需要一个符合规格的图像编辑软件来创建或...
【mkbb.rar_bootblock】是一个与引导块(bootblock)相关的工具,主要目的是为了创建一个适合SRM(System ROM Monitor)控制台微型加载器的引导扇区。在深入讲解这个工具之前,我们先来理解一下引导块和SRM的概念。 ...
接下来,使用objdump反汇编bootblock.o,生成bootblock.asm,然后使用objcopy把ELF格式的执行文件bootblock.o转换成二进制格式的执行文件bootblock.out。最后,使用sign执行程序,把bootblock.out扩展到512字节,...
- `bootblock`依赖于`bootasm.o`和`bootmain.o`,通过`ld`链接生成`bootblock.o`,然后使用`objdump`进行反汇编,`objcopy`将其转化为二进制文件。`sign`程序用于对生成的bootblock进行签名。 1.1.3 **ucore.img...
本文将详细解析一些常见的BIOS、BIOS刷新失败后的Bootblock、MBR主引导区以及DOS活动分区中的错误信息,帮助用户理解其含义并采取相应措施。 1. BIOS中的提示信息: - Drive A error: 表示软驱A有问题。 - System...
综上所述,该BIOS安全更新及保护系统构建了一个立体的防护网,通过硬件、固件和软件的三层保护,有效防止了恶意软件对BIOS的攻击和篡改,确保了系统的稳定运行和信息安全。这一设计对于提升计算机系统的整体安全性,...
HP Z420 Z620 Z820 BootBlock升级 有关如何使“版本1”的HP Z420,Z620和Z820工作站与Ivy Bridge处理器兼容的指南和资源集合。 请参阅此存储库中的PDF以获取指南,并随时发布问题! 相关论坛主题: : 软件Flash...
这是一篇Award BIOS逆向工程的文章,可以加深对BIOS工作流程的认知,提到很多我们在逆向工程中经常犯的错误, 是一篇很好的文章
20. **Bootblock启动时的提示信息** - 硬件初始化失败,可能需要检查硬件配置或BIOS更新。 21. **MBR 主引导区提示信息** - 主引导记录(MBR)损坏可能导致无法启动操作系统。 22. **Error loading operating ...
2. BIOS刷新失败后的Bootblock启动提示: - Detecting floppy drive A media:检测软驱A的介质类型。 - Drive media is: 1.44Mb1.2Mb 720Kb 360K:显示软驱格式信息。 - DISK BOOT FAILURE, INSERT SYSTEM DISK ...
2. **BIOS刷新失败后的Bootblock启动提示** - **Detecting floppy drive A media...**:检测软驱A的媒介类型,如果失败,可能是软驱问题。 - **Drive media is : 1.44Mb1.2Mb 720Kb 360K**:显示软盘驱动器的容量...
coreboot 由C语言实现,仅使用少量汇编代码,并且执行少量代码后即可进入保护模式。它允许加载Linux内核以及裸机 ELF 程序,并能通过SeaBIOS提供BIOS调用服务,支持需要依赖BIOS服务的操作系统。 coreboot 历史起源...