一、首先,编译外部模块,需要一个已经编译完成的内核。
完全编译过的kernel,删掉其中的源文件(即.c文件),也可以编译外部模块。
二、编译语法
1、手动指定路径
make -C <path_to_kernel_src> M=$PWD
选项"M=<dir>"告诉kernel编译系统编译外部模块的源码路径。
-C $DIR kernel源码路径,编译过程中会改变该路径下内容,编译完成后回 退修改,还原到编译前
2、使用坏境变量
make -C /lib/modules/`uname -r`/build M=$PWD
3、模块安装
make -C /lib/modules/`uname -r`/build M=$PWD modules_install
4、一个简单的Makefile
obj-m :=hack_unlinkat.o
EXTRA_CFLAGS := -Dsymname=sys_call_table
KDIR := /sdb1/linux-4.4.253
PWD := $(shell pwd)
default:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf .*.cmd *.mod.c *.o *.ko .tmp* *.symvers
hack_unlinkat.c是源文件,把Makefile放到源文件目录下,执行make.最后编 译出来的目标是hack_unlinkat.ko