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

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

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

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

实验五

实验内容

  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系统的学习和掌握。

相关文章
|
1天前
|
存储 算法 安全
探索操作系统的心脏:内核设计与实现
【8月更文挑战第30天】操作系统是计算机系统的核心,而内核则是这个核心中的心脏。它负责管理计算机的硬件资源,并提供系统服务给应用程序。本文将深入探讨操作系统内核的设计和实现,以及它在现代计算环境中的重要性。我们将从内核的基本概念出发,逐步深入到内核的各个组成部分,包括进程管理、内存管理、文件系统和设备驱动等。通过本文,读者将获得对操作系统内核设计和实现的深刻理解,以及对现代操作系统如何满足日益增长的计算需求的见解。
17 12
|
1天前
|
安全 调度 开发者
探索操作系统的心脏:内核与用户模式
【8月更文挑战第30天】在数字世界的每一次跳动中,操作系统扮演着至关重要的角色。本文将深入浅出地探讨操作系统的核心概念——内核与用户模式,通过生动的比喻和直观的解释,带领读者理解这一复杂主题。我们将从内核的定义和功能出发,逐步揭示用户模式的秘密,并通过代码示例,展示如何在实际应用中区分和利用这两种模式。无论你是计算机科学的初学者还是资深开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
3天前
|
安全 编译器 Shell
探索操作系统的心脏:内核与用户空间的交互
【8月更文挑战第28天】在计算机的世界中,操作系统扮演着至关重要的角色,它如同一个繁忙的交通枢纽,协调着硬件和软件之间的复杂交互。本文将深入探讨操作系统的核心组成部分——内核,以及它是如何与用户空间进行通信的。我们将通过一个简单的命令行工具示例,来揭示这一过程的内在机制,让你对计算机工作原理的理解更上一层楼。准备好了吗?让我们开始这段奇妙的旅程吧!
13 3
|
2天前
|
安全 API 调度
探索操作系统的心脏:内核与用户空间的交互
【8月更文挑战第29天】在计算机科学领域,操作系统是连接硬件和用户的桥梁。本文将深入探讨操作系统的核心—内核,及其如何与用户空间进行交互,确保系统稳定运行。通过分析内核的设计原则、功能以及与用户空间的通信机制,我们将揭示操作系统背后复杂的工作机制,并展示如何通过编程接口与内核交互,以实现高效的系统管理和应用开发。
|
3天前
|
调度 虚拟化 容器
探索操作系统的心脏:内核与进程管理
【8月更文挑战第28天】在数字世界的复杂迷宫中,操作系统扮演着关键角色。它如同一座桥梁,连接硬件与软件,确保一切顺畅运行。本文将深入剖析操作系统的核心——内核和进程管理,揭示它们如何协同工作,保障系统的稳定与高效。通过简化的比喻,我们将一探究竟,了解操作系统背后的神秘面纱。
|
3天前
|
调度
探索操作系统的心脏:内核空间与用户空间
【8月更文挑战第28天】在数字世界的海洋中,操作系统犹如一艘巨轮的核心引擎。本文将带领读者深入操作系统的内核,探讨内核空间与用户空间的奥秘。通过深入浅出的解释和生动的比喻,我们将揭示这两个空间如何协同工作,确保系统的高效运行。文章不仅适合初学者作为入门指南,也适合有一定基础的读者深化理解。
|
1天前
|
Linux 程序员
探索操作系统的心脏:内核与用户空间的交互
【8月更文挑战第30天】本文将深入探讨操作系统的核心组成部分——内核,以及它如何与用户空间进行交互。我们将从内核的基本概念出发,逐步深入到内核与用户空间的通信机制、系统调用的原理,以及内核在管理进程和资源中的关键作用。文章旨在通过直观的解释和实例,帮助读者构建对操作系统核心机制的深刻理解,并激发对系统编程和技术深度的兴趣。
|
2天前
|
机器学习/深度学习 网络安全 TensorFlow
探索操作系统的心脏:内核与用户空间的奥秘云计算与网络安全:技术挑战与未来趋势深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【8月更文挑战第29天】在数字世界的每一次点击与滑动背后,都隐藏着一个不为人知的故事。这个故事关于操作系统——计算机的灵魂,它如何协调硬件与软件,管理资源,并确保一切运行得井井有条。本文将带你走进操作系统的核心,揭示内核与用户空间的秘密,展现它们如何共同编织出我们日常数字生活的底层结构。通过深入浅出的讲解和代码示例,我们将一同解锁操作系统的神秘面纱,理解其对现代计算的重要性。 【8月更文挑战第29天】本文将深入探讨卷积神经网络(CNN)的基本原理和结构,以及它们如何被广泛应用于图像识别任务中。我们将通过代码示例来展示如何使用Python和TensorFlow库构建一个简单的CNN模型,并训练
|
3天前
|
存储 安全 Java
深入理解操作系统:从用户空间到内核空间的旅程深入浅出Java异常处理机制
【8月更文挑战第28天】在数字世界的海洋中,操作系统是承载软件与硬件沟通的巨轮。本文将揭开操作系统神秘的面纱,通过一次思维的航行,带领读者从应用程序的用户空间出发,穿越系统调用的大门,深入内核空间的心脏。我们将探索进程管理、内存分配、文件系统等核心概念,并借助代码示例,揭示操作系统背后的魔法。准备好了吗?让我们启航,去发现那些隐藏在日常计算活动背后的秘密。 【8月更文挑战第28天】在Java编程世界中,异常处理就像是我们生活中的急救包。它不仅保护程序不因意外而崩溃,还确保了代码的健壮性和可靠性。本文将通过简洁明了的语言和生动的比喻,带你了解Java异常处理的奥秘,从基本的try-catch语
|
3天前
|
安全 调度 C语言
探索操作系统的心脏:内核空间与用户空间
【8月更文挑战第28天】在计算机科学中,操作系统是硬件与应用程序之间的桥梁。它不仅管理着系统资源,还确保了程序能够高效、安全地运行。本文将深入探讨操作系统的两个核心概念——内核空间和用户空间,揭示它们如何共同维护系统的稳定与性能。我们将通过一个简单的代码示例,直观地理解这两个概念在实际编程中的应用。
下一篇
云函数