カーネルモジュールとユーザースペースアプリケーションの両方をコンパイルするサードパーティのSWパッケージがあります。残念ながら、このサードパーティは非常に複雑で、Kbuildをカーネルモジュールの構築に使用しません(私は成功しなかった)。私が持っているカーネルソースツリーなしで外部カーネルモジュールを構築する方法
arm-linux-gnueabihf-gcc -D__KERNEL__ -Wall -include /lib/modules/4.4.62-18.6-default/build/include/generated/autoconf.h -MD -MP -Werror -O2 -I /usr/src/linux-4.4.62-18.6/include -I /src/include -DMODULE -c -o hello_dkm.o hello_dkm.c
$(LD) -o $(debug_target) $(LD_COMMON_FLAGS) -g $(debug_Objs)
:
fatal error: /usr/src/linux-4.4.62-18.6/include/linux/thread_info.h:54:29: fatal error: asm/thread_info.h: No such file or directory
付録
- plateform:アルテラのCyclone V SoCの は、私は以下の行を持つシンプルなドライバを構築しようとしました、ARM Cortex A9デュアルコア
- カーネル:Linuxのアルテラ3.7.0
- ホスト:LinuxのopenSUSEの42
PS: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
ありがとうございます。
私は 'C++'タグはこの質問には当てはまりません。 –
コンパイルカーネルモジュールでは、目的に合わせて 'kbuild'を使用しなくても、カーネルビルドディレクトリ*からのいくつかのファイル(カーネルをビルドした後のソースディレクトリ)が必要です。 Linuxヘッダーで(マクロとして)使用されるため、設定オプションが必要です。 'Module.symvers'ファイルのカーネルコアシンボルのバージョンが必要です。 'kbuild'を使わないでビルドプロセス全体を記述すると、スタックオーバーフローのために*広すぎるようです。 – Tsyvarev