如何编写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.komodule-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
相关产品推荐
相关产品推荐

