遍览Linux内核源代码?

4
我的目标是学习Linux的工作原理。我知道还有更小的内核——我有《Minix》这本书,但问题在于虽然教授概念还可以,但我真正想学习的是Linux内核的细节。
我有Linux内核源代码的副本。有没有什么技术可以让我“启动”这个源代码,以某种方式逐步执行代码,这样我就可以看到正在发生什么?
如果没有,那么了解正在发生的确切情况(包括推荐的书籍、博客、技术文档等)的下一个最佳技术是什么?
编辑:
源代码是否有特定操作系统区域的良好文档?

我假设你已经知道其他更简单的操作系统是如何工作的了?我的建议是先学习架构,学习如何编写设备驱动程序和内核模块,这样你就会对你所看到的内容有一些背景了解,知道每个部分的作用。 - hsanders
2
1)学习如何阅读源代码。 2)阅读源代码。 3)返回1。 - wildplasser
@wildplasser 我没有问题查看源代码,只是我认为会有很多冗余代码,导致难以浏览。 - user997112
仔细看,它并不臃肿。只是有很多内容而已。大部分代码涉及维护各种表格(=资源)。其余是细节。 - wildplasser
2个回答

8

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

然后您可以在调试器下运行它,在任何地方设置断点或其他内容,就像正常的用户空间任务一样。


谢谢你,@MarkR。这种技术有一个名称吗?我可以用它来找到更多信息吗? - user997112
这一切都在用户模式Linux文档中。 - MarkR

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)在调试模式下加载内核,并将符号表kernel.syms(如果我没记错)加载到GDB中,您可以看到正在执行的内容。 这对于运行内核的速度非常缓慢,而且只对调试开发内核有用,但如果您愿意接受减速,则可以尝试一下。 正如提到的那样,最好读源代码,至少这就是我学习的方式。找到您想要查看的任何功能的关键函数,步进代码并查看发生了什么(使用类似TAGS或CSCOPE的工具可以使这更容易)。

@user997112 我没有阅读过它,所以不知道该告诉你什么。我建议的那本书涵盖了网络方面,但可能没有那么深入。最好还是阅读代码,因为现在的Linux发展速度太快,书籍跟不上步伐。 - Jesus Ramos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接