我目前正在尝试编写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时,可能会有一些东西将您的emacs沙盒化。你可能有某种"假根"将其与漏洞隔离。