【问题标题】:How is BIOS compiledBIOS是如何编译的
【发布时间】:2013-10-21 05:15:30
【问题描述】:

BIOS 是用汇编语言编写的,机器只能理解二进制文件。 BIOS 是系统启动时加载到内存中的第一个程序。什么编译BIOS生成二进制文件?

【问题讨论】:

  • 这个问题似乎离题了,因为它是关于 BIOS 而不是 Unix 或 Linux。

标签: bios compiler-construction


【解决方案1】:

BIOS 工程师使用 x86 汇编语言编写 BIOS,然后使用 MASMNASM 之类的程序“编译”它。

然后将生成的二进制文件烧录到 Flash ROM 芯片中(使用a tool like this),然后安装到主板上。

当 PC 开机时,它开始执行此闪存芯片中的代码,初始化 PC 的硬件,然后将控制权交给操作系统。

上面的一些cmets:

  • 较新的 UEFI BIOS 是用 C 语言编写的,但初始引导加载程序除外,它仍然是程序集。
  • 烧录工具通常只用于空白闪存芯片(流水线上的全新主板)的初始烧录。系统启动后,您通常会使用软件实用程序重新刷新 BIOS 芯片。
  • 您不必总是使用带插座的闪存编程工具。在较新的主板上,芯片可能直接表面贴装,而不是插座。在这种情况下,主板上可能有一个编程连接器,用于使用tool like this 对闪存进行编程。

【讨论】:

    【解决方案2】:

    Writing my own BIOS

    理论上,BIOS 可以用任何生成可执行二进制文件的语言编写,但必须处理低级硬件,最合适和最常用的是汇编和 C。

    当 PC 开机时,没有什么可编译的,它已经是一个已组装/编译的二进制文件,已在 CPU 期望的内存(ROM、eprom、闪存)中准备就绪。

    你也可以看看Bochs emulator's bios的来源(我认为Qemu和Virtualbox也有自己的,但不确定是否有来源)。

    还有一些旨在替换 PC BIOS 的开源项目,例如 coreboot

    【讨论】:

      【解决方案3】:

      编辑:这个答案不正确,正如 cmets 中所指出的那样。

      我认为你误解了编译器。

      当您编译程序时,您正在使用高级语言(如 C)并将其转换为汇编。汇编程序 = 二进制程序。它们是一回事。

      所以,没有任何东西可以编译 BIOS。它只是运行。

      【讨论】:

      • 我认为你误解了汇编语言。 assembly language 是一种低级符号语言,在语言操作和特定于体系结构的机器代码指令之间具有很强的对应关系。用汇编语言编写的程序不仅仅是运行,它需要通过assembler转换成机器码。
      • 嗯,这就是我的理解。汇编程序需要汇编程序将其转换为二进制(机器代码)。机器无法理解MOV 等等。什么将 BIOS 转换为二进制语言?
      【解决方案4】:

      我认为主板制造商将其转换并写入ROM?

      【讨论】:

      • 我也这么认为.. 但正在寻找解释整个过程的好文章。
      猜你喜欢
      • 2021-03-28
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2016-09-18
      相关资源
      最近更新 更多