一、实验目的
对Linux内核模块进行了解。
二、实验内容
创建一个内核模块,在加载和卸载模块时在内核中打印相关信息。
三、背景知识:
一、什么是内核模块?
内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),我们简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithickernel)。单内核的最大优点是效率高,因为所有的内容都集成在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。
模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。
总之,模块是一个为内核(从某种意义上来说,内核也是一个模块)或其他内核模块提供使用功能的代码块。
二、内核模块编写
编写内核模块时必须要有的两个函数 :
__init 和 __exit 是 Linux 内核的一个宏定义,使系统在初始化完成后释放该函数,并释放其所占内存。因此它的优点是显而易见的。建议在编写入口函数和出口函数时采用后面的方法。
还有,在内核编程时所用的库函数和在用户态下的是不一样的。如模块程序中使用的printk函数,对应于用户态下的printf函数,printk 是内核态信息打印函数,功能和printf类似但 printk还有信息打印级别。
加载模块和卸载模块:
1>module_init(

本文详细介绍了Linux内核模块的概念、编写过程及编译方法。通过创建一个简单的HelloWorld模块,展示了如何使用module_init和module_exit宏定义入口和出口函数,并解释了printk函数在内核中的作用。实验步骤包括编写模块代码、创建Makefile、编译模块、加载和卸载模块,以及查看模块信息,帮助理解内核模块的工作原理。
最低0.47元/天 解锁文章
6917

被折叠的 条评论
为什么被折叠?



