Makefile 仅适用于终端,使用 Emacs 时失败
Makefile only works on terminal, fails when using Emacs
我目前正在尝试在 linux 上编写基本内核模块。我可以在终端上编译源代码而没有任何错误
~/Desktop/kernelDriver$ make
make -C /lib/modules/5.8.0-7642-generic/build M=/home/cryonayes/Desktop/kernelDriver modules
make[1]: Entering directory '/usr/src/linux-headers-5.8.0-7642-generic'
CC [M] /home/cryonayes/Desktop/kernelDriver/basicModule.o
MODPOST /home/cryonayes/Desktop/kernelDriver/Module.symvers
CC [M] /home/cryonayes/Desktop/kernelDriver/basicModule.mod.o
LD [M] /home/cryonayes/Desktop/kernelDriver/basicModule.ko
make[1]: Leaving directory '/usr/src/linux-headers-5.8.0-7642-generic'
但是当我尝试在 Emacs 上使用相同的文件进行编译时出现此错误
-*- mode: compilation; default-directory: "~/Desktop/kernelDriver/" -*-
Compilation started at Wed Mar 3 20:42:07
make
make -C /lib/modules/5.8.0-7642-generic/build M=/home/cryonayes/Desktop/kernelDriver modules
make[1]: *** /lib/modules/5.8.0-7642-generic/build: No such file or directory. Stop.
make: *** [Makefile:7: all] Error 2
Compilation exited abnormally with code 2 at Wed Mar 3 20:42:07
它说没有这样的文件或目录。但它确实存在。
这是我的 Makefile 的内容
obj-m += basicModule.o
KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean
导致此错误的原因是什么?
据我了解,/lib/modules/5.8.0-7642-generic/build
是 /usr/src/linux-headers-5.8.0-7642-generic
的符号链接。
- 您可以改用
/usr/src/linux-headers-$(shell uname -r)
并重试。
- 添加
test
规则以显示有关 -C
状态的信息,如下所示;
test:
stat $(KERNEL_DIR)
这应该显示它指向的内容和位置。
如果您在 GUI 会话中,当终端 运行 没有它时,某些东西可能已将您的 emacs 沙箱化。您可能有某种“假根”来将其与漏洞隔离开来。
我目前正在尝试在 linux 上编写基本内核模块。我可以在终端上编译源代码而没有任何错误
~/Desktop/kernelDriver$ make
make -C /lib/modules/5.8.0-7642-generic/build M=/home/cryonayes/Desktop/kernelDriver modules
make[1]: Entering directory '/usr/src/linux-headers-5.8.0-7642-generic'
CC [M] /home/cryonayes/Desktop/kernelDriver/basicModule.o
MODPOST /home/cryonayes/Desktop/kernelDriver/Module.symvers
CC [M] /home/cryonayes/Desktop/kernelDriver/basicModule.mod.o
LD [M] /home/cryonayes/Desktop/kernelDriver/basicModule.ko
make[1]: Leaving directory '/usr/src/linux-headers-5.8.0-7642-generic'
但是当我尝试在 Emacs 上使用相同的文件进行编译时出现此错误
-*- mode: compilation; default-directory: "~/Desktop/kernelDriver/" -*-
Compilation started at Wed Mar 3 20:42:07
make
make -C /lib/modules/5.8.0-7642-generic/build M=/home/cryonayes/Desktop/kernelDriver modules
make[1]: *** /lib/modules/5.8.0-7642-generic/build: No such file or directory. Stop.
make: *** [Makefile:7: all] Error 2
Compilation exited abnormally with code 2 at Wed Mar 3 20:42:07
它说没有这样的文件或目录。但它确实存在。
这是我的 Makefile 的内容
obj-m += basicModule.o
KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean
导致此错误的原因是什么?
据我了解,/lib/modules/5.8.0-7642-generic/build
是 /usr/src/linux-headers-5.8.0-7642-generic
的符号链接。
- 您可以改用
/usr/src/linux-headers-$(shell uname -r)
并重试。 - 添加
test
规则以显示有关-C
状态的信息,如下所示;
test:
stat $(KERNEL_DIR)
这应该显示它指向的内容和位置。
如果您在 GUI 会话中,当终端 运行 没有它时,某些东西可能已将您的 emacs 沙箱化。您可能有某种“假根”来将其与漏洞隔离开来。