我正在尝试建立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_generic
uaccess.h
我的问题是:
为什么现代内核头包含对(显然)不存在的文件的引用,而不是提供它们本身?
我在哪里可以获得编译所需的版本
asm/uaccess.h
和其他标头?
答案1
iBCS 已过时,已用于长的时间。 Linux 内部发生了太多变化,即使在早期的 4.x 内核上,它仍然有机会编译。今天是 linux-abi,但它自 2013 年以来就已经消失了。也许今天 binfmt 模块之一可以完成这项工作。