【操作系统】实验五 添加内核模块

简介: 【操作系统】实验五 添加内核模块

😘欢迎关注:👍点赞🙌收藏✍️留言

🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢支持!!!

实验五

实验内容

  1. 实验名称:添加内核模块
  2. 实验任务:学习模块,它是Linux特有的一种机制。模块可以用来动态地增加内核的功能。


添加内核模块是在 Linux 内核中增加新功能的一种常见方式。添加内核模块时,需要了解以下关键知识点和原理:

  1. 内核模块框架:内核模块使用标准的 Linux 内核编程接口和数据结构,可以调用内核代码中的各种函数和变量,从而实现特定的功能扩展。内核模块使用的编程框架叫做 Loadable Kernel Module (LKM) 框架,它提供了一组 API,使得模块的编写、插入和移除变得简单。
  2. 模块加载和卸载:内核模块可以通过 insmod 和 rmmod 命令加载和卸载。加载模块时,属于该模块的函数和数据结构被挂在到内核中。卸载模块时,这些资源被彻底释放。必须确保模块是正确地加载和卸载的,否则可能会导致系统崩溃或不稳定。
  3. 模块初始化和清理函数:内核模块必须包含两个函数:一个用于初始化模块,一个用于清理模块。在初始化函数中,我们通常将模块的数据结构和变量初始化。在清理函数中,我们通常做一些必要的清理工作,例如删除内存分配、关闭文件和设备等。
  4. 模块编译和链接:内核模块的源代码必须按照一定的结构编写,并通过 Makefile 文件来编译和链接。使用特定的编译器和链接器,需要确保模块的二进制文件正确地安装在系统中,并与其他内核和用户空间程序协同工作。
  5. 模块参数:内核模块可以接受一些参数,这些参数能够对模块的运行时行为进行配置。可以通过命令行或者配置文件等方式传递这些参数。在模块加载时,将这些参数传递给模块,以便在运行时进行调整。

实验过程

编写简单的内核模块 
#include<linux/module.h>
 
/*
此函数为模块初始化实例,
将在模块初始化时被调用
*/
int hello_init(void)
{
    printk("\nI AM HERE IN KERNEL:)\n");
    return 0;
}
 
/*
此函数为模块回收实例,
将在模块被撤销时使用
*/
void hello_exit(void){
    printk("\n I AM OUT BYE BYE :)\n");
}
 
MODULE_AUTHOR("20191909");//id
MODULE_LICENSE("GPL");
 
/*
以下两行声明可以使模块被更高效的加载执行和撤销,
加快内存的分配和回收
*/
module_init(hello_init);
module_exit(hello_exit);
//makefile代码
obj-m    := kello.o
KERNELBUILD +=/usr/src/linux-5.15.1
all:
       make -C ${KERNELBUILD} M=${shell pwd} modules
 
clean:
       rm -f *.ko *.o *.mod.o *.mod.c *.symvers
 使用make命令,如图1所示。

图1使用make命令

3. 使用命令insmod kello.ko添加内核,如图2所示。

图2 使用命令insmode kello.c添加内核

4. 使用命令dmesg | tail -1检查是否添加,如图3所示。

图3 使用命令dmesg | tail -1检查是否添加

5. 使用命令rmmod kello.ko删除内核,如图4所示。

图4 使用命令rmmod kello.ko删除内核

6. 使用dmesg | tail -1检查是否添加,如图5所示。

图5 使用dmesg | tail -1检查是否添加

自此实验成功

实验小结

在实验过程中,我们首先在内核源代码目录下编写了一个简单的内核模块,并使用make命令进行编译。然后,我们使用insmod命令将该模块添加到内核中,并使用dmesg | tail -1命令检查是否成功添加。接着,我们使用rmmod命令将该模块从内核中移除,并再次使用dmesg | tail -1命令检查是否成功移除。

通过这个实验,我们成功地添加了一个内核模块并验证了其添加和移除的过程。然而,在实验过程中可能会遇到一些问题,需要注意以下几点:

1.在编写内核模块时,要确保代码的正确性和稳定性,避免引起系统崩溃或不稳定的情况。

2.在使用insmod命令添加内核模块时,需要注意模块的路径和名称是否正确。

3.在使用rmmod命令移除内核模块时,要确保模块的名称和当前加载的模块一致。

4.在进行相关操作前,最好备份重要数据,以防止意外情况的发生。

总的来说,通过这个实验我们对添加内核模块的过程有了更深入的理解,并且在实践中也能够更加熟练地操作。同时,我们还需要不断提高自己的能力,加强对内核模块机制和Linux系统的学习和掌握。

相关文章
|
10天前
|
存储 边缘计算 分布式计算
探索操作系统的心脏:内核
【6月更文挑战第12天】本文深入探讨了操作系统中最为关键的组成部分——内核。我们将从内核的定义和功能出发,逐步解析其如何管理计算机硬件资源、提供系统服务以及保障系统安全。通过具体实例,本文揭示了内核在操作系统中的不可替代性,并展望了未来内核技术的发展趋势。
|
11天前
|
机器学习/深度学习 算法 安全
探索现代操作系统的内核设计与优化
在当今数字化时代,操作系统的内核是计算机系统稳定、高效运行的关键。本文深入探讨了现代操作系统内核的设计原则和优化方法,从微内核到宏内核,详细分析了它们各自的优缺点,并探讨了未来内核的发展趋势和创新方向。
24 1
|
4天前
|
Unix Shell Python
Python教程:开箱即用的Python os模块知识
注:文末有福利小工具源码 Python 的 os 模块提供了许多接口用于与操作系统进行交互,包括文件操作、目录操作、路径操作、环境变量操作、系统信息获取等
13 1
|
8天前
|
安全 算法 调度
探索操作系统的心脏:内核
【6月更文挑战第14天】在数字世界的庞大机器中,操作系统扮演着不可或缺的角色。它如同计算机系统的灵魂,协调着软硬件之间的复杂交互。本文将深入探讨操作系统的核心——内核,揭示其如何管理硬件资源、提供系统服务以及保障系统安全。我们将通过一个独特的视角,即内核的内部运作机制,来理解操作系统的复杂性和重要性。
|
6天前
|
存储 调度 数据安全/隐私保护
探索操作系统的心脏:内核
【6月更文挑战第16天】本文深入探讨了操作系统的核心组成部分——内核,揭示了其对系统性能和稳定性的关键影响。通过分析内核的主要功能、架构以及它如何与硬件和应用程序交互,我们提供了对这一复杂主题的全面理解。文章不仅阐述了内核的基本概念,还讨论了其在现代操作系统设计中的重要性,旨在为读者提供一个关于操作系统内核的技术性视角。
探索操作系统的心脏:内核
【6月更文挑战第10天】本文深入探讨了操作系统的核心组件——内核,分析了其设计、功能以及在现代计算机系统中的重要性。我们将通过一个虚构的故事来揭示内核如何在幕后默默工作,确保计算机系统的流畅运行。
|
11天前
|
安全 算法 Linux
探秘操作系统:从内核到用户界面的奥秘
【6月更文挑战第10天】本文将带领读者深入探索操作系统的多维世界,从其最基础的内核设计到丰富多彩的用户界面,我们将一窥这些软件巨匠如何支撑起现代计算的基石。不同于常规的技术解读,我们将通过故事化的叙述,揭示操作系统如何响应硬件、管理资源以及提供用户体验,展现它们不仅仅是代码和算法的集合,更是人类智慧与创造力的结晶。
|
12天前
|
存储 开发者
探索操作系统的心脏:内核
【6月更文挑战第10天】本文深入探讨了操作系统的核心组件——内核,它如同人体的心脏,是整个系统运行的动力源泉。我们将从内核的定义、功能、结构以及与用户空间的交互等方面进行剖析,揭示这个隐藏在幕后却至关重要的技术奇迹。
|
12天前
|
人工智能 安全 物联网
探索操作系统的心脏:内核与用户空间的神秘面纱
【6月更文挑战第10天】本文将带您深入理解操作系统的核心组件——内核,以及它如何与用户空间交互。我们将通过一系列生动的比喻和实例,揭示内核的工作原理,探讨其与用户空间的关系,并分析这种设计如何影响系统的性能和安全性。
|
16天前
|
存储 物联网 调度
探秘操作系统的心脏:内核
【6月更文挑战第6天】本文将深入探讨操作系统的核心——内核。我们将从内核的定义和功能出发,逐步揭示其在操作系统中的重要性。接着,我们将详细解析内核的主要组成部分,包括进程管理、内存管理、文件系统等。最后,我们将探讨内核的发展趋势,以及它在未来操作系统中可能扮演的角色。