BIOS是如何编译的

4

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


1
这个问题似乎与Unix或Linux无关,因为它涉及到BIOS。 - terdon
5个回答

6

编写我的自己的BIOS

理论上,使用任何能生成可执行二进制文件的语言都可以编写BIOS,但由于需要处理底层硬件,最适合和最常用的是汇编和C语言。

当电脑开机时,没有什么需要编译的,它已经是一个准备好的组装/编译好的二进制文件,存储在内存中(ROM、EPROM、闪存),CPU期望找到它。

你也可以查看Bochs模拟器的BIOS源代码(我认为Qemu和Virtualbox也有各自的BIOS,但不确定源代码是否可用)。

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


6
一个BIOS工程师使用x86汇编语言编写BIOS,然后使用类似MASMNASM的程序“编译”它。
然后将生成的二进制文件烧录到Flash ROM芯片中(使用像这样的工具),然后安装在主板上。
当PC开机时,它开始执行来自该闪存芯片的代码,初始化PC的硬件,然后将控制权交给操作系统。
对上述内容的一些评论:
  • 新一代UEFI BIOS通常使用C语言编写,除了初始启动加载程序仍然采用汇编语言。
  • 编程工具通常只需要用于对空白闪存芯片进行初始编程(在组装线上的全新主板)。一旦系统启动,您通常会使用软件实用程序重新刷新BIOS芯片。
  • 您并不总是需要使用插座式闪存编程工具。在较新的主板上,芯片可能直接表面贴装,而没有插座。在这种情况下,主板上可能会有一个编程连接器,可使用类似此类工具的工具对闪存进行编程。

0

编辑:如评论中所指出,这个答案是错误的。

我觉得你对编译器有误解。

当你编译一个程序时,你是将高级语言(比如C语言)转换成汇编语言。汇编语言程序 = 二进制程序。它们是同一个东西。

所以,并没有什么东西可以编译BIOS。它只是运行而已。


4
我认为你误解了汇编语言。汇编语言是一种低级符号化语言,它的语言操作与特定架构的机器码指令之间有很强的对应关系。用汇编语言编写的程序不只是运行,还需要通过一个 汇编器 把它转换成机器码。 - Thomas Nyman
是的,我的理解也是如此。汇编程序需要汇编器将其转换为二进制(机器码)。计算机无法理解“MOV”等指令。那么是什么将BIOS转换为二进制语言呢? - CODError

0

BIOS被分成多个块。每个块都是LZH压缩的。只有引导块和解压缩块是纯机器码块。块内的可执行代码可以从C语言编译和/或从ASM语言汇编而来。


-1

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


我也这么认为,但正在寻找一篇好的文章来解释整个过程。 - CODError

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接