【问题标题】:Makefile only works on terminal, fails when using EmacsMakefile 仅适用于终端,使用 Emacs 时失败
【发布时间】:2021-06-02 08:27:29
【问题描述】:

我目前正在尝试在 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

是什么导致了这个错误?

【问题讨论】:

    标签: c linux makefile emacs linux-device-driver


    【解决方案1】:

    据我了解,/lib/modules/5.8.0-7642-generic/build 是指向/usr/src/linux-headers-5.8.0-7642-generic 的符号链接。

    1. 您可以改用/usr/src/linux-headers-$(shell uname -r),然后重试。
    2. 添加test 规则以显示-C 的状态信息,如下所示;
    test:
        stat $(KERNEL_DIR)
    

    这应该显示它指向的内容和位置。

    如果您在 GUI 会话中,当终端在没有它的情况下运行时,某些东西可能会将您的 emacs 沙盒化。您可能有某种“假根”来将其与漏洞隔离开来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 2014-10-27
      • 2019-11-25
      • 2018-12-03
      • 2012-04-20
      • 1970-01-01
      • 2020-03-16
      相关资源
      最近更新 更多