【问题标题】:Trying to compile code from OS Dev tutorial尝试从 OS Dev 教程编译代码
【发布时间】: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


【解决方案1】:

我上面的评论不是很清楚。我的意思是“'file' 命令在你的 kernel.bin 和他们的上报告什么?”。链接器的输出是一个原始二进制文件。它应该以 grub 识别的几个神奇单词开头。它们在“mboot”附近的 start.asm 中定义。我怀疑你的和他们的不一样。

我手边没有 nasm,所以无法构建,但您可能想先比较 .bin 文件的前几个单词。

【讨论】:

  • 当我对作者(工作)内核和我的内核运行文件命令时,我得到了他们两个的“数据”,所以它不是指向任何问题,而是查看 vim 中的二进制文件我可以看到我的以“Hello World”一词开头,而作者没有。提供的 start.asm 文件确实告诉我们该文件确实需要特定的字节模式才能被 grub 正确识别,所以看起来这就是问题所在。我不确定我需要做什么来解决这个问题:-s
【解决方案2】:

事实证明,用于编译应用程序的行被明确设置为编译为“aout”格式,这是指南所说的,也是我认为正确的。只有阅读“barebones”指南中的内容才能使我确信我可能感到困惑。一旦我将那一行更改为“nasm -f elf”,它就一切正常了。

这是我存储库中的一个标记,它指向 bkerndev 教程代码(如何编写自己的操作系统)的基本 WORKING 版本,以供将来参考和担任我职位的人使用。..

它带有一个生成文件,用于从 32 位 Linux 系统构建它。

http://github.com/PhillipTaylor/farmix/tree/bkerndev_tutorial_working

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2012-05-06
    • 2019-10-08
    相关资源
    最近更新 更多