栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

一个简单的内核模块Makefile语法讲解

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一个简单的内核模块Makefile语法讲解

文章目录
    • 1.dmeo
    • 2. Makefile
  • 总结


1.dmeo

这里给出一个最简单的内核模块。
这个模块定义了两个函数:
一个在模块加载到内核时被调用 :hello_init
一个在模块被移除时被调用:hello_exit

//helloworld.c
#include 
#include 

//内核模块初始化函数
static int __init hello_init(void)
{
	printk(KERN_EMERG "Hello Worldn");
	return 0;
}

//内核模块退出函数
static void __exit hello_exit(void)
{
	printk(KERN_DEBUG "exitn");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
//Makefile
obj-m := helloworld.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

2. Makefile

(1)

obj-m := helloworld.o   (GNU make 提供的扩展语法)

表明有一个模块要从目标文件helloworld.o 建立, 在从目标文件建立后结果模块命名为 helloworld.ko。
如果源文件不止一个( 比如 file1.c 和 file2.c )

obj-m := helloworld.o 
helloworld-objs := file1.o file2.o

或者

obj-m += helloworld.o 
helloworld-objs += file1.o 
helloworld-objs += file2.o

这样file1.c 和 file2.c 就一起被编译和链接到helloworld.ko模块中去了。
(2)

make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

执行shell命令 uname -r

等价于:

make -C /lib/modules/5.13.0-40-generic/build M=$(PWD) modules

让我们来看看 /lib/modules/5.13.0-40-generic/build 文件:

可以看出这是一个符号链接(类似于windows下的快捷方式)
执行下面这条命令就可以创建上面的一个符号链接:

ln -s /usr/src/linux-headers-5.13.0-40-generic /lib/modules/5.13.0-40-generic/build

(3)
-C dir, --directory=dir:在读取 Makefile 或执行任何其他操作之前更改为目录 dir。
由上面我们可以知道make -C 就是到 /usr/src/linux-headers-5.13.0-40-generic提供的目录下去找Makefile.
那就让我们看看 /usr/src/linux-headers-5.13.0-40-generic目录下是啥:

从该目录下的文件我们便可以看出这就是内核源码,同时我们也看到了内核源码里面的顶层Makefile,make实际执行的就是内核源码的顶层 Makefile。

内核源码一般都安装下/usr/src/linux-xxx目录下(不同的发行版本稍有差别),不要把这个源码用于开发,因为编译你的C库所用的内核版本也就是链接到该内核源码上。
(4)
M= 选项使 makefile 在试图建立模块目标前, 回到你的模块源码目录:

我们的helloworld.c和Makefile就是在/home/yl/study/test 目录下。
执行make后,ko模块也就生成在该目录下:

上述环境:vmware + ubuntu20.04

总结

今天的内容比较简单啦。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/851696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号