linux模块指的是什么意思

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

在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
all:
    make -C $(KERNELBUILD) M=$(shell pwd) modules
clean:
    make -C $(KERNELBUILD) M=$(shell pwd) clean

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

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram