在Linux系统中实现一个可加载的内核模块

Intro

坐标成都电讯大专, 某操作系统课老师在PPT上草草写下3个内核线程API后就要求编程, 感受一下:

include/linux/kthread.h,你就看到了它全部的API,一共三个函数。

这里是代码声明,略

kthread_run()负责内核线程的创建, kthread_stop()负责结束创建的线程,参数是创建时返回的task_struct指针。 kthread_should_stop()返回should_stop标志。它用于创建的线程检查结束标志,并决定是否退出。

利用上面提到的系统调用,在Linux系统中实现一个可加载的内核模块,里面至少包含一个内核线程


我看完之后的感受

在这里插入图片描述

编程准备

准备一个CentOS 6.10的虚拟机, 下面是可能用得到的链接

CentOS 6.10
换源

安装完毕后给自己的账户添加root权限或者直接用root账户(并不推荐这么做)

然后更新yum源(不会的见前面的链接)

由于CentOS 6年久失修, 需要先更换yum的软件源才能使用yum来安装必要的组件

我使用的源如下

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-6.10 - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6#released updates 
[updates]
name=CentOS-6.10 - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6#additional packages that may be useful
[extras]
name=CentOS-6.10 - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-6.10 - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6#contrib - packages by Centos Users
[contrib]
name=CentOS-6.10 - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6

换源后清除缓存, 刷新缓存

sudo yum clean all
sudo yum makecache

安装一些必须品

sudo yum install gcc make
sudo yum install kernel-devel-2.6.32-754.el6.x86_64

注: 这里安装内核头文件包(也就是第二条命令)中的版本号需要使用uname -r命令来确定

开始编程

叫来ChatGPT, 生成下面的代码

my_module.c

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/kthread.h>static struct task_struct *my_thread;static int thread_function(void *data)
{while (!kthread_should_stop()){printk(KERN_INFO "My kernel thread is running\n");msleep(1000);  // sleep for 1 second}return 0;
}static int __init my_module_init(void)
{printk(KERN_INFO "My kernel module is loaded\n");my_thread = kthread_create(thread_function, NULL, "my_thread");if (my_thread)wake_up_process(my_thread);return 0;
}static void __exit my_module_exit(void)
{printk(KERN_INFO "My kernel module is unloaded\n");if (my_thread)kthread_stop(my_thread);
}module_init(my_module_init);
module_exit(my_module_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple kernel module with a kernel thread");

Makefile

注意: 此处的文件名首字母一定要大写, 即一定要写成Makefile而不是makefile

# 下面一行的"my_module"需要与上面的C源文件的名字部分保持一致
obj-m += my_module.oall:make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modulesclean:make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean

写完保存, 然后在项目目录下打开终端, 输入

make

使用模块

编译出来的模块文件名应该是[_a-zA-Z]\w*\.ko形式的, 比如说本教程的my_module.ko
以本教程为例, 在项目目录下打开终端并输入

sudo insmod my_module.ko

没有信息输出即为加载模块成功

然后在终端中输入

dmesg

查看加载的模块的输出, 教程中的模块开启的线程每秒钟输出一行字
同时由于教程中的模块在__init()函数中添加了输出, 第一行输出为其中设置的内容

当你不想要这个模块了的时候, 使用命令

sudo rmmod my_module.ko

没有输出即为成功
本教程中的实例由于在__exit()函数中添加了一行输出, 所以在卸载模块之后使用dmesg命令后, 最后一行输出会是该函数中设置的内容

Outro

任务乍一看很简单, 然而实际操作一堆坑. 把学生当踩雷王了

focnal 祝你: 离这种事逼越远越好

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eclipse安装MAT内存分析工具插件

&#xff08;一&#xff09;默认已安装eclipse IDE 打开eclipse选择如下操作&#xff1a; 插件地址&#xff1a;http://download.eclipse.org/mat/1.5/update-site/ 安装插件。 安装完成后重启即可。 &#xff08;二&#xff09;获取Heap Dump文件 新建一个java项目&#xff0c…

【深度学习·实践篇】CodeT5模型学习与基于CodeT5进行新的模型训练

文章目录 写在前面一. 一些名词二. 基于Codet5训练自己的模型理论步骤&#xff1a;1. 安装依赖2. 下载CodeT5代码库3. 准备数据集4. 修改训练脚本5. 启动训练6. 进行预测 具体实践1. 准备数据集2. 配置运行环境3. 修改脚本参数4. 为实现分布式训练&#xff0c;修改脚本如何实现…

虚拟机安装Ubuntu18.04

一、下载VMware VMware下载地址&#xff1a;https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 安装这个太久了&#xff0c;可以网上搜一下安装流程不难&#xff0c;只有一个建议&#xff0c;安装路径不要有中文 可以参考下面教程&#xff0c…

智能PID软件-AVEVA Diagrams创建图纸模板【图瓦软件出品】

AVEVA Diagrams可以针对不同的项目&#xff0c;定义公司级和项目级的图纸模板&#xff0c;包括图纸图框和角图章。不仅大大节约设计人员的时间&#xff0c;而且能够确保成品图纸的一致性和规范性。下面我们介绍一下如何在Diagrams中定制图纸模板&#xff0c;初步了解一下Diagra…

5 款必备的免费在线画图工具!超级好用

大家好&#xff0c;我是宝哥&#xff01; zen flowchart 虽然是英文&#xff0c;但其实也并没有多么复杂的内容&#xff0c;而且浏览器现在都带有页面翻译的功能&#xff0c;所以还是蛮方便的&#xff01;初次使用需要注册&#xff0c;也并不难&#xff0c;随便自己的一个邮箱注…

最新ChatGPT开源平替模型骆马(Vicuna) 单个GPU就能跑!UC伯克利领头,130亿参数「小羊驼」权重公布

转载&#xff1a;单个GPU就能跑&#xff01;UC伯克利领头&#xff0c;130亿参数「小羊驼」权重公布 【导读】刚刚&#xff0c;UC伯克利、CMU、斯坦福等&#xff0c;联手发布了最新开源模型骆马&#xff08;Vicuna&#xff09;的权重。 3月31日&#xff0c;UC伯克利联手CMU、斯…

试用国内及国外AI绘图软件后的总结

最近AI很火&#xff0c;所以这几天抱着试试看的角度试用了多款AI绘图软件&#xff0c;大概测试了市面上的3款工具吧&#xff0c;3款国外的&#xff0c;1款国内的。 因为有对比&#xff0c;波哥也不是专业的评测机构出身&#xff0c;所以这些比对无论是从角度&#xff0c;还是从…

这家付费图库巨头率先拥抱AI绘画,还掏钱补偿原创画师

詹士 发自 凹非寺量子位 | 公众号 QbitAI 画师与AI生成图片争议不断&#xff0c;有平台给出了解决方案。 而且是掏真金白银补偿创作者那种。 美东时间10月25日&#xff0c;付费图库Shutterstock宣布&#xff1a;将通过出售AI生成图片&#xff0c;向创作者提供补偿费&#xff0c…

OpenAI 发布GPT-4——全网抢先体验

OpenAI 发布GPT-4 最近 OpenAI 犹如开挂一般&#xff0c;上周才刚刚推出GPT-3.5-Turbo API&#xff0c;今天凌晨再次祭出GPT-4这个目前最先进的多模态预训练大模型。与上一代GPT3.5相比&#xff0c;GPT-4最大的飞跃是增加了识图能力&#xff0c;并且回答准确性也得到显著提高。…

GPT-4正式发布!如何访问 怎么免费使用GPT-4?

美国人工智能研究实验室OpenAI&#xff0c;周二为其爆红聊天机器人ChatGPT发布了最新GPT-4语言模型&#xff0c;这距离ChatGPT的上线仅仅过去了4个月时间。 和ChatGPT最初使用的GPT-3.5模型相比&#xff0c;GPT-4实现了几个方面的飞跃式提升&#xff1a;强大的识图能力&#x…

谷歌Bard最新更新:支持中文,还升级了ChatGPT都没有的识图功能

夕小瑶科技说 原创 作者 | 智商掉了一地、ZenMoore 两个月前咱们刚盘点完 Bard 的大更新&#xff0c;在那两周中&#xff0c;谷歌将全家桶和 Bard 联动不久&#xff0c;还推出了十大新功能&#xff0c;当时他们就在博客更新中提到&#xff0c;会在今年夏天新增对中文等另外 40…

GPT-4来炸场:10秒输出一个网站,识图知意 so easy,为何如此丝滑

比被卷更可怕的莫过于自己卷自己&#xff0c;这点还得是OpenAI更胜一筹。 四个月前&#xff0c;ChatGPT 刚刚推出&#xff0c;并成为历史上增长最快的消费者应用程序。在ChatGpt大杀四方时&#xff0c;万众瞩目的大型多模态模型GPT-4也在今天凌晨正式发布。 据OpenAI官方介绍&…

使用GPT-4生成QT代码

一、概述 最近ChatGPT火爆起来了&#xff0c;ChatGPT是一种基于GPT的自然语言处理模型&#xff0c;可以用于生成自然语言文本&#xff0c;例如对话、文章等。最近又发现了一个优秀且免费的代码生成工具Cursor &#xff0c;Cursor集成了 GPT-4 &#xff0c;可以帮助你快速编写、…

chatgpt赋能python:Python如何查看图片

Python如何查看图片 在SEO优化中&#xff0c;图片也是至关重要的一部分。而在Python中&#xff0c;我们可以使用一些代码来查看图片。下面就来介绍一下Python如何查看图片的方法。 1. 安装Python相关库 要使用Python查看图片&#xff0c;需要先安装一些相关的库。常用的库包…

ChatGPT之后,垂直大模型兴起

由ChatGPT掀起的这一波大模型浪潮中, 百度、阿里等大厂相继下场&#xff0c;王慧文、王小川、李开复等大佬也纷纷入场。年初&#xff0c;比尔盖茨高呼“人工智能时代已经开始”&#xff0c;给大模型定下了宏伟的基调。随着竞争的展开&#xff0c;大模型已不是“是否”问题&…

大佬下场AI2.0,我们帮“王慧文们”指条明路

划重点&#xff1a; 1、如果将开发大模型比做是“造房子”&#xff0c;那AI Infra 就是“工具箱”&#xff0c;而中国缺少的正是工具和原材料制造工厂。 2、根据国外市场的情况&#xff0c;可以将整个AI Infra大致分为数据准备、模型构建、模型产品三个层面&#xff0c;在这三…

win10系统提示 “你的账户已被停用,请向系统管理员咨询” 如何解决 ?

今天有位朋友,可以是不知道是为了寻求刺激,还是刷存在感, 把自己的win10系统管理员账号 Administrator 将用户给禁用了&#xff0c;并且注销完开机后,就是电脑突然提示“你的账户已被停用&#xff0c;请向系统管理员咨询”如图 : 解决方法 此情况可以长按电源键强制关机再开机…

google账号已停用(已解决)

很久没登陆Google邮箱了 近期想使用google diver发现账号被停用了 进行申请&#xff0c;但是一直没恢复 记录一下解决方法&#xff1a; 1、手机上下载谷歌邮箱和商店 2、科学进入谷歌邮箱 我是想再创建一个号的&#xff0c;在创建的过程中&#xff0c;app提示我已经有一个谷…

程序员兼职社区招募,需要技术能力强,博主粉丝皆可参与发展副业

程序员兼职社区招募 1. 机会多多2. 技术方向3. 要求4. 最后 1. 机会多多 2. 技术方向 技术方向主要为&#xff1a;Python&#xff0c;MATLAB&#xff0c;深度学习&#xff0c;语义分割 &#xff0c;机器视觉&#xff0c;知识图谱 &#xff0c;强化学习&#xff0c;三维点云&…

2023该好好赚钱了,推荐三个下班就能做的副业

在过去的两年里&#xff0c;越来越多的同事选择辞职创业。许多人通过互联网红利赚到了他们的第一桶金。随着短视频的兴起&#xff0c;越来越多的人吹嘘自己年收入百万&#xff0c;导致很多刚进入职场的年轻人逐渐迷失自我&#xff0c;认为钱特别容易赚。但事实上&#xff0c;80…