【问题标题】:No directory as /usr/src/linux-2.x/include/asm-i386/unistd.h没有目录 /usr/src/linux-2.x/include/asm-i386/unistd.h
【发布时间】:2016-12-18 04:16:51
【问题描述】:

我正在尝试按照 Silberschatz、Galvin 和 Gagne 的书 Operating System Concepts 中给出的项目部分来构建一个内核作为一个爱好项目。书中写道:

Linux 内核最新版本的系统调用号 列在 /usr/src/linux-2.x/include/asm-i386/unistd.h 中。

但是我找不到这个目录。没有像linux-2.x这样的目录;所有格式均为linux-3.x

【问题讨论】:

  • 那是因为您的书描述的是 Linux 内核 2.x,而当前版本是 4.9(sayeth kernel.org on 2016-12-17)。你的书很旧,因此(至少是轻微的)误导。顺便说一句,我不知道您是否需要linux-4.x 而不是linux-3.x,或者尽管版本更改为4.x,他们是否保留了3.x
  • 我也遇到过这个 [链接](csee.umbc.edu/courses/undergraduate/CMSC421/fall02/burt/…) 它提到了几乎相同的目录。因此,如果我想查看指向系统调用处理程序的指针列表,我应该查找哪个文件?
  • 'Fall 02' 大约是 14 年前。当时的内核版本是 2.x。它不再是 2.x。如果要构建 2.x 内核,则需要获取 2.x 源代码,然后您会找到 linux-2.x 目录。您使用的是哪个版本的 Silberschatz?第 9 版的日期为 2012 年,这已经足够久远了,它在发布时可能已经“几乎是最新的”了,但从那时起内核一直在发展。
  • 我使用的是第 9 版。您能指出一些有关如何在最新版本的 linux 中构建基本内核的信息吗?
  • 否;我还没有研究过如何构建 Linux 内核。你需要一个做过这件事的人来帮助你。您可以查看 kernel.org(例如git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/about),但我并没有因为看过而变得更聪明。特别是,我没有找到include/asm-i386,虽然我并没有那么努力。

标签: c linux linux-kernel


【解决方案1】:

这些标题现在是自动生成的,其表格位于例如: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)。那里的标头包含在常规unistd.h 中,可以在/usr/src/linux-headers-3.16.0-37/arch/x86/include/asm/unistd.h 中找到(同样适用于x86)。 (内核的实际版本可能会有所不同)。

主版本 2 的最后一个内核是 2011 年 8 月的 2.6.39.4。您可以尝试它,但它无法在比旧 Pentium 更现代的硬件上启动。如果你有这么旧的机器或者有足够马力的机器来运行虚拟奔腾机器——去吧。但我建议您升级您的预订。

如果您想知道为什么您(和我)有版本 3 而不是最新的 4.9:如果您的硬件使用它运行,它没有严重的安全相关错误,您不需要任何东西最新的内核,然后使用你的发行版给你的那个,他们知道他们在做什么(他大胆地说)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2023-01-17
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多