【发布时间】:2019-07-04 05:32:35
【问题描述】:
我用 C++ 编写了一个简单操作系统的基础,但没有运气研究如何为这个操作系统编写一个简单的引导加载程序,以便与 GRUB 或类似的东西一起使用,以使编写引导加载程序更容易一些。看看it's GitHub repository,看看我要启动什么代码。
操作系统需要一些非常简单的东西才能运行并完全正常运行。它需要能够使用标准 C++ 库(例如iostream、fstream、string.h,可能还有iomanip)。它还需要具有任何类型的文件系统(NTFS、FAT、FAT32、Ext4 等)。而且,最重要的是,它需要一种方法来执行其他可执行文件(通过system() 或任何更安全的方法)。
目前它可以从硬编码目录运行可执行文件(称为“命令”),在完全加载内核之前运行可执行文件(称为“kautorun”),并且可以在 Win32 和 GNU/Linux 之上编译和运行。
最好,我希望能够轻松编写引导加载程序,我正在考虑使用 GRUB 和一些特殊的编译器命令来完成它。我只是不确定如何解决这个问题。我该怎么做才能让它工作?而且,我是不是从错误的角度来处理这个问题?
编辑:为了缩小范围,我需要一个引导加载程序来运行这些可执行文件,保留我使用的 C++ 库,并保持目录结构完整。希望这可以缩小范围,并让这个问题因过于宽泛而不再存在。
【问题讨论】:
-
标准 C++ 库 + 文件系统 + 甚至只是能够运行进程 =/= “非常简单的事情”。你应该看看 osdev wiki,因为你认为你可以访问的东西比你真正拥有的要多得多。
-
grub 的进展是否足以让操作系统摆脱从 16 位实模式到 32/64 位保护模式的需要?您需要在程序集中编写该部分
-
@MichaelVeksler,实际上 GRUB 会为你做这件事,你只需要几行内联汇编来设置堆栈并获取从 GRUB 传递的信息。
-
@r3musn0x 是真的吗?如果是,您将如何实现它,因为这听起来很棒!
-
这看起来很有趣,本。很有野心。我认为您是对的:关注 GRUB,但也要注意@MichaelVeksler 的建议:x86 16 位实模式可能需要您注意,因为 x86 引导的分层过程。这很复杂,而且比我知道的要多。祝你好运。
标签: c++ operating-system boot