You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用Make的-C选项编译ArchLinux内核模块?

解决ArchLinux内核模块编译的Makefile找不到问题

问题原因

你用的命令逻辑是对的:-C /lib/modules/$(uname -r)/build已经让make切换到内核构建目录、使用那里的主Makefile;M=$(pwd)是告诉内核Makefile,你的模块源代码在当前工作目录。但报错的核心是:内核的主Makefile会去M指定的目录(也就是你的camera目录)找属于你这个模块的专属Makefile,而不是直接用内核自己的Makefile编译你的代码——你现在的camera目录里恰恰缺少这个模块Makefile。

解决步骤

  1. 确保你在模块代码所在目录:
cd /home/jenia/Documents/kernel-modules/camera
  1. 在该目录下创建模块专属的Makefile,内容如下(把your_module.c替换成你的实际模块源代码文件名):
# 指定要编译的模块对象,比如你的代码是camera_patch.c,就写camera_patch.o
obj-m += your_module.o

# 内核构建目录路径
KDIR := /lib/modules/$(shell uname -r)/build
# 当前模块目录路径
PWD := $(shell pwd)

# 编译目标
all:
	make -C $(KDIR) M=$(PWD) modules

# 清理目标
clean:
	make -C $(KDIR) M=$(PWD) clean
  1. 执行编译命令:
make -j4

或者你也可以直接用原来的命令,但前提是当前目录已经有这个模块Makefile。

额外说明

内核模块编译的机制是:用内核的主Makefile来驱动编译,但需要你在模块目录提供一个简单的Makefile,告诉内核要编译哪些对象文件。你之前的误解是以为要让make直接使用内核的Makefile,但实际是需要两者配合:内核主Makefile负责提供编译环境,模块目录的Makefile指定要编译的内容。

内容的提问来源于stack exchange,提问作者Jenia Be Nice Please

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:32:14