这个笔记是我以前发表在学校BBS上的,同学们反应还不错,特拿到这里与大家分享。
学习linux很长时间了,一直没有时间把经验和挖掘的一些技巧整理出来,这个暑假在家没事,整理了一些与大家分享。由于都是自己的理解和实验产物,所以 肯定有些不当之处,期待交流指正!这个系列文章将以"Ubuntu探秘"命名,内容涉及到整个开机流程及GNOME桌面的hack . 今天发表第一篇心得:BIOS到底干啥用?
BIOS(basic input/output system,基本输入输出系统)是一组被固化到电脑中,为电脑提供最低级、最直接的硬件控制的程序,它是连接软件程序和硬件设备的枢纽。
BIOS存在的目的包括:
首先了解两个概念:北桥(north bridge)、南桥(south bridge).
北桥和南桥组成了主板上的芯片组。北桥主要控制CPU和内存,是系统总线和一级PCI总线的桥接设备,也称host bridge ;南桥负责PCI,PCI-E,USB,VGA等外围总线设备,这些外围设备挂在PCI总线上,通过各自的控制器与PCI总线接口,不同类型的总线通过 bridge接口。
在内存的低端640KB地址空间被称为基本内存,一般用于固定用途,如A0000H~BFFFFH保留给显卡的显存使用,C0000H~C7FFFH为显 卡的BIOS,C0000H~FFFFFH保留给系统中各设备的BIOS,IDE,SATA等BIOS也都在这一段空间中,其中" 系统BIOS"一般占用最后的64KB或更多。(这些信息可以用 cat /proc/iomem | head 查看到)
通常,计算机的启动过程是在主板的BIOS控制下进行的,这个BIOS也称为“系统BIOS”,它的内容在南桥芯片的一块特殊区域CMOS中,主板上的电 池就是为CMOS保存资料而提供电源的。除了这个“系统BIOS”以外,各PCI设备也都提供各自的BIOS,它们的功能是直接访问所在设备的PCI配置 寄存器,以获得PCI设备的信息、配置PCI设备的参数、完成PCI设备的初始化等。系统BIOS在激活时会校验CMOS中的资料是否正确,若正确则会将 这些资料和已找到的硬件信息整合成一张表格,写到内存中,也就是所谓的SMBIOS(System Management BIOS),若错误则用默认的值取代CMOS提供的资料。SMBIOS扮演的主要角色是将主板或X86架构的系统通过BIOS呈现在用户面前。通过 dmidecode命令可以查看该表格,其中有许多Type,每个Type代表一类信息,可以在dmidecode的man page中找到相关定义。
当计算机电源开关被按下时,电源就开始向主板和其它设备供电,此时电压还不稳定,主板控制芯片组(北桥芯片)会向CPU发出一个Reset信号,让 CPU复位初始化。当电源开始稳定供电后,芯片组便撤去Reset信号,CPU马上开始从地址FFFF0H处执行指令,这个地址在“系统BIOS”的地址 范围内,放在这里的一般是一个跳转指令,跳到系统BIOS的真正开始代码处。
从主机上电到加载bootloader这个过程中,系统BIOS主要经历了三个阶段:Pown On ,POST ,加载bootloader .
综上,系统激活流程为:打开电源开关—CPU初始化—BIOS激活—读取并校验CMOS资料、检测硬件状态(此时BIOS代码在flash memo中运行)—生成SMBIOS表格—检测、配置并初始化各硬件—加载bootloader。
另外查看系统BIOS信息的命令主要有两个:dmidecode 和 biosdecode .它们可以显示cpu 、内存、主板型号、OEM信息、主板插槽等信息,这些信息对于查看系统硬件配置非常有用。
PS:转载请注明作者和出处