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>

見つかりませんでした。

orフォルダがないようです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モジュールの1つがこれを行うことができます。

関連情報