Linuxカーネルでいくつかの「asm」、「生成」ヘッダファイルのソースが見つかりませんか?

Linuxカーネルでいくつかの「asm」、「生成」ヘッダファイルのソースが見つかりませんか?

だから私はカーネル空間で動作するモジュールを書いています。私のコードは正しくコンパイルされ、正常に動作します。

問題は、どこにも見つからないいくつかのヘッダファイルがあることです。ヘッダーファイルがないと、なぜすべてがうまく機能するのかわかりません。どこかに存在しなければなりません。

以下はどこにも見つからないいくつかのヘッダファイルです(もっとたくさんありますが、私の問題にはこれだけで十分でしょう)。

#include <asm/errno.h>
#include <asm/socket.h>  /* /include/linux/socket.h */
#include <stdarg.h>      /* /include/linux/kernel.h */
#include <asm/types.h>
#include <asm/mmiowb.h>  /* /include/linux/spinlock.h */
#include <asm/param.h>   /* /include/linux/jiffies.h */

いくつかのヘッダーファイルは他のアーキテクチャで見つけることができますが、x86これが問題を解決するとは思わないでしょう。

このファイルがどこにあるのかわかりません。

#include <generated/timeconst.h>    /* /include/linux/jiffies.h */
#include <generated/bounds.h>
#include <generated/autoconf.h>     /* /include/linux/kconfig.h */
#include <generated/asm-offsets.h>

次のディレクトリでこのファイルを探しています。Linuxカーネル5.4.31:

/include
/include/uapi
/arch/x86/include
/arch/x86/include/uapi

上記のインクルードパスでこのファイルを見つけようとします。しかし、コンパイル後にLinuxヘッダファイルをソースコードで見つけたので、どこでどのように処理するのかわかりません。

答え1

ビルドで使用されるヘッダーファイルを見つけることができます/lib/modules/$(uname -r)/build/。たとえば、次を参照してください。

find /lib/modules/$(uname -r)/build/ -name timeconst.h

これらのファイルはすべて、ビルドプロセス中にさまざまな方法で生成されtimeconst.hますkernel/time/timeconst.bc

/lib/modules/$(uname -r)/build/実行中のカーネルに対応する生成されたヘッダー(およびその他のファイル)を保存します。これは、外部モジュールのビルドに特に使用できるようにすることです。新しいカーネルをビルドする場合は、ビルドツリー(カーネルビルドまたはツリー内モジュールのビルド後)で作成されたファイルを見つけることができます。

関連情報