在阅读操作系统概念(7e,Silberschatz,Galvin,Gagne)时,我遇到了一个关于向 linux 内核添加系统调用的学习项目。书上说
Linux 内核最新版本的系统调用号列在 /usr/src/linux-2.x/include/asm-i386/unistd.h 中。(例如,__NR_close 对应于为关闭文件描述符而调用的系统调用 close(),被定义为值 6。) /usr/src/linux-2.x/arc/i386/kernel/entry .S 在标题 ENTRY(sys_call_table) 下。请注意,sys_close 存储在表中编号为 6 的条目中,以与 unistd.h 文件中定义的系统调用号一致。(第 75 页)
我已经从 ubuntu 存储库下载了最新的 linux 源代码包,并发现上述源文件的目录和文件名发生了微小的变化。但是文件/usr/src/linux-source-2.6.31/arch/x86/kernel/less syscall_table_32.S 中有一个有趣的事情让我感到困惑,正如书中所说,sys_close 存储在编号为6的条目中,但是,在 unistd.h 文件中 __NR_close 定义为 57,而不是 6。这种差异的原因是什么?
提前致谢