ch2_ab1 Linux内核模块

诸葛蛋蛋 / 2023-08-29 / 原文

准备事项:

虚拟机 系统 文件传输工具
VMware CentOS Winscp
VitualBox Ubuntu Xftp
有222种选择,我是Virtualbox+Ubuntu+Winscp
  • Silberschatz, Galvin, Gagne: Operating System Concepts, Enhanced eText, 10th Edition - Student Companion Site (wiley.com)

    外网均速90k挂一晚上才下完。

    百度云链接:https://pan.baidu.com/s/16zgudkrGlcUeTvEQpZ7Hsw?pwd=ds6a
    提取码:ds6a

  • [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` 命令会清理构建产生的临时文件和输出文件。