如何创建可启动的 x86_64 程序?
How to create a bootable x86_64 program?
一些背景:
我现在是一名计算机工程专业的学生,我刚刚完成了一个项目,该项目创建了一个微处理器,该微处理器具有在 FPGA 上 运行 的超简单指令集。我选择实现一个简单的文件存储方案、一个 VGA 文本仅显示输出和一个 PS/2 键盘输入。我写了两个主要程序,一个是在处理器 ROM 中的固件,另一个是内核,它提供了一堆库类型的函数,并且能够从文件系统加载和执行文件。这个项目很有挑战性,总体来说很有趣。
我的问题:
我想在现代计算机上进行一些超底层编程,但我似乎找不到任何可以帮助我入门的资源或文档。明确地说,我想找到合适的文档来帮助我用 C、x86 或 x86-64 程序集编写一个我可以编译的程序,并将其格式化为某种形式的可引导数据。我知道这是一项艰巨的任务,通常不是业余爱好者会承担的任务,但我知道这是可能的 (Terry Davis's TempleOS)。
是否有任何我可以阅读的网站或书籍包含制作这样的东西所需的细节?
当心,您可能会发现这个错误。 OS 发展,虽然人口非常少,但仍然是一个蓬勃发展的爱好。一旦开始,你可能永远不会放弃。
由于您的主题行指出 64 位并且您使用现代硬件一词,请注意现代硬件不再具有旧式 BIOS,开发人员在其中编写了包含视频的启动过程out、文件系统 in 和其他标准例程。现代硬件现在使用 EFI 固件,它为您完成所有引导,包括从文件系统读取。对于现代硬件,OS 开发真正从 OS 加载器开始,加载 OS 的部分,这是用高级语言完成的,例如 C/C++ .几乎没有任何集会,实际上就是它的 point/purpose.
不要气馁,目前很多电脑仍然允许旧式启动。然而,旧式引导以 16 位模式启动,然后移动到 32 位模式,然后如果需要,移动到长模式(64 位)。您还可以使用模拟器,这样您就不必拥有单独的系统,只需测试您的开发。我自己更喜欢 Bochs,但我有点偏见,因为我为它编写了一些代码,即大部分(原始)USB 仿真。
如果您想涉足这个爱好,可以从很多地方开始。 I personally wrote a few books on the subject. They show you how to start from when the time the POST gives up control to your boot code, up to the point of a minimal Round Robin style task/thread switching OS, with all the necessary hardware and software basics to do so. There is a forum 到 OS 开发及其 wiki。
同样,像这样的项目不适合胆小的人,尽管它是一种令人愉快的爱好,但大多数人发现这是一种非常好的学习体验。
一些背景: 我现在是一名计算机工程专业的学生,我刚刚完成了一个项目,该项目创建了一个微处理器,该微处理器具有在 FPGA 上 运行 的超简单指令集。我选择实现一个简单的文件存储方案、一个 VGA 文本仅显示输出和一个 PS/2 键盘输入。我写了两个主要程序,一个是在处理器 ROM 中的固件,另一个是内核,它提供了一堆库类型的函数,并且能够从文件系统加载和执行文件。这个项目很有挑战性,总体来说很有趣。
我的问题: 我想在现代计算机上进行一些超底层编程,但我似乎找不到任何可以帮助我入门的资源或文档。明确地说,我想找到合适的文档来帮助我用 C、x86 或 x86-64 程序集编写一个我可以编译的程序,并将其格式化为某种形式的可引导数据。我知道这是一项艰巨的任务,通常不是业余爱好者会承担的任务,但我知道这是可能的 (Terry Davis's TempleOS)。
是否有任何我可以阅读的网站或书籍包含制作这样的东西所需的细节?
当心,您可能会发现这个错误。 OS 发展,虽然人口非常少,但仍然是一个蓬勃发展的爱好。一旦开始,你可能永远不会放弃。
由于您的主题行指出 64 位并且您使用现代硬件一词,请注意现代硬件不再具有旧式 BIOS,开发人员在其中编写了包含视频的启动过程out、文件系统 in 和其他标准例程。现代硬件现在使用 EFI 固件,它为您完成所有引导,包括从文件系统读取。对于现代硬件,OS 开发真正从 OS 加载器开始,加载 OS 的部分,这是用高级语言完成的,例如 C/C++ .几乎没有任何集会,实际上就是它的 point/purpose.
不要气馁,目前很多电脑仍然允许旧式启动。然而,旧式引导以 16 位模式启动,然后移动到 32 位模式,然后如果需要,移动到长模式(64 位)。您还可以使用模拟器,这样您就不必拥有单独的系统,只需测试您的开发。我自己更喜欢 Bochs,但我有点偏见,因为我为它编写了一些代码,即大部分(原始)USB 仿真。
如果您想涉足这个爱好,可以从很多地方开始。 I personally wrote a few books on the subject. They show you how to start from when the time the POST gives up control to your boot code, up to the point of a minimal Round Robin style task/thread switching OS, with all the necessary hardware and software basics to do so. There is a forum 到 OS 开发及其 wiki。
同样,像这样的项目不适合胆小的人,尽管它是一种令人愉快的爱好,但大多数人发现这是一种非常好的学习体验。