Linux-Kernel

為什麼 Linux 核心標頭檔包含對不存在的標頭檔的引用?

  • March 21, 2016

我正在嘗試在 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

我的問題是:

  1. 為什麼現代核心標頭檔包含對(顯然)不存在文件的引用,而不是自己提供它們?
  2. 我在哪裡可以獲得asm/uaccess.h編譯所需的版本和其他標頭檔?

iBCS 已經過時了,已經很久了。Linux 內部發生了太多變化,即使在早期的 4.x 核心上,它​​仍然有可能編譯。今天它是 linux-abi,但自 2013 年以來它已經死了。也許 binfmt 模組之一今天可以完成這項工作。

引用自:https://unix.stackexchange.com/questions/271265