C 我需要将我的makefile指向什么,才能使它正确地构建内核驱动程序?
我正在为一个班级编写一个简单的驱动程序。我正在使用此生成文件:C 我需要将我的makefile指向什么,才能使它正确地构建内核驱动程序?,c,makefile,linux-kernel,debian,linux-device-driver,C,Makefile,Linux Kernel,Debian,Linux Device Driver,我正在为一个班级编写一个简单的驱动程序。我正在使用此生成文件: obj-m := mysourcefile.o KERNELDIR ?= /lib/modules/$(shell uname -r)/kernel all default: modules install: modules_install modules modules_install help clean: $(MAKE) -C $(KERNELDIR) M=$(pwd) $@ 当我使用以下命令行运行此命令时:
obj-m := mysourcefile.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/kernel
all default: modules
install: modules_install
modules modules_install help clean:
$(MAKE) -C $(KERNELDIR) M=$(pwd) $@
当我使用以下命令行运行此命令时:
make
我得到一个错误:
no rule to make target 'modules'. Stop.
我想指出的是,我的教科书建议这样做:
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
但是,在我的Debian版本(10.6.0-3)(Kernel v.4.19.0-10-amd64)中没有“build”目录,因此我将该文件更改为指向Kernel,因为我认为makefile应该指向内核。我不知道这是不是正确的选择。我的active directory是包含我的源代码的目录
我不确定如何从这一点开始。“因此我将文件改为指向内核,因为我认为生成文件应该指向内核。”-不,
makefile
包含在内核的构建目录中。通常<内核模块的code>build子目录指向该目录。注意,“内核构建目录”和“我的模块源目录”是不同的。“我不确定如何从这一点开始。”-您需要找到内核的构建目录。类似Debian的发行版通常提供“linux headers”软件包以及它们提供的内核。您是否安装了linux-headers-amd64
软件包?如果linux-headers-4.19.0-10-amd64是最新的内核,它应该作为依赖项安装linux-headers-4.19.0-10-amd64
,否则需要手动安装。为什么要猜测?说明位于内核源代码中: