设为首页 加入收藏

TOP

Linux内核模块Makefile学习
2019-08-27 07:30:38 】 浏览:29
Tags:Linux 内核 模块 Makefile 学习

在《Linux设备驱动程序》一书中读到的内核模块编译Makefile,不是非常理解,在查询很多资料后,在这里做个总结。

 

书中Makefile代码:

 1 ifneq  ($(KERNELRELEASE),)
 2 obj-m:=hello.o
 3 else
 4 KDIR := /lib/modules/$(shell uname -r)/build
 5 PWD:=$(shell pwd)
 6 all:
 7     make -C $(KDIR) M=$(PWD) modules
 8 clean:
 9     rm -f *.ko *.o *.symvers *.cmd *.cmd.o
10 endif

 

代码解析:

1. 判断变量KERNELRELEASE是否设置,该变量在linux内核顶层Makefile中会被设置。当然第一次执行makefile时,KERNELRELEASE未被设置

2. 进入else分支,设置KDIR变量为linux内核源代码路径,PWD为makefile文件所在的路径

3. 执行目标all,命令先执行到make -C $(KDIR),此时,makefile跳转到内核源码顶层,执行所在目录的makefile

4. 命令执行到M=$(PWD),此时回到内核模块makefile所在的路径,第二次执行该makefile,此时KERNELRELEASE已经在执行内核顶层Makefile时被赋值,因此obj-m:=hello.o被执行

5. 内核将hello.o链接成hello.ko,得到我们需要的内核模块

 

编译多文件:

若内核模块由多个源文件,正确的写法为:

obj-m:=hello.o

hello-objs:=file1.o file2.o file3.o

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇基于STM8的ADC读取---STM8-第四章 下一篇多功能设备mfd驱动

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目