ch2_ab1 Linux内核模块

准备事项:

虚拟机 系统 文件传输工具
VMware CentOS Winscp
VitualBox Ubuntu Xftp
有222种选择,我是Virtualbox+Ubuntu+Winscp

  • [x]
#include <linux/init.h>
#include <lunux/kernel.h>
#include <linux/module.h>

/*This function is called when the module is leaded*/
int simple_init(void){

    printk(KERN_INFO "Loading Module\n");
    // LOOK careful double "" eat all the following text
    return 0;
}

//this function is called when the module is removed//

void simple_exit(void){

    printk(KER_INFO "Removing Module\n");
}

/*macros for registerin module entry and exit pints.*/

module_init(simple_init);
module_exit(simple_exit);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Simple Module");
MODULE_AUTHOR("SGG");
obj-m += simple.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

这段代码看起来是一个 Linux 内核模块的构建和编译过程。让我为你解释一下每个部分的作用:

1. `obj-m += simple.o`:
   这一行将一个名为 `simple.o` 的目标文件添加到 `obj-m` 变量中。这指示构建系统在编译时将 `simple.o` 连接到内核模块中。

2. `all:`:
   这是一个目标名称,表示默认的构建目标。也就是说,当你运行 `make` 命令而不指定目标时,它会执行这个目标下的命令。

3. `make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules`:
   这条命令会调用 `make` 命令,进入到内核源码目录下(`/lib/modules/$(shell uname -r)/build`),并使用当前目录下的 Makefile(`M=$(PWD)`)来构建模块(`modules`)。这会编译和链接 `simple.o` 并生成内核模块文件。

4. `clean:`:
   这是一个目标名称,用于清理构建过程产生的临时文件。

5. `make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean`:
   这条命令会在内核源码目录下执行 `make` 命令,使用当前目录下的 Makefile(`M=$(PWD)`),并执行 `clean` 目标。这将清除构建过程中生成的临时文件和输出文件,以便进行干净的构建。

综合起来,这个 Makefile 的作用是编译和构建一个名为 `simple.o` 的内核模块,并提供了 `all` 和 `clean` 两个目标,分别用于构建和清理操作。执行 `make` 命令会默认执行 `all` 目标的命令,编译生成内核模块,而执行 `make clean` 命令会清理构建产生的临时文件和输出文件。

posted @   诸葛蛋蛋  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示