0
点赞
收藏
分享

微信扫一扫

编译与装载

悲催博士僧 2022-01-09 阅读 50

一、编译

Makefile

#如果已定义KERNELRELEASE,则说明是从内核构造系统调用的,因此可利用其内建语句。
ifneq ($(KERNELRELEASE),)
obj-m := hello.o

#否则是直接从命令行调用的,这时要调用内核构造系统。
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD  := $(shell pwd)
all:
	make -C $(KDIR) M=$(PWD) modules
clean:
	rm -f *.ko *.o *.mod.o *.symvers *.cmd  *.mod.c *.order
endif

如果要构造的模块名称为module.ko,由两个源文件生成(如file1.c file2.c),则:

obj-m := module.o

module-objs := file1.o file2.o

该Makefile将被读取两次

        第一次:当Makefile从命令行调用时,KERNELRELEASE变量尚未设置,读取else部分。获取内核源代码树;调用all:目标,第二次运行make,以便运行内核构造系统。

        第二次:读取ifneq部分,设置obj-m。内核Makefile负责真正构造模块。

二、装载

#TBD

举报

相关推荐

0 条评论