zoukankan      html  css  js  c++  java
  • Ubuntu探秘之一:BIOS到底干啥用?

    这个帖子有点老了,前年发表在学校的清水河畔BBS上,转载过来和大家分享。

    -----------------华丽的分割线--------------------------------------------

    学习linux很长时间了,一直没有时间把经验和挖掘的一些技巧整理出来,这个暑假在家没事,整理了一些与大家分享。由于都是自己的理解和实验产物,所以 肯定有些不当之处,期待交流指正!这个系列文章将以Ubuntu探秘命名,内容涉及到整个开机流程及GNOME桌面的hack .   今天发表第一篇心得:BIOS到底干啥用?
              BIOS(basic input/output system,基本输入输出系统)是一组被固化到电脑中,为电脑提供最低级、最直接的硬件控制的程序,它是连接软件程序和硬件设备的枢纽。          
              BIOS存在的目的包括:检测硬件、初始化硬件、分配资源(如IO地址、IRQ号、DMA通道等)以及协助加载操作系统。
             首先了解两个概念:北桥(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 .
    Pown On 阶段      
           这 一阶段从上电开始到屏幕出现信息结束,也就是所谓的激活电源阶段。这一阶段的主要任务是校验CMOS中的内容是否正确、检查主机上某些硬件的状态以确定下 一步的自检,因此,用户无法在屏幕上看到BIOS信息(要等硬件确认后才激活VGA) ,若这个阶段出现错误一般都是致命的(通常为黑屏),只能通过喇叭声来判断错误类型。这个阶段只是检查系统上都有哪些设备,并不初始化。
    POST(power on self test)阶段      
           检查一些关键设备如内存、显卡能否正常工作,并提供简易的内存测试,只要测试没问题,就在屏幕上显示该硬件的基本信息。这个阶段的基本过程如下:系统 BIOS查找显卡的BIOS,存放显卡BIOS的ROM芯片的起始地址通常在C0000H处,然后调用其初始化代码,由显卡的BIOS完成显卡的初始化, 然后屏幕就可以显示信息了,大多数的显卡会在这时显示显卡的一些信息,但是通常只是一闪而过。依次类推,系统BIOS调用在前一个阶段找到的设备的 BIOS代码,以完成相应设备的初始化。查完其它所有设备后,BIOS将显示自己的启动画面,接着检查CPU的类型和工作频率、主机的内存容量,然后系统 BIOS开始测试和配置系统中安装的一些标准硬件设备如硬盘、光驱、COM口、并口等,然后BIOS开始检查并配置系统中的即插即用设备。开机时和开机后 所有需要用到的设备都是在这个阶段被激活的。
    加载bootloader阶段      
             当所有的硬件都检测完毕并没有问题后,BIOS退居幕后的办法是将加载OS的主控权交给硬盘的主引导扇区MBR即硬盘的物理扇区0柱0面1扇区上的内容, 让藏匿于此的开机管理程序(bootloader)将指针带到系统核心的地方。linux常见的开机管理程序为Grub.(以后会分享grub的配置及除 错方法^_^)
            综上,系统激活流程为:打开电源开关—CPU初始化—BIOS激活—读取并校验CMOS资料、检测硬件状态(此时BIOS代码在flash memo中运行)—生成SMBIOS表格—检测、配置并初始化各硬件—加载bootloader
          另外查看系统BIOS信息的命令主要有两个:dmidecode 和 biosdecode   .它们可以显示cpu 、内存、主板型号、OEM信息、主板插槽等信息,这些信息对于查看系统硬件配置非常有用。

  • 相关阅读:
    PAT (Advanced Level) 1010. Radix (25)
    PAT (Advanced Level) 1009. Product of Polynomials (25)
    PAT (Advanced Level) 1008. Elevator (20)
    PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
    PAT (Advanced Level) 1006. Sign In and Sign Out (25)
    PAT (Advanced Level) 1005. Spell It Right (20)
    PAT (Advanced Level) 1004. Counting Leaves (30)
    PAT (Advanced Level) 1001. A+B Format (20)
    PAT (Advanced Level) 1002. A+B for Polynomials (25)
    PAT (Advanced Level) 1003. Emergency (25)
  • 原文地址:https://www.cnblogs.com/geekard/p/2506279.html
Copyright © 2011-2022 走看看