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

如何编写Makefile编译包含Linux内核模块的多文件工程?

解决内核模块编译时无法识别uart.c函数的Makefile写法

你的问题出在当前Makefile只指定了编译module.c生成module.o,但没有把uart.c纳入内核模块的编译链路,所以链接阶段找不到uart.c里定义的函数。修改后的Makefile需要明确将uart.c对应的目标文件加入模块依赖:

obj-m := module.o
# 指定组成module.ko的所有目标文件
module-objs := module.o uart.o

KERNELDIR = /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

all:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
	echo "building module for intel architecture:"

clean:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) clean

关键说明:

  • obj-m := module.o 声明要构建的内核模块名为module.ko
  • module-objs := module.o uart.o 告诉内核构建系统,module.ko需要由module.o和uart.o这两个目标文件链接而成,这样Make会自动编译module.c和uart.c
  • 增加clean目标是为了方便清理编译过程中生成的临时文件和最终模块
  • 由于uart.h和源文件在同一目录,且已经在module.c中用#include "uart.h"引入,内核构建系统会自动处理头文件查找,不需要额外配置路径

内容的提问来源于stack exchange,提问作者Yael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:18:11