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

🕺作者: 主页

我的专栏
C语言从0到1
探秘C++
数据结构从0到1
探秘Linux

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

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

文章目录

  • 实验五
    • 实验内容
    • 实验过程
    • 实验小结

实验五

实验内容

  1. 实验名称:添加内核模块

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

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

  1. 内核模块框架:内核模块使用标准的 Linux 内核编程接口和数据结构,可以调用内核代码中的各种函数和变量,从而实现特定的功能扩展。内核模块使用的编程框架叫做 Loadable Kernel Module (LKM) 框架,它提供了一组 API,使得模块的编写、插入和移除变得简单。

  2. 模块加载和卸载:内核模块可以通过 insmod 和 rmmod 命令加载和卸载。加载模块时,属于该模块的函数和数据结构被挂在到内核中。卸载模块时,这些资源被彻底释放。必须确保模块是正确地加载和卸载的,否则可能会导致系统崩溃或不稳定。

  3. 模块初始化和清理函数:内核模块必须包含两个函数:一个用于初始化模块,一个用于清理模块。在初始化函数中,我们通常将模块的数据结构和变量初始化。在清理函数中,我们通常做一些必要的清理工作,例如删除内存分配、关闭文件和设备等。

  4. 模块编译和链接:内核模块的源代码必须按照一定的结构编写,并通过 Makefile 文件来编译和链接。使用特定的编译器和链接器,需要确保模块的二进制文件正确地安装在系统中,并与其他内核和用户空间程序协同工作。

  5. 模块参数:内核模块可以接受一些参数,这些参数能够对模块的运行时行为进行配置。可以通过命令行或者配置文件等方式传递这些参数。在模块加载时,将这些参数传递给模块,以便在运行时进行调整。

实验过程

  1.  编写简单的内核模块
    
#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
  1.  使用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系统的学习和掌握。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/344400.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

apkpure下载Google Play中APP的APK安装包

比如Google Play上有个应用叫iSmart DV&#xff0c;想下载APK&#xff0c;怎么做呢 打开apkpure(https://apkpure.net/)&#xff0c;输入对应的app名称即可下载

Making Large Language Models Perform Better in Knowledge Graph Completion论文阅读

文章目录 摘要1.问题的提出引出当前研究的不足与问题KGC方法LLM幻觉现象解决方案 2.数据集和模型构建数据集模型方法基线方法任务模型方法基于LLM的KGC的知识前缀适配器知识前缀适配器 与其他结构信息引入方法对比 3.实验结果与分析结果分析&#xff1a;可移植性实验&#xff1…

Kafka-服务端-KafkaController

Broker能够处理来自KafkaController的LeaderAndIsrRequest、StopReplicaRequest、UpdateMetadataRequest等请求。 在Kafka集群的多个Broker中&#xff0c;有一个Broker会被选举为Controller Leader,负责管理整个集群中所有的分区和副本的状态。 例如&#xff1a;当某分区的Le…

第92讲:MySQL主从复制集群故障排查思路汇总

文章目录 1.从库I/O线程处于Connecting状态2.从库I/O线程处于No状态3.从库SQL线程处于No状态 1.从库I/O线程处于Connecting状态 从库的I/O线程处于Connection连接中的状态&#xff0c;一般都是连接不上主库导致&#xff1a; 可能由于网络不通&#xff0c;防火墙的干扰导致从库…

MongoDB系列之一文总结索引

概述 分类 索引的分类&#xff1a; 按照索引包含的字段数量&#xff0c;可分为单键索引&#xff08;单字段索引&#xff09;和组合索引&#xff08;联合索引、复合索引&#xff09;按照索引字段的类型&#xff0c;可以分为主键索引和非主键索引按照索引节点与物理记录的对应…

2024免费mathtype7.4.4安装注册步骤教程

数学建模中对公式的编辑有很高的要求&#xff0c;mathtype是一款专业的数学公式编辑工具&#xff0c;能够帮助用户在各种文档中插入复杂的数学公式和符号。 一 Mathtype 的下载安装 1.1 安装前须知 解压和安装前&#xff0c;需要将电脑的杀毒软件或者防火墙关掉&#xff0c;如…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-后台管理主页面实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

vue3跨域请求及一些常用配置

在使用vue3开发的时候&#xff0c;总免不了做一些基础的配置。比如跨域配置&#xff0c;一些常用函数的封装等等。接下来&#xff0c;我就做一些自己在在开发中所运用到一些常用配置。 一、跨域配置 其实&#xff0c;对于跨域配置&#xff0c;我之前的博文中也有说过&#xff0…

Linux的常见指令和基本操作演绎【复习篇章一】

文章目录 前言下载安装 XShellXShell 下的复制粘贴热键操作01.ls指令tree 02.cd指令03.touch指令04.mkdir指令&#xff08;重要&#xff09;&#xff1a;05.rmdir指令 && rm 指令&#xff08;重要&#xff09;06.组合07.man指令&#xff08;重要&#xff09;&#xff1…

Packet Tracer - VLAN 间路由练习

地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 G0/0 172.17.25.2 255.255.255.252 不适用 R1 G0/1.10 172.17.10.1 255.255.255.0 不适用 R1 G0/1.20 172.17.20.1 255.255.255.0 不适用 R1 G0/1.30 172.17.30.1 255.255.255.0 不适用 R1 G0/1.…

前景贴纸类特效SDK,面向企业的技术解决方案

随着数字媒体技术的快速发展&#xff0c;视频内容在社交媒体、广告、教育等领域的应用越来越广泛。为了增加视频的吸引力和趣味性&#xff0c;许多企业开始寻求在视频中添加特效和贴纸。美摄科技的前景贴纸类特效SDK为企业提供了一种高效、灵活的解决方案&#xff0c;满足不同的…

R语言VRPM包绘制多种模型的彩色列线图

列线图&#xff0c;又称诺莫图&#xff08;Nomogram&#xff09;&#xff0c;它是建立在回归分析的基础上&#xff0c;使用多个临床指标或者生物属性&#xff0c;然后采用带有分数高低的线段&#xff0c;从而达到设置的目的&#xff1a;基于多个变量的值预测一定的临床结局或者…

生命在于折腾——WeChat机器人的研究和探索

一、前言 2022年&#xff0c;我玩过原神&#xff0c;当时看到了云崽的QQ机器人&#xff0c;很是感兴趣&#xff0c;支持各种插件&#xff0c;查询游戏内角色相关信息&#xff0c;当时我也自己写了几个插件&#xff0c;也看到很多大佬编写的好玩的插件&#xff0c;后来因为QQ不…

微信聊天记录生成词云

目录 前置准备一、获取微信聊天记录&#xff08;一&#xff09;配置MuMu模拟器&#xff08;二&#xff09;微信数据备份与恢复&#xff08;三&#xff09;获取微信聊天记录文件至电脑&#xff08;四&#xff09;获取EnMicroMsg.db的密钥&#xff08;五&#xff09;使用SQLciphe…

详解线性分组码(linear code)

目录 一. 介绍 二. 线性分组码 三. 生成矩阵 四. 对偶编码 五. 校验矩阵 六. 陪集编码 七. 小结 一. 介绍 Low-density parity-check&#xff0c;简称LDPC码&#xff0c;翻译为低密度奇偶校验码。 我们所熟悉的LDPC码就是一个典型的线性分组码&#xff08;linear bloc…

2023年度AI盘点 AIGC|AGI|ChatGPT|人工智能大模型

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 2023年是人工智能大语言模型大爆发的一年&#xff0c;一些概念和英文缩写也在这一年里集中出现&#xff0c;很容易混淆&#xff0c;甚至把人搞懵。 文章目录 前言01 《ChatGPT 驱动软件开…

气象条件对铸铁平台地基深度有哪些影响呢——河北北重

气象条件对铸铁平台地基有以下影响&#xff1a; . 1.地震 地震可能导致地基的震动和错动&#xff0c;因此地震活跃区域的建筑物通常需要更深的地基以提供更大的稳定性。 2..温度变化&#xff1a;气温的变化会导致地基中的土壤膨胀和收缩&#xff0c;从而影响地基的稳定性。特…

展厅设计更好的方法

一、与公司形象契合 在展厅规划时必定要留意公司的LOGO、主色调&#xff0c;以及企业文明。在展现时使用丰满的展厅规划传达出企业的理念。而在功用设置上&#xff0c;应当考虑内涵功用&#xff0c;从展厅作业人员的视点动身&#xff0c;为展厅作业人员提供杰出的环境&#xff…

书生·浦语大模型实战营-学习笔记6

目录 OpenCompass大模型测评1. 关于评测1.1 为什么要评测&#xff1f;1.2 需要评测什么&#xff1f;1.3 如何评测&#xff1f;1.3.1 客观评测1.3.2 主观评测1.3.3 提示词工程评测 2. 介绍OpenCompass工具3. 实战演示 OpenCompass大模型测评 1. 关于评测 1.1 为什么要评测&#…

《WebKit 技术内幕》学习之五(4): HTML解释器和DOM 模型

4 影子&#xff08;Shadow&#xff09;DOM 影子 DOM 是一个新东西&#xff0c;主要解决了一个文档中可能需要大量交互的多个 DOM 树建立和维护各自的功能边界的问题。 4.1 什么是影子 DOM 当开发这样一个用户界面的控件——这个控件可能由一些 HTML 的标签元素…
最新文章