4

我的目标是了解 Linux 的工作原理。我知道那里有更小的内核——我有 Minix 书,但问题是在教授概念的同时还可以——我真的很想了解 linux 内核的细节。

我有一份linux内核源代码。有什么技术可以让我“启动”这个源代码并以某种方式逐步执行代码,以便我可以看到发生了什么?

如果不是,那么了解正在发生的事情的下一个最佳技术是什么(包括推荐的书籍、博客、技术文档等)?

编辑

源代码是否有针对特定操作系统领域的良好文档?

4

2 回答 2

8

您可以在“用户模式 ​​Linux”架构中构建内核,并在另一个 (Linux) 操作系统中将其作为正常进程运行。(提示:RTFM,“make ARCH=um”)

然后你可以在调试器下运行它,在任何地方或任何地方设置断点,它就像一个普通的用户空间任务。

于 2013-01-16T22:13:18.550 回答
5

http://www.amazon.com/Professional-Linux-Kernel-Architecture-Programmer/dp/0470343435/ref=sr_1_1?ie=UTF8&qid=1358373427&sr=8-1&keywords=professional+linux+kernel+architecture

我推荐这本书胜过其他任何书。这将解释一切如何运作并且仍然非常准确。

概念真的很重要,本书将向您指出内核中的关键功能,以便您自己了解详细信息。要阅读的简单内容是一些系统调用,或者只是打开一些核心文件并通读函数并尝试弄清楚它们在做什么,或者只是手动跟踪内容。

如果你想单步执行内核,你可以使用像 QEMU 这样的虚拟化软件并在调试模式下加载内核(QEMU 支持远程 GDB),你可以将内核的符号表kernel.syms(IIRC)加载到 GDB 中,你可以看看到底在执行什么。虽然对于在内部运行的内核来说这可能非常慢,并且实际上只对调试开发内核有用,但是如果您愿意接受减速,那就去吧。

如前所述,最好是阅读源代码,至少我是这样学习的。找到您想要查看的任何功能的关键功能,并且不难单步执行代码并查看发生了什么(使用 TAGS 或 CSCOPE 之类的东西可以使这更容易)。

于 2013-01-16T21:59:49.180 回答