我正在尝试按照本书 Operating System Concepts 中给出的项目部分构建一个内核作为一个业余项目。 Silberschatz、Galvin 和 Gagne 着。书中写道:
The system call numbers for recent versions of the Linux kernel are listed in /usr/src/linux-2.x/include/asm-i386/unistd.h.
但是我找不到这个目录。没有像linux-2.x
这样的目录;所有的格式都是 linux-3.x
。
最佳答案
现在这些 header 是自动生成的,它们的表在例如:linux-4.4.5/arch/x86/entry/syscalls/
中。根据发行版,您可能需要单独安装内核头文件,例如:使用 Ubuntu(数据包 linux-headers-$VERSION
。版本必须适合内核版本!)。我发现它们安装在 /usr/src/linux-headers-3.13.0-37-generic/arch/x86/include/generated/asm/
(使用基于 Ubuntu 的 Linux Mint)。那里的 header 包含在 /usr/src/linux-headers-3.16.0-37/arch/x86/include 中的常规
。 (内核的实际版本可能有所不同)。unistd.h
中(同样适用于 x86)/asm/unistd.h
具有主要版本 2 的最后一个内核是 2.6.39.4从 2011 年 8 月开始。您可以尝试它,但它不会在比旧奔腾更现代的硬件上启动。如果你有一台这么旧的机器,或者有一台有足够马力运行虚拟奔腾机器的机器——那就去吧。但我会建议升级您的预订。
如果您想知道为什么您(和我)使用版本 3 而不是最新的 4.9:如果您的硬件与它一起运行,则它没有严重的安全相关错误,并且您不需要最新的内核,然后使用你的发行版给你的那个,他们知道他们在做什么(他大胆地说)。
关于c - 没有目录如/usr/src/linux-2.x/include/asm-i386/unistd.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41205406/