我想了解一些关于操作系统和与西努联网的知识。我在github上下载了新奥斯回购的源代码(最多4d489eead3a49170f69041b959bd5a1bd8dff92d),并自己编译了xinu.boot和xinu.elf。为了真正做到这一点,我想做一些修改和测试。所以我的目标(也是这个问题的目标)是在VBox中引导鑫。
为了稍微解释一下,我知道在辛努页上,在“代码可供下载”一节中有一个VM的Xinu版本及其说明项,其中包括一个VBox版本(我将将其称为下面的VBox版本)。我不想使用该版本的原因是它没有github中的代码包含更多的特性。我还知道,github中有一个boot.xinu-os.org项目,该项目宣传说可以在javascript PC仿真器中引导xinu。我不想使用的原因是因为似乎有一些限制,而且我认为可能存在比传统方法更多的问题(也许不是)。因此,我想我可以用xinu-os回购的代码编译我自己的二进制代码,轻松地以类似于VBox版本的方式在VBox中运行它们,但我似乎错了。
Xinu页面的VBox版本使用pxe和grub引导。我所做的是:
Xinu.boot和Xinu.elf。Xinu.boot是用objcopy制作的,而Xinu.elf是一个精灵。因此,我将构建的Xinu.elf重命名为Xinu.boot,并在VBox版本中将其替换。Xinu.boot之外的相同文件进行引导。因此,我的主要问题是,我的Xinu.boot和VBox版本之间的根本区别是什么,它阻止了我的启动?有人能解释一下吗?
我花了大量的阅读和实验才达到这个目的。我的目标仍然是运行我自己创建的Xinu,修改和测试它。它不需要用pxe引导,但我希望我可以在VBox中运行它,而不是在一些真正的硬件上运行。我的其他问题是:
Xinu.boot?因为我试着在档案里寻找新奴,但一无所获。kprintf,但一无所获。我也尝试了gdb Xinu.elf,但是在运行了一些指令之后,它给了我一个分段错误。为什么不能在gdb中调试呢?(我是个装配新手。所以请解释。)我知道我的问题可能是特殊和复杂的,我很难用英语来表达它们。任何帮助都将不胜感激!提前感谢!
发布于 2014-01-14 13:31:01
经过相当多的阅读,现在我可以在QEMU中成功地运行github版本的xinu。我就是这样做的:
CTRL-ALT-3,你会找到它的!使用QEMU引导时,可以跳过grub,以及grub引起的任何问题。
QEMU也为调试提供了方便。如果你带着:
qemu-system-i386 -s -S -kernel xinu.elf在运行任何指令之前,QEMU将启动和暂停(有关参数的更多详细信息,请参阅QEMU手册)。然后,您可以启动gdb并通过以下方式附加到它:
gdb xinu.elf在gdb启动后,发布:
target remote localhost:1234您将把gdb附加到运行xinu的QEMU进程上。您可以对gdb做任何您通常做的事情,例如设置断点、显示寄存器或拆卸等等。当所有操作完成后,发出c (continue)开始。
您可能会发现无法用gdb显示CRx寄存器。您可以直接使用QEMU实现这一点。按下QEMU窗口中的CTRL-ALT-2,您将被放入控制台,您可以在其中发出:
info registers您将得到包括CRx寄存器在内的所有寄存器。在该控制台中可以发出更多的命令。help会给你更多关于他们的信息。
https://stackoverflow.com/questions/20547610
复制相似问题