linux模块指的是什么意思

72次阅读
没有评论

共计 1602 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章给大家分享的是有关 linux 模块指的是什么意思的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

在 linux 中,模块是一种能够向 linux 内核添加设备驱动程序、文件系统以及其他组件的方法,是一些可以作为独立程序来编译的函数和数据类型的集合,可以通过静态或动态的方法加载到内核空间。

本教程操作环境:linux7.3 系统、Dell G3 电脑。

linux 模块是什么意思

模块是一种能够向 Linux 内核添加设备驱动程序、文件系统及其他组件的方法,它不需要重新编译内核或者重启系统。对于内核来讲,它需要处理的就是模块的装载和卸载以及模块间的依赖关系。因为模块是在内核空间运行的,因此模块必须使用内核提供的函数,我们也可以使用模块来调用相应的内核函数,这属于内核态编程的一种方式。模块文件的本质是一种可重定位的二进制文件,一般以 *.ko 的形式出现。

Linux 模块可以通过静态或动态的方法加载到内核空间,静态加载是指在内核启动过程中加载;动态加载是指在内核运行的过程中随时加载。一个模块被加载到内核中时,就成为内核代码的一部分。模块加载入系统时,系统修改内核中的符号表,将新加载的模块提供的资源和符号添加到内核符号表中,以便模块间的通信。

模块的使用

模块的组成

Linux 内核模块主要由以下几个部分组成:

模块加载函数(必须):当通过 insmod 命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块相关初始化工作;

模块卸载函数(必须):当通过 rmmod 命令卸载模块时,模块的卸载函数会自动被内核执行,完成与模块加载函数相反的功能;

模块许可证声明(必须):模块许可证(LICENSE)声明描述内核模块的许可权限,如果不声明 LICENSE, 模块被加载时将收到内核被污染的警告。

模块参数(可选):模块参数是模块被加载的时候可以被传递给他的值,它本身对应模块内部的全局变量;

模块导出符号(可选):内核模块可以导出符号 (symbol, 对应于函数或变量),这样其他模块可以使用本模块中的变量或函数;

模块作者等信息声明(可选)。

一个模块的示例:

// 内核头文件
#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 文件:

#Makefile
obj-m:=hello.o
KERNELBUILD:=/lib/modules/$(shell uname -r)/build
 make -C $(KERNELBUILD) M=$(shell pwd) modules
clean:
 make -C $(KERNELBUILD) M=$(shell pwd) clean

感谢各位的阅读!关于“linux 模块指的是什么意思”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计1602字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)