SeaBIOS是一个开源的16bit x86 BIOS程序,它可以运行在模拟器上,或者是在x86硬件平台上和coreboot一起使用。这里主要介绍其运行在QEMU+KVM这样的虚拟化模拟器上的情况,对coreboot的情况暂时不说明。

BIOS程序是计算机上电后,CPU第一个开始运行的程序,完全运行在裸金属上,用于完成对系统硬件的初始化,并且为启动OS做好准备。BIOS程序跟具体的硬件具有很高的耦合度,基本上不同的硬件架构都会对应不同的BIOS程序,所以一般计算机厂商都会自己开发BIOS程序,虽然可能有很多部分是可以共用的,但是每个厂商设计的计算机硬件架构都会有区别,所以还是有一部分需要自己定制。SeaBIOS虽然是运行在模拟器上,但是也有自己适配的一套硬件架构,理解SeaBIOS适配的硬件架构(下一篇文章会讲)对于理解SeaBIOS的代码具有很重要的作用。

SeaBIOS也像正常的BIOS一样,在虚拟机上电的时候,会被加载到地址空间0xFFFFFFF0处,并且该处是一条跳转指令,虚拟机的虚拟CPU会去执行SeaBIOS的代码,完成虚拟硬件的初始化,中断服务函数的设置,ACPI表、SMBIOS表等的创建,最后引导启动OS。

SeaBIOS和正常BIOS的区别在于其运行的环境是一个由Hypervisor模拟出来的环境,有很多地方可以简化,主要表现为:

  1. 虚拟化环境中对硬件设备进行模拟的对象是硬件设备的功能及对外的接口,并不需要去模拟硬件设备的内部运行机制和设备的物理特性,所以就可以大大简化一些模拟设备的配置和初始化,其中包括:

    1. 芯片配置上,传统的BIOS需要对主板上的各个芯片,如CPU、南桥芯片、北桥芯片等进行各种配置,让其能够正常运行起来。而在虚拟化环境中,这些物理芯片一般都是不存在的,所以那些涉及到芯片内部运行机制、芯片物理特性的配置都将不再需要,SeaBIOS只需要关注和芯片功能相关的配置即可。

    2. 内存配置上,传统的BIOS都会包含MRC代码(内存厂商提供)用于对内存进行初始化,但是在虚拟化环境中,内存已经完全配置好了,所以SeaBIOS里面根本找不到内存初始化的代码,最多只是对e820表进行配置,或对内存的属性进行更改。

    3. 总线配置上,计算机上的总线,特别是一些较高速的总线如PCI,DMI,PCIe,QPI之类的总线,都会分成物理层、链路层、传输层等多层结构,为了让物理总线能够正常运行起来,传统的BIOS都需要对这些总线各个层的寄存器进行配置,对总线的运行模式、运行速率等参数进行调整、训练(training),这也是一个比较耗时的操作。但是在虚拟化环境中,这些总线物理特性上的配置和初始化都可以省去,因为并没有真正的物理总线存在,SeaBIOS要做的就是对这些总线在软件层面上的接口进行配置,如PCI总线的配置空间。

  2. 从SeaBIOS提供给OS的各种信息表上看,如APCI表、SMBIOS表、E820表等,传统的BIOS基本上都得靠自己去探索系统的所有信息逐步建立这些信息表,这可能是一个比较漫长的过程。而在虚拟化环境中,这些表很多并不需要SeaBIOS自己去逐步建立,很多可以是Hypervisor就可以通过特定的方式将这些表传给SeaBIOS,SeaBIOS只需要在有必要的时候对这些表的某些信息进行更新。

所以,总的来说,可以将SeaBIOS看成简化版的BIOS,主要从上面说的几个方面进行了简化。

同时也欢迎关注同名微信公众号“河马虚拟化”第一时间获取最新文章。

SeaBIOS(1) - 简介相关推荐

  1. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  2. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  3. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  4. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  5. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  6. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  7. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  8. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

  9. 计算机视觉系列最新论文(附简介)

    计算机视觉系列最新论文(附简介) 目标检测 1. 综述:深度域适应目标检测标题:Deep Domain Adaptive Object Detection: a Survey作者:Wanyi Li, ...

最新文章

  1. k近邻算法之 k值的选择
  2. flink state ttl
  3. How Nokia both helped and hindered Microsoft's earnings
  4. GDCM:gdcm::Value的测试程序
  5. 传递集合对象_面试必备——Java集合框架
  6. 微软web服务器组件,iis8.0安装包微软Web服务器组件 官方版
  7. 服务器用netstat卡_PHP安全:服务器端口安全
  8. 干掉visio,这个画图神器太香了
  9. 黑客帝国装逼的代码雨
  10. 【IDEA】IDEA 格式化 代码技巧 idea 格式化 会加 <p> 标签
  11. Windows系统怎么将dmg文件转换为iso格式
  12. 粘贴PDF,删除空行
  13. 酒桌扑克娱乐喝酒小游戏微信小程序源码下载多娱乐功能支持流量主
  14. SPSS T检测原理及结果分析
  15. 阿拉伯数字转换成汉语数字
  16. 戴文渊 李一男 李三琦
  17. ssm毕设项目磐基建筑机械租赁有限公司机械租赁系统41c32(java+VUE+Mybatis+Maven+Mysql+sprnig)
  18. MySQL之mysqlcheck、check、optimize和analyze
  19. JBI2.0 at JavaOne[zz]
  20. 使用 Cipher CipherInputStream CipherOutputStream 实现对文件的加解密

热门文章

  1. 如果给定世界价格是1单位计算机交换22,可以帮帮我吗?我有几个题目不会做,有劳各位了。...
  2. js创建json数据并保存
  3. 小陈学JS Do-while循环练习
  4. 高德地图map.add(marker),marker标记不显示
  5. 〖Python自动化办公篇⑮〗- PPT 文件自动化 - 创建 PPT 文件(9种样式)
  6. ping包测试内容写入文件,并使用python对相应的结果进行统计分析
  7. ubuntu键盘输入中文延迟卡顿问题
  8. 职场心理 自述-共勉
  9. 狭义相对论最基础的知识
  10. android beam传输速率,三星S Beam 与Android Beam有什么不同