下面是一个简单的 Linux 驱动程序编译的 Makefile 文件。假设你的驱动程序文件名为 my_driver.c
,并且你希望生成的内核模块名为 my_driver.ko
。
# Makefile for a simple Linux kernel module
# Kernel source directory (adjust this to point to your kernel source)
# You can also use the KERNELDIR environment variable
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
# The target module name
MODNAME = my_driver
# The object file corresponding to the source file
OBJ = $(MODNAME).o
# Compiler and flags
CC = $(CROSS_COMPILE)gcc
CFLAGS = -Wall -Wstrict-prototypes -O2
# Rule to build the module
$(OBJ): my_driver.c
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
# Rule to clean the build
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
# Phony targets to avoid conflicts with files having the same name
.PHONY: $(OBJ) clean
说明
-
KERNELDIR:这个变量指向你的内核源码目录。默认情况下,它会使用当前运行的内核版本的构建目录。如果你的内核源码位于其他位置,你可以手动调整这个路径。
-
MODNAME:这是你的模块的名字。在这个例子中,名字是
my_driver
。 -
OBJ:这是生成的目标文件(即
.ko
文件)。 -
CC 和 CFLAGS:定义编译器和编译标志。通常不需要修改这些。
-
编译规则:
$(OBJ)
规则定义了如何从my_driver.c
文件编译内核模块。clean
规则用于清理构建生成的文件。
使用方法
- 将这个
Makefile
文件和你的驱动源码my_driver.c
放在同一个目录下。 - 打开终端,进入该目录。
- 运行
make
命令编译模块。 - 运行
make clean
命令清理构建生成的文件。
编译成功后,生成的 .ko
文件会出现在当前目录下。你可以使用 insmod
命令加载这个模块,用 rmmod
命令卸载这个模块。