如何使程序由BIOS运行?

时间:2018-08-25 21:46:19

标签: c boot bios

我搜索了有关此信息,但未找到任何内容。

想法是:

如果我用C或任何其他语言编写程序,要使其在BIOS中被识别并作为DOS程序或提示程序启动,我还需要做些什么?

我使用ISO和Rufus在带有Windows的闪存驱动器中启动后得到了这个主意,这些驱动器在闪存驱动器中放置了一些代码以供BIOS识别并运行,因此我想对以下程序执行相同的操作:例如我的。

谢谢!

2 个答案:

答案 0 :(得分:2)

有趣但颇具挑战性的锻炼!

BIOS将从引导设备中提取特定区域,称为主引导记录。在具有一个操作系统和一个或多个分区的“正常”情况下,MBR将需要找出在何处可以找到该操作系统,将该操作系统加载到内存中以及将控制权传递给它。到那时,常规的启动顺序开始,稍后,操作系统将开始运行并能够与您进行交互。有关初始活动的更多详细信息,请参见here

现在,出于教育目的,这不是绝对必要的。您可以编写仅读取磁盘固定部分的MBR(BIOS具有允许您从磁盘读取原始扇区的功能,磁盘可以被视为只是一堆扇区,每个扇区包含512字节的信息)。并启动该代码。您基本上可以在任何开源OS中找到开源MBR here

那是“容易”的部分,因为现在您可能想做一些有趣的事情。除非您想自己与硬件的每个部分进行交互,否则您将不得不依靠BIOS提供的服务来与键盘,屏幕和磁盘进行交互。传统上有关BIOS服务的最佳来源是Ralf Brown的interrupt list

一个特定的注意事项:您的C编译器带有一个标准库,该库的许多操作都需要特定的OS(例如,将输出执行到屏幕,它将要求操作系统执行该输出,并且操作系统通常会使用BIOS或直接访问硬件来执行该任务)。因此,在采用上述方法时,您还需要找出一种方法,以使用BIOS且仅此而已的服务替换这些服务,即或多或少重写标准库。

简而言之,要获得可用的东西,您将在编写操作系统的基本部分...

答案 1 :(得分:1)

实际上,BIOS将在接下来的两年内失效(此日期之后INTEL将不再支持任何BIOS),因此您可能想了解UEFI标准。 v2.4中的UEFI允许编写和添加自定义UEFI应用程序。 (顺便说一下,UEFI计算机上的“传统” BIOS设置通常被实现为自定义UEFI应用程序。)