【发布时间】:2009-12-22 21:59:28
【问题描述】:
这是一个很难问的问题,因为我很肯定我即将遭到仇恨者的轰炸,他们评论说“如果我已经无法编写操作系统,我将永远无法编写操作系统系统”。嗯,我读过 Tanembaum 的 Modern OS,Linux Kernel Development,Understanding the Linux kernel 和其他我仍然不知道我是否可以编写一个操作系统,只有推进编写一个,我才会意识到我没有不知道。最重要的是,我读过的书都没有描述启动顺序/编译顺序。
无论如何我不想消极,但我只想从下面的 bkerndev 教程中构建示例代码,并拥有绝对最低限度的操作系统:
http://www.osdever.net/bkerndev/index.php?the_id=90
您可以从这里下载 zip 格式的相关源代码:
http://www.osdever.net/bkerndev/bkerndev.zip
当您尝试编译此内核时,您会遇到由于某些代码被破坏而导致的各种错误。另一个用户在这里寻求堆栈溢出的帮助:
compiling my own kernel (not from linux-kernel source)
虽然没有得到太多帮助。我通过添加 gcc 标志 fleading-underscores 和更改一些数据类型来解决这些错误。你可以在这里看到我的代码:
http://github.com/PhillipTaylor/farmix
代码将成功编译并给我留下一个 kernel.bin 可执行文件,但是当我从 grub 启动它时,我得到:
错误 13:无法识别或不支持的格式(或类似性质的东西)
当我直接从作者的 zip 文件中获取 kernel.bin 并在我的 eeepc 上运行它时,它启动得非常好,所以我认为我在正确编译代码时遇到了问题。我相信作者是从 Windows 机器上构建它的,但我正在尝试使用 Fedora 10 i386 和 GNU GCC 4.3 来编译它,我认为这是导致问题的原因,所以我问你,我如何构建一个有效的可执行文件核心?我错过了正确的目标还是错误的二进制格式?
我非常感谢有人帮助我完成这个令人尴尬的“第一步”
【问题讨论】:
-
在 OSDev 论坛上获得有用的答案可能会更好:forum.osdev.org
-
我不认为你会因为“我有这么多代码但它不起作用”而获得很大的吸引力。你最好问一系列关于具体问题的问题(问题之间有一些工作时间:快速提问也不会受到赞赏)。
-
似乎有人认为这是个好问题。现在,我认为他正在研究一个很好的问题,但这似乎是一个无益且不清楚的问题。想发表评论吗?
-
如果你在你的 kernel.bin 和他们的上运行这个文件,结果是一样的吗?
标签: c gcc operating-system compilation