Sudo Make 命令进入错误目录

Sudo Make 命令进入错误目录

我正在尝试编译一个内核模块,并在使用 kthread_create() 创建的 4 个线程上应用竞争条件。但是,当我运行 时sudo-make,它进入了错误的目录,并且没有编译我想要编译的文件,该文件名为 race_module.c,位于名为“Lab4”的文件夹中。它进入的目录是:

make -C /lib/modules/5.4.179CS630Team6/build M= modules
make[1]: Entering directory '/home/parallels/Downloads/linux-5.4.179'
  CALL    scripts/checksyscalls.sh
  CALL    scripts/atomic/check-atomics.sh
  CHK     include/generated/compile.h
  CHK     kernel/kheaders_data.tar.xz
  Building modules, stage 2.
  MODPOST 5983 modules
make[1]: Leaving directory '/home/parallels/Downloads/linux-5.4.179'

我的 makefile 如下所示:

    obj-m += race_module.o
    
    all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    
    clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

我如何才能让它执行我的 race_module.c 文件?欢迎提出任何建议

答案1

我不确定为什么需要运行来构建内核模块;通常的工作流程是以非特权用户身份sudo make运行,然后使用或以 root 身份将构建的模块插入内核。makemodprobeinsmod

默认情况下,Ubuntu 的 sudo 配置会执行env_reset,其中似乎包含PWD变量。因此给出

$ cat Makefile
all:
        @echo "PWD is \"$(PWD)\""

然后

$ make
PWD is "/home/steeldriver/dir"

$ sudo make
PWD is ""

您可以要求 sudo 保留变量:

$ sudo --preserve-env=PWD make
PWD is "/home/steeldriver/dir"

然而恕我直言,最好修改 Makefile 以使用命令pwd代替变量扩展$PWD

$ cat Makefile
all:
        @echo "PWD is \"$(shell pwd)\""

$ sudo make
PWD is "/home/steeldriver/dir"

就你的情况而言:

obj-m += race_module.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean

相关内容