阅读一本书来学习Linux内核

阅读一本书来学习Linux内核,linux,linux-kernel,operating-system,Linux,Linux Kernel,Operating System,我已经阅读了这些相关问题的一般答案 但还是留下了我自己的问题。例如,在int0x80上,内核为系统调用提供服务,但是“服务”调用意味着什么呢?e、 g.如果为客户拨打服务电话 \define\uuuunr\ugetuid(\uuuunr\usyscall\ubase+24) 然后,一旦发生int0x80,内核将为调用提供服务。那么内核必须做什么才能实现getuid呢?一定有一些代码在int0x80之后运行。假设已经下载了Linux内核源代码,那么您可以在哪里(例如,什么路径)找到\uu

我已经阅读了这些相关问题的一般答案

但还是留下了我自己的问题。例如,在
int0x80
上,内核为系统调用提供服务,但是“服务”调用意味着什么呢?e、 g.如果为客户拨打服务电话

\define\uuuunr\ugetuid(\uuuunr\usyscall\ubase+24)


然后,一旦发生
int0x80
,内核将为调用提供服务。那么内核必须做什么才能实现getuid呢?一定有一些代码在
int0x80
之后运行。假设已经下载了Linux内核源代码,那么您可以在哪里(例如,什么路径)找到
\uuu NR\u getuid
的源代码实现

find-name“*.c”| xargs grep-n-E“SYSCALL_DEFINE”| grep getuid

getuid(2)的处理程序位于
kernel/timer.c
中,但是您将在那里找到一个不会对您有任何启发的单行函数

我通过在内核源代码目录的顶层说
maketags
,然后说
vi-tsys\u getuid
找到了该文件
sys_*()
是内核中syscall入口点的命名方式。这样做之后,您就可以了解为什么0xDen给出的
find
命令应该可以工作,实际上在我的系统上也是如此。但是,使用起来更快更容易

这就是为什么我一直建议那些想了解内核如何工作的人读一本关于它的书。这些书并没有真正地告诉您每个系统调用是如何实现的,因为这需要它基本上一行一行地引导您完成所有代码。在内核中。如果你把它打印出来,它实际上需要一个书架来容纳所有的内容,即使你是用小字体双面打印的

即使您忽略了所有非核心部分,例如驱动程序、怪异的文件系统、不太流行的CPU类型等,这样您就能够将其缩减到其总大小的1%,您仍然需要处理十万个SLOC。这本大书本身就充满了内容,没有留下太多评论的空间


因此,一本关于内核的书将要做的是让你全面了解内核中发生了什么,这样你就能够找到东西的位置以及它们是如何被激活的。您将了解将所有内容联系在一起的数据结构,以便遵循调用链等。

您说您读过,但显然没有读到最后一段,该段为您指出了一本回答所有这些问题的书。我知道“读这本书”不是一个正确的答案,但实际上,在这种情况下,它是正确的答案。您不会了解内核是如何工作的,一次只能回答一个问题。@Warrenyong,感谢您关注我的问题。我猜你已经投票决定结束这一切了。你能至少给我指一下那本书中我可以找到这个问题答案的章节吗?我喜欢你的最后一句话。答案可能是一次只找到一章或一本书吗?我投票关闭它,因为它不在这里的主题。堆栈溢出用于解决有关编程的特定问题。如果你问我如何改变
getuid()
的行为,我怀疑我会投票关闭它,特别是如果你说了你已经尝试过的话。关于如何钻研特定代码的问题在网站上更有效,因为你可以找到更多了解相关代码的人。在这种情况下,我建议。但是,在主持人费心提出这个问题之前(假设有人提出),我已经将我的评论扩展到下面的答案中。