In Linux, a module is a way to add device drivers, file systems and other components to the Linux kernel. It is a collection of functions and data types that can be compiled as a stand-alone program. It can be statically Or dynamically load it into the kernel space.
#The operating environment of this tutorial: linux7.3 system, Dell G3 computer.
Module is a method that can add device drivers, file systems and other components to the Linux kernel. It does not require recompiling the kernel or restarting the system. For the kernel, what it needs to deal with is the loading and unloading of modules and the dependencies between modules. Because the module runs in the kernel space, the module must use the functions provided by the kernel. We can also use the module to call the corresponding kernel function, which is a method of kernel mode programming. The essence of a module file is a relocatable binary file, usually in the form of *.ko.
Linux modules can be loaded into the kernel space through static or dynamic methods. Static loading refers to loading during the kernel startup process; dynamic loading refers to loading at any time while the kernel is running. When a module is loaded into the kernel, it becomes part of the kernel code. When a module is loaded into the system, the system modifies the symbol table in the kernel and adds the resources and symbols provided by the newly loaded module to the kernel symbol table to facilitate communication between modules.
Composition of modules
Linux kernel module mainly consists of the following parts:
Module loading function (Required): When the kernel module is loaded through the insmod command, the module's loading function will be automatically executed by the kernel to complete the initialization work related to this module;
Module unloading function (required): When the module is unloaded through the rmmod command , the module's unloading function will be automatically executed by the kernel, completing the opposite function to the module loading function;
Module license statement (required): The module license (LICENSE) statement describes the permissions of the kernel module. If not Declaring LICENSE, you will receive a kernel pollution warning when the module is loaded.
Module parameters (optional): Module parameters are values that can be passed to the module when it is loaded. It corresponds to the global variables inside the module;
Module export symbols (optional) ): The kernel module can export symbols (symbols, corresponding to functions or variables), so that other modules can use variables or functions in this module;
Module author and other information declaration (optional).
Example of a module:
//内核头文件 #include<linux/module.h> #include<linux/kernel.h> #include<linux/init.h> //加载函数 static int __init init_hello_module(void){ //内核打印函数,linux系统使用dmesg命令可以查看打印信息 printk(KERN_INFO "Hello World\n"); return 0; } //卸载函数 static void __exit exit_hello_module(void){ printk(KERN_INFO "Exit the Hello world Module!\n"); } module_init(init_hello_module); module_exit(exit_hello_module); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Eric"); MODULE_VERSION("v0.1"); MODULE_DESCRIPTION("TEST FOR MODULE");
Makefile corresponding to the module:
#Makefile obj-m:=hello.o KERNELBUILD:=/lib/modules/$(shell uname -r)/build all: make -C $(KERNELBUILD) M=$(shell pwd) modules clean: make -C $(KERNELBUILD) M=$(shell pwd) clean
Related recommendations: "Linux Video Tutorial"
The above is the detailed content of What does linux module mean?. For more information, please follow other related articles on the PHP Chinese website!