GNU/Linux >> Linux の 問題 >  >> Linux

モジュールと同じ名前を持つ複数のソースファイルからカーネルモジュールを構築する

解決策を見つけたので、ソース ファイルをサブ フォルダーに配置しました:

メイクファイル
src/mymodule.c
src/mymodule_func.c

#Makefile
obj-m += mymodule.o
mymodule-objs := ./src/mymodule.o ./src/mymodule_func.o

all:
    make -C $(KERNEL_PATH) M=$(PWD) modules

clean:
    make -C $(KERNEL_PATH) M=$(PWD) clean

カーネル make ファイルで修正する適切な方法は次のとおりです:

# 
obj-m+= my_module.o

#append other source files except my_module.c which would be include by default
my_module-objs+= src1.o src2.o

私の理解では、モジュール名とソース名を同じにすることはできません。モジュール名を module.o として提供することをお勧めします 次に示すように、ロード可能なカーネル モジュールをコンパイルするために Makefile を使用します。

メイクファイル

# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
    **obj-m := module.o
        module-objs := mymodule.o mymodule_func.o**
    # Otherwise we were called directly from the command
    # line; invoke the kernel build system.
    EXTRA_CFLAGS += -DDEBUG
else
    KERNELDIR   := /lib/modules/$(shell uname -r)/build
    PWD         := $(shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean: 
    $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) clean

Linux
  1. 同じコンピュータ上のあるユーザーアカウントから別のユーザーアカウントにファイルを移動する方法は?

  2. ファイル B に表示される行を別のファイル A から削除するには?

  3. コンパイルされたカーネルモジュールのバージョンを見つける方法は?

  1. カーネル空間からユーザー空間関数を実行する

  2. カーネル モジュール パラメータの変更 (/sys/module を使用)

  3. 現在の Linux カーネル ソースは何ですか?

  1. Linux –どのモジュールがカーネルを汚染しているかを判断する方法は?

  2. ファイルシステム上の任意のカーネル ソース ツリーに対してツリー外カーネル モジュールをコンパイルする

  3. 同じネットワーク内のある IP から別の IP へのポート転送を行うにはどうすればよいですか?