0

首先,我应该提到我正在使用 2.6.32 Linux 内核。我正在寻找基于系统调用 ID(定义在 中/linux/arch/x86/kernel/syscall_table_32.S)执行正确系统调用的源代码。据我了解,系统调用是通过中断完成的,系统调用 ID 在 eax 寄存器中。因此内核必须服务中断,并根据 eax 寄存器中的 ID 执行适当的系统调用。

我在哪里可以找到发生这种情况的源代码?即使只是一些关于我应该寻找什么来找到此代码的指导,也将不胜感激。

4

1 回答 1

2

如果我正确理解您的问题,我相信您正在 /arch/x86/kernel/traps.c 中寻找 system_call() - 此函数用于保存系统调用号和所有 CPU 寄存器,但它发生在在您的情况下(x86),/arch/x86/kernel/entry_32.S 中的程序集链接。如果您有兴趣了解更多关于这种链接发生方式的信息,请查看 O'Reilly 的《Understanding the Linux Kernel》一书中的第 6 章和第 10 章。

于 2013-10-10T04:56:07.323 回答