实现最简的内核模块

news2024/12/23 13:34:34

实现最简单的内核模块,可从中窥探内核模块的编写流程。同时,也可以在其上进行扩展,对内核函数和全局变量进行调用和打印,熟悉内核接口。

在实现最简内核模块之前,在本地安装配置开发环境。可用选择使用vagrant工具快速构建虚拟机。

打开虚拟机,创建工作目录,并编写Makefile文件和内核模块文件。如下所示:

内核模块文件名称为fishing.c,内容如下:

#include <linux/init.h>
#include <linux/module.h>

static int hello_init(void) {
        printk(KERN_ALERT "init fishing\n");
        return 0;
}

static void hello_exit(void) {
        printk(KERN_ALERT "exit fishing\n");
}
subsys_initcall(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("shakespeare");

Makefile文件内容如下:

ifneq ($(KERNELRELEASE),)
$(info "2nd")

obj-m := fishing.o

else
#kdir := /lib/modules/$(shell uname -r)/build
kdir := /usr/src/linux-headers-$(shell uname -r)
pwd := $(shell pwd)

all:
        $(info "1st")
        make -C $(kdir) M=$(pwd) modules

clean:
        rm *.ko *.o *.order *.mod.c *.symvers *.mod
endif

下载内核源码:

sudo apt install linux-headers-$(uname -r)

进入/home/vagrant/simple目录,使用make命令编译内核模块。

加载内核模块:

sudo insmod fishing.ko

卸载内核模块:

sudo rmmod fishing

最后,使用dmesg查看加载/卸载内核模块时,内核打印的日志:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMEYA360:ROHM开发出可更大程度激发GaN器件性能的超高速栅极驱动器IC

全球知名半导体制造商ROHM(总部位于日本京都市)开发出一款超高速驱动GaN器件的栅极驱动器IC“BD2311NVX-LB”。 近年来&#xff0c;在服务器系统等领域&#xff0c;由于 IoT 设备的需求日益增长&#xff0c;电源部分的功率转换效率提升和设备的小型化已经成为重要的社会课题&am…

Cannot use object of type __PHP_Incomplete_Class as array

场景&#xff1a;将项目复制 出来一份后&#xff0c;修改控制器&#xff0c;打开后就报错 解决&#xff1a;将runtime 清除后就正常了

GEE:为机器学习算法(随机森林、支持矢量机等)加入膨胀/腐蚀特征

作者:CSDN @ _养乐多_ 腐蚀和膨胀 是数学形态学图像处理中的两个基本操作,用于修改和分析二值图像(包含只有两个像素值的图像,通常是黑和白)。这些操作可用于博客《GEE:随机森林分类教程(样本制作、特征添加、训练、精度、参数优化、贡献度、统计面积)》中写的机器学习…

字节码增强技术-ASM

概述 在Java中一般是用javac命令编译源代码为字节码文件&#xff0c;一个.java文件从编译到运行的示例如图所示: 使用字节码的好处&#xff1a;一处编译&#xff0c;到处运行。java 就是典型的使用字节码作为中间语言&#xff0c;在一个地方编译了源码&#xff0c;拿着.class …

逻辑回归揭秘: 从分类原理到机器学习实践

机器学习 第五课 逻辑回归 概述逻辑回归应用领域逻辑回归 vs 线性回归基本定义输出类型函数关系误差计算使用场景数据分布 逻辑回归的数学原理Sigmoid 函数多数几率似然函数逻辑回归损失函数 正则化L1 正则化L2 正则化L1 vs L2 实例 标准化为什么要标准化?如何进行标准化? 梯…

【Vue】前端解决跨域问题——反向代理

在 axios 请求路径只需填写资源路径&#xff1a; axios.get(/users).then(res > {console.log(res) })此时相当于向自己发送请求&#xff0c;会报 404。 然后在 vue.config,js 中配置反向代理&#xff1a; const { defineConfig } require(vue/cli-service) module.expo…

智安网络|从区块链到社交网络:解析去中心化的意义与应用

在当今数字化的世界中&#xff0c;一个越来越常见的概念是“去中心化”。从区块链技术到金融系统&#xff0c;从社交网络到数据存储&#xff0c;去中心化被认为是一种前所未有的方式来重新定义和改变传统的中心化结构。那么&#xff0c;去中心化到底是什么&#xff1f; 首先&a…

ThreadX任务栈大小确定及其溢出检测方法详解

在使用ThreadX实时操作系统&#xff08;RTOS&#xff09;进行嵌入式系统开发时&#xff0c;合理确定任务栈的大小及进行溢出检测是非常重要的。本篇博客将介绍如何确定ThreadX任务栈大小以及常用的溢出检测方法&#xff0c;并提供相应的代码示例。 一、确定ThreadX任务栈大小 …

基于springboot实现滴答拍摄影项目【项目源码+论文说明】计算机毕业设计

摘要 拍摄能让人放开自我、因看到不同的美景都想留下美好的记忆&#xff0c;有些人喜欢拍摄静物来表现宁静的氛围&#xff0c;通过小品类的照片&#xff0c;传达内心的情绪。而我更喜欢另一种方式&#xff0c;就是用长时间曝光把波动的海水或湖水雾化&#xff0c;拍摄出来的作…

Linux Docker图形化工具Portainer如何进行远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

【合宙Air700E/780E短信转发】短信转发移动联通 不要钉钉不要微信,转发自建服务器-傻瓜式搭建

官方提供的教程介绍了通过钉钉、微信等工具接收短信验证码的方法&#xff0c;但最终实现的目的是获取验证码&#xff0c;而不是通过工具间接获得。 因此&#xff0c;我们可以直接调用API接口来获取验证码&#xff0c;从而达到更快、更便捷地获得验证码的目的。 所以做了一个服…

uniapp开发微信小程序,webview内嵌h5,h5打开pdf地址,解决方案

根据公司要求&#xff0c;让我写一个h5&#xff0c;后续会嵌入到合作公司的微信小程序的webview中&#xff0c;如果是自己公司微信小程序&#xff0c;可以采取先下载下来pdf&#xff0c;然后通过wx.openDocument&#xff0c;进行单纯的预览操作&#xff0c;这个可以根据这个老哥…

chromium arm64 新版

chrome官方并没有对外公布arm64的正式版本但debian已经适配&#xff0c;以下链接提取自debian可直接一条命令安装&#xff1a;sudo dpkg -i *.deb即可 https://www.aliyundrive.com/s/vVCpzTyFjH6

CV、MV基础知识(持续补充ing)

文章目录 全局自注意机制Permutation InvariantMLP扩展比AP、mAP、FLOPs、FPS、Top1、mIoUAP (平均精度)&#xff1a;mAP (平均精度均值)&#xff1a;FLOPs (浮点运算数)&#xff1a;FPS (每秒帧数)&#xff1a;Top1 (前1精度)&#xff1a;mIoU (平均交并比)&#xff1a; Preci…

虚幻引擎:代理

一、代理类型 1.单薄代理 特点&#xff1a;允许有返回值&#xff0c;允许有参数&#xff0c;只可以一对一的传递消息就算绑定多个&#xff0c;但是总会被最后一个覆盖 2.多播代理 特点&#xff1a;不允许有返回值&#xff0c;允许有参数允许一对多传递消息 3.动态代理 …

25 个超棒的 Python 脚本合集

Python是一种功能强大且灵活的编程语言&#xff0c;拥有广泛的应用领域。下面是一个详细介绍25个超棒的Python脚本合集&#xff1a; 1. 网络爬虫&#xff1a;使用Python可以轻松编写网络爬虫&#xff0c;从网页中提取数据并保存为结构化的格式。 2. 数据清洗和预处理&#xf…

GEE:对二值图层进行腐蚀和/或膨胀操作

作者:CSDN @ _养乐多_ 腐蚀和膨胀 是数学形态学图像处理中的两个基本操作,用于修改和分析二值图像(包含只有两个像素值的图像,通常是黑和白)。这些操作可用于处理遥感图像、地理信息系统(GIS)中的栅格数据以及其他领域的图像处理。 腐蚀(Erosion):腐蚀是一种用于缩小…

北京筑龙助力中粮集团MRO集采顺利完成

近日&#xff0c;中粮集团MRO集采项目在中粮E采供应链采购平台顺利完成。作为中粮集团3年一次的集中采购类项目&#xff0c;本次采购创新采用清单式采购&#xff0c;涵盖中粮集团全集团的物资类集中采购&#xff0c;采购物料清单总量达10w&#xff0c;涉及供应商近千家&#xf…

科技成果验收测试有什么作用?需要提供哪些材料?

科技成果验收测试是指对科技成果进行系统全面的评估和检验&#xff0c;以确保其技术的稳定性、可行性和可靠性&#xff0c;以及达到预期效果和质量指标。它在新产品研发、项目推进和市场推广等方面起着重要作用。 一、科技成果验收测试的作用   1、有助于评估科技成果的可行…

人物百度百科词条创建教程分享,建议收藏

如何在互联网上树立个人品牌&#xff0c;展示自己的专业度和影响力&#xff1f;百度百科词条给大家提供了一个绝佳的展示平台。本文伯乐网络传媒将为您揭秘人物百度百科词条创建的全过程&#xff0c;助您轻松打造专属的数字名片。 一、了解百度百科词条 百度百科是全球最大的中…