我正在尝试编译一个简单的内核模块,但由于传递给 的参数错误导致编译make
失败gcc
。
这是Makefile
:
obj-m += test.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) test
运行make
产生以下错误:
$ make
make -C /lib/modules/3.16.0-33-generic/build M=/home/user/test test
make[1]: Entering directory `/usr/src/linux-headers-3.16.0-33-generic'
gcc -m elf_x86_64 /home/user/test/test.c -o test
gcc: error: elf_x86_64: No such file or directory
gcc: error: unrecognized command line option ‘-m’
make[1]: *** [test] Error 1
make[1]: Leaving directory `/usr/src/linux-headers-3.16.0-33-generic'
make: *** [all] Error 2
这个答案没有帮助:我已经在所有文件中搜索了/usr
包含-m elf_x86
usinggrep -rnw '/usr' -e "-m elf_x86"
和没有文件匹配的文件,所以我不知道我需要编辑哪个文件来重新定义make
的行为。
您需要编辑自己的模块 makefile。
内核构建 makefile 与常规 makefile 略有不同:目标需要是
modules
,而不是模块的名称 (test
),只需通过obj-m
变量指定即可: