为什么 Linux 内核头文件包含对不存在的头文件的引用?

为什么 Linux 内核头文件包含对不存在的头文件的引用?

我正在尝试建立IBCS来源在这里)在 Ubuntu 15.10 (Linux 4.2.35) 上。

这个模块显然很旧,因为它的CONFIG.i386文件提供了gcc一个选项-m486,它不再存在,但更改为-march=native似乎工作正常。

该文件emulate.c包含#includes如下内容:

#include <linux/config.h>
#include <linux/module.h>
#include <linux/version.h>
#include <asm/uaccess.h>

在我的系统上,只linux/version.h存在。然而,以下似乎有效:

#include "/usr/include/valgrind/config.h"
#include "/usr/include/sepol/module.h"
#include <linux/version.h>
#include </usr/src/linux-headers-4.2.0-35/include/linux/uaccess.h>

(YMMV,当然,如果你没有的话sepol。)

这是可行的,除了/usr/src/linux-headers-4.2.0-35/include/linux/uaccess.h,其顶部有

#include <asm/uaccess.h>

哪个没有找到。

我似乎没有或asm文件夹。我确实有一个,但它没有。/usr/include/usr/include/linux/usr/include/asm_genericuaccess.h

我的问题是:

  1. 为什么现代内核头包含对(显然)不存在的文件的引用,而不是提供它们本身?

  2. 我在哪里可以获得编译所需的版本asm/uaccess.h和其他标头?

答案1

iBCS 已过时,已用于长的时间。 Linux 内部发生了太多变化,即使在早期的 4.x 内核上,它仍然有机会编译。今天是 linux-abi,但它自 2013 年以来就已经消失了。也许今天 binfmt 模块之一可以完成这项工作。

相关内容