【发布时间】:2013-12-31 02:33:39
【问题描述】:
我想通过Xinu 了解有关操作系统和网络的知识。我从github上的the xinu-os repo下载了源代码(最高4d489eead3a49170f69041b959bd5a1bd8dff92d)并自己编译了xinu.boot和xinu.elf。为了真正深入了解它,我想做一些修改和测试。所以我的目标(也是这个问题的目标)是在 VBox 中启动 xinu。
稍微解释一下,我知道在the Xinu Page,在可供下载的代码部分下有一个Versions of Xinu for a VM along with instructions项目,其中包括一个VBox版本(我会参考它作为下面的 VBox 版本)。我不想使用那个版本的原因是它没有像 github 中的代码那样包含那么多的特性。我还知道在 github 中有一个 boot.xinu-os.org 项目,它宣传能够在 javascript PC 模拟器中启动 xinu。我不想使用它的原因是因为似乎有一些限制,而且我认为可能存在比传统方式更多的问题(也许不是)。所以我想我可以用 xinu-os repo 中的代码编译我自己的二进制文件,并以与 VBox 中的 VBox 版本类似的方式轻松运行它们,但我似乎错了。
Xinu 页面的 VBox 版本使用 pxe 和 grub 启动。我所做的如下:
- 我从 xinu-os 存储库克隆。
-
我按照Multiboot Specification#OS-image-format,在_start的末尾添加了所需的标头,以使二进制多引导兼容:
/* /xinu/loader/platforms/x86/start.S * ... * #define MULTIBOOT_HEADER_MAGIC 0x1BADB002 * #define MULTIBOOT_HEADER_FLAGS 0x00000003 * _start: * ... */ jmp startup /* Enable multiboot support */ .align 4 .long MULTIBOOT_HEADER_MAGIC .long MULTIBOOT_HEADER_FLAGS .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) 我用修改后的代码构建了我的
Xinu.boot和Xinu.elf。- 我按照提示设置了minicom,成功启动了VBox版本。
- 我检查了VBox版本中使用的
Xinu.boot,发现它是i386的32位精灵,但是我用Makefile构建的Xinu.boot是由objcopy制作的,而Xinu.elf是一个精灵。所以我将Xinu.elf重命名为Xinu.boot,并在VBox版本中替换了它。 - 然后我尝试在相同的环境中使用除
Xinu.boot之外的相同文件进行引导。 - 失败了,grub 给了我 grub 命令行。我也尝试使用调试版本。它也失败了,但在显示 grub 命令行之前,它显示了一条消息“未知命令:r(0, 1)”。
所以我的主要问题是我的Xinu.boot 和 VBox 版本中阻止我的 pxe 启动的根本区别是什么?谁能解释一下?
我花了很多阅读和实验才到达那里。我的目标仍然是运行我自己构建的Xinu,对其进行修改和测试。它不需要用 pxe 启动,但我希望我可以在 VBox 中而不是在某些真实硬件上运行它。我的其他问题是:
- 有没有其他(更简单)的方法可以在 VBox 或虚拟机中运行 xinu?
- VBox 版本中的grub 是如何配置找到
Xinu.boot来引导的?因为我试图在文件中搜索xinu,但什么也没有。 - “未知命令:r(0, 1)”消息是什么意思,是 grub 还是 xinu 发出的?
- 我应该如何调试这样的系统?我试图在 start.S 中插入一些
kprintf,但没有成功。我也尝试过 gdbXinu.elf,但在运行了一些指令后它给了我一个分段错误。为什么它不能在 gdb 中调试? (我是组装新手。所以请解释一下。) - 有没有可靠的 Xinu 社区或邮件列表来解决这类问题?
我知道我的问题可能很特殊和复杂,我很难用英语表达它们。任何帮助将不胜感激!提前致谢!
【问题讨论】:
标签: unix virtualbox grub