Linux-Kernel
為什麼 Linux 核心標頭檔包含對不存在的標頭檔的引用?
我正在嘗試在 Ubuntu 15.10 (Linux 4.2.35) 上建構IBCS ( source here )。
這個模組顯然很老了,因為它的
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>
哪個沒有找到。
我似乎在or中沒有
asm
文件夾。我有一個,但它沒有。/usr/include``/usr/include/linux``/usr/include/asm_generic``uaccess.h
我的問題是:
- 為什麼現代核心標頭檔包含對(顯然)不存在文件的引用,而不是自己提供它們?
- 我在哪裡可以獲得
asm/uaccess.h
編譯所需的版本和其他標頭檔?
iBCS 已經過時了,已經很久了。Linux 內部發生了太多變化,即使在早期的 4.x 核心上,它仍然有可能編譯。今天它是 linux-abi,但自 2013 年以來它已經死了。也許 binfmt 模組之一今天可以完成這項工作。