x86_64 Linuxカーネルヘッダファイルのパス

x86_64 Linuxカーネルヘッダファイルのパス

いくつかのLinuxカーネルヘッダファイルを使ってプログラムをコンパイルしたいと思います。しかし、ちょうど追加すると-I/usr/src/linux-headers-4.4.0-36/include見つかりませんlinux/export.hアーチ/建物amd64、しかし、またはが見つかりませんx86_64uname -pmi説明するx86_64 x86_64 x86_64。私の場合、arch正しいディレクトリは何ですか?

システムはリポジトリのLinux Mintカーネルに付属しています4.4.0.-36

UPD:使いたいです

#include <linux/platform_device.h>
#include <linux/usb/g_hid.h>

こんにちは。cpp:

#include <linux/platform_device.h>
#include <linux/usb/g_hid.h>

int main ()
{
    return 0; // nothing
}

しかし、コンパイラは-I /usr/src/linux-headers-4.4.0-36/include -I /usr/src/linux-headers-4.4.0-36/arch/x86/include多くのオーバーライドが見つからないと言います<generated/timeconst.h>。で見つけました/usr/src/linux-headers-4.4.0-36-generic/include。ただし、ディレクトリの同じパスに対しても-genericいくつかのエラーが発生します。

答え1

32ビットと64ビットのバリエーションを含むほとんどのアーキテクチャはarch同じサブディレクトリにあります。これは時間の経過とともに2.6.24x64_64にマージされ、2.6.25にマージされ、2.6.29にマージされました。 4.7以降、まだ別のアーキテクチャです。 2.6.14に移動し、2.6.27で最終的にマージされました。 2.6 初めにマージされました。x86sh64shsparc64sparcarm64ppc64powerpcppcmips64

したがって、amd64ヘッダーはarch/x86

しかし、通常、カーネルヘッダではなくlibcヘッダに対してプログラムをコンパイルします。 (時には同じ名前でも内容が異なります!)実際にカーネルヘッダファイルが必要かどうかを確認してください。これは、カーネルバージョン間で変更される可能性がある不安定なインターフェイス(たとえば、いくつかの低レベルのデバッグインターフェイス)を使用するプログラムでのみ発生します。 。

関連情報