当前位置: 首页 > 编程日记 > 正文

centos 自定义内核模块 编译运行

简单记录一下 centos 自定义内核模块的一些编译运行记录,代码如下:

主要功能是通过rdtsc 指令直接从 CPU MSR 寄存器中获取时钟,尝试获取两次,两次之间会做一些赋值操作什么的,并记录一下时差。

#include <linux/hardirq.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/preempt.h>
#include <linux/sched.h>
void inline measured_function(volatile int *var) { (*var) = 1; }static int __init hello_start(void) {unsigned long flags;uint64_t start, end;int variable = 0;unsigned cycles_low, cycles_high, cycles_low1, cycles_high1;printk(KERN_INFO "Loading test module...\n");preempt_disable();         /*we disable preemption on our CPU*/raw_local_irq_save(flags); /*we disable hard interrupts on our CPU*//*at this stage we exclusively own the CPU*/asm volatile("RDTSC\n\t""mov %%edx, %0\n\t""mov %%eax, %1\n\t": "=r"(cycles_high), "=r"(cycles_low));measured_function(&variable);asm volatile("RDTSC\n\t""mov %%edx, %0\n\t""mov %%eax, %1\n\t": "=r"(cycles_high1), "=r"(cycles_low1));raw_local_irq_restore(flags);/*we enable hard interrupts on our CPU*/preempt_enable(); /*we enable preemption*/start = (((uint64_t)cycles_high << 32) | cycles_low);end = (((uint64_t)cycles_high1 << 32) | cycles_low1);printk(KERN_INFO "\n function execution time is %llu clock cycles",(end - start));return 0;
}static void __exit hello_end(void) { printk(KERN_INFO "Goodbye Mr.\n"); }
module_init(hello_start);
module_exit(hello_end);

编译方式,Makefile

# obj-m 必须存在,后面的 .o 文件可以是自己的文件名,其他无需更改
obj-m := rdtsc_mode.o 
KERNELBUILD :=/lib/modules/$(shell uname -r)/build
default:make -C $(KERNELBUILD) M=$(shell pwd) modulesclean:rm -rf *.o *.ko *.mod.c .*.cmd 

将源代码文件和 makefile 放在一个目录之下,
sudo make 执行即可,执行成功之后会在当前目录下生成一个 rdtsc_mode.ko 文件。

执行 sudo insmod rdtsc_mode.ko 加载模块,以及卸载模块 rmmod rdtsc_mode.ko,通过 dmesg -Tw 能看到自定模块的输出信息:

[Fri Jan 14 16:41:52 2022] Loading test module...
[Fri Jan 14 16:41:52 2022] function execution time is 3504353503 clock cycles
[Fri Jan 14 16:42:11 2022] Goodbye Mr.

当然, 这个只是方便对内核的一些知识做一些简单测试,稳定性则需要自己保证。

相关文章:

os.system() 和 os.popen()

1.os.popen(command[, mode[, bufsize]]) os.system(command)2.os.popen() 功能强于os.system() , os.popen() 可以返回回显的内容&#xff0c;以文件描述符返回。eg:t_f os.popen ("ping 192.168.1.1")print t_f.read()或者:for line in os.popen("dir"…

Java项目:医院管理系统(java+Springboot+Maven+Mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述本系统功能包括&#xff1a;医院挂号&#xff0c;退号&#xff0c;缴费&#xff0c;退费&#xff0c;检查申请单开立&#xff0c;科室管理&#xff0c;医生开单&#xff0c;挂号级别&#xff0c…

任意阶幻方..

1 /*coder Gxjun*/2 #include<stdio.h>3 #include<string.h>4 #include<stdlib.h>5 #define maxn 1006 int map[maxn][maxn] ;7 void creat_magic(int n,int x,int y ,int sn) //奇阶幻方构造8 {9 int i,j,k;10 i0;11 jn/2;12 for(kn;k<…

UML与软件建模 第三次作业

1.单元测试的任务有哪些&#xff1f; 单元测试是对软件基本组成单元进行的测试,而且软件单元是与程序的其他部分相隔离的情况下进行独立的测试. 任务主要包括对单元功能、逻辑控制、数据和安全性等各方面进行必要的测试。具体地说&#xff0c;包括单元中所有独立执行路径、数据…

Pliops XDP(Extreme Data Processor)数据库存储设计的新型加速硬件

文章目录0 前言1 核心问题1.1 引擎的各方面性能受限于数据结构的选择1.2 压缩功能 导致的CPU瓶颈1.3 Crash-safe 崩溃异常的无奈选择1.4 当前主流 加速硬件 较难满足存储性能提升的要求2 XDP 设计原则2.1 数据结构上的优化2.2 解决 压缩引入的CPU消耗2.3 异常恢复的设计2.4 易于…

Java项目:潜艇大战项目(java+swing)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 功能简介&#xff1a; Java swing实现的一款小游戏潜艇大战的项目源码 游戏界面&#xff1a; SuppressWarnings({ "unused", "serial" }) public class GameGUI extends JPanel {//卡…

可以发张图片做链接用吗

转载于:https://www.cnblogs.com/wasss/p/4466492.html

更改显示器的分辨率

1.桌面右击&#xff0c;如图1-1所示。2.点击屏幕分辩率&#xff0c;选择分辨率调大小&#xff0c;确定&#xff0c;如图1-2所示。转载于:https://blog.51cto.com/qikai/1367734

Java 处理0x00特殊字符

Java 处理0x00特殊字符 一、0x00字符 1&#xff0c;0x00是ascii码的0值&#xff1a;NUL 2&#xff0c;0x00在windows系统中显示&#xff1a; 3&#xff0c;0x00在Linux中显示&#xff1a; ctrlV ctrl可以打出此字符 二、Java解决0x00字符 str.replaceAll("\\u0000",&…

关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

二月的最后一篇水文…想写一些有意思的东西。 文章目录环检测在图数据结构中的应用深度/广度优先 检测环并查集数据结构 (Union-Find)基本概念初始化合并 union查找祖先优化1: 合并过程 利用 rank 优化路径优化2: 路径压缩(Path Compression)并查集 解决图中检测环问题环检测在…

Java项目:智能制造生产管理平台(java+SSM+mysql+Maven+Easyui+JSP)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 运行环境&#xff1a;jdk1.8、tomcat7.0/8.5、Mysql5.7/5.1、Maven3.6/3.5、 eclipse/STS 功能简介&#xff1a;计划进度、设备管理、工艺监控、物料监控、质量监控、人员监控等 访问注册控制层&#xff1a;…

JAVA-Eclipse快捷键

Ctrl1&#xff1a;快速修复。CtrlD:快速删除行。ShiftEnter&#xff1a;快速调到下一行。CtrlF11:快速运行。Alt上下方向键&#xff1a;快速移动。CtrlM:光标所在视图最大化。Alt/:智能补全。Ctrl/&#xff1a;快速注释代码。 转载于:https://www.cnblogs.com/bluewhy/p/44669…

Android RelativeLayout属性

// 相对于给定ID控件android:layout_above 将该控件的底部置于给定ID的控件之上;android:layout_below 将该控件的底部置于给定ID的控件之下;android:layout_toLeftOf 将该控件的右边缘与给定ID的控件左边缘对齐;android:layout_toRightOf 将该控件的左边缘与给定ID的控件右边缘…

详解Azure的权限控制

注意&#xff1a;本文档仅限于Azure国际版&#xff0c;国内版略有不同Azure中的角色分配相对来说是比较复杂的的&#xff0c;对于任何云组织来说&#xff0c;云的资源访问管理权限都是一项非常重要的功能&#xff0c;azure中的授权系统叫做基于角色的访问控制&#xff08;RBAC&…

SNMP introduction

简单网络管理协议(SNMP)首先是由Internet工程任务组织(Internet Engineering Task Force)(IETF)的研究小组为了解决Internet上的路由器管理问题而提出的。许多人认为 SNMP在IP上运行的原因是Internet运行的是TCP/IP协议&#xff0c;然而事实并不是这样。 SNMP被设计成与协议无…

Java项目:在线考试系统(java+SSM+mysql+JSP)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 运行环境&#xff1a;jdk1.8、Mysql5.7、Tomcat8.5、IDEA/Eclipse 功能简介&#xff1a;在线考试、历史回顾、个人成绩查询等。 管理员和教师功能有&#xff1a;学院管理、班级管理、课程管理、教师、学生…

Keil中使用宏编译来定义DEBUG输出

使用宏编译来格式化调试信息&#xff0c;是一个不错的方法&#xff0c;即可以在需要的时候打印出信息&#xff0c;还可以格式化我们所需要的输出。 #define DEBUG 1 #if (DEBUG 1) #define DBG(Args...) printf(##Args) #define DBGFL(s, Args...) printf("[%s:%d]&qu…

解决用户使用临时配置文件登陆WIN7的问题

用户登录Win7后&#xff0c;经常会遇到 “您已使用临时配置文件登陆” 的提示,忽略此提示的用户通常在桌面上保留的文件再次重启进入后发现文件丢失了&#xff0c;或者原有桌面上的文件不见了&#xff0c;这样一定程度上降低了工作的效率.这里主要说一下如何解决此问题。用户登…

chosen.jquery.js 有搜索功能、多选功能的下拉框插件

chosen.jquery.js 有搜索功能、多选功能的下拉框插件 官方源码&#xff1a; https://github.com/harvesthq/chosen 该源码中的样例index.html有该插件的详细使用介绍posted on 2019-05-09 14:40 三天打鱼&#xff0c;两天晒网 阅读(...) 评论(...) 编辑 收藏 转载于:https://w…

MIB in SNMP

管理信息库MIB指明了网络元素所维持的变量&#xff08;即能够被管理进程查询和设置的信息&#xff09;。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构&#xff0c;它的根在最上面&#xff0c;根没有名字。图3画…

Java项目:后台管理系统脚手架项目(java+SpringBoot+FreeMarker+mysql+JSP)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目描述&#xff1a; 这是一个基于SpringBoot框架开发的后台管理系统脚手架项目。之所以称为脚手架项目&#xff0c;是因为这个项目复用性很强&#xff0c;如果以后有其他新的项目要设计后台管理系统的话&…

Extjs4.0.7 MVC Architecture异常

uncaught exception: Ext.Loader is not enabled, so dependencies cannot be resolved dynamically. Missing required class: AM.controller.User 解决方法&#xff1a; 在app.js最上面加上&#xff1a;Ext.Loader.setConfig({ enabled: true }); Ext.Loader.setConfig({ …

Mybatis常见面试题(三)

Mybatis 映射文件中&#xff0c;如果 A 标签通过 include 引用了 B 标签的内容&#xff0c;请问&#xff0c; B 标签能否定义在 A 标签的后面&#xff0c;还是说必须定义在 A 标签的前面&#xff1f; :虽然 Mybatis 解析 Xml 映射文件是按照顺序解析的&#xff0c;但是&#x…

SMI in SNMP

SNMP中&#xff0c;数据类型并不多。这里我们就讨论这些数据类型&#xff0c;而不关心这些数据类型在实际中是如何编码的。INTEGER一个变量虽然定义为整型&#xff0c;但也有多种形式。有些整型变量没有范围限制&#xff0c;有些整型变量定义为特定的数值&#xff08;例如&am…

Java项目:在线拍卖竞价系统(java+SpringBoot+FreeMarker+Mysql+redis)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 超级管理员&#xff1a;系统管理、用户管理&#xff08;冻结等&#xff09;、审批竞拍标的物管理、竞标类型管理、审批机构、个人提现管理&#xff08;审核&#xff09;、企业提现管理&#xff08;审批&…

pig脚本不需要后缀名(python tempfile模块生成pig脚本临时文件,执行)

pig 脚本运行不需要后缀名 pig脚本名为tempfile&#xff0c;无后缀名 用pig -f tempfile 可直接运行 另外&#xff0c;pig tempfile也可以直接运行这样就可以用python临时文件存储pig脚本内容直接调用 python调用pig脚本的一种方式 将pig脚本用任意文件存储&#xff0c;执行时写…

老谢oracle视频笔记_day02

1:databasea:physical structure1:controlfile控制文件select * from v$controlfile;11g 以三个11g二个互为镜像文件坏了数据库就打不开了..IO一个块 16k一个文件2MB不会太大?10MB数据库名数据文件位置很多的参数.....2:datafile 数据文件select file_name,file_id from dba_d…

WCDMA系统中的扰码规划

摘要&#xff1a;宽带码分多址(WCDMA)系统采用码分多址的无线接入方式&#xff0c;不需频率规划&#xff0c;但需进行相邻小区扰码的规划用以区分各小区。通过WCDMA无线网络的扰码规划&#xff0c;可以确定两个使用相同扰码的小区的复用距离&#xff0c;区分各小区。扰码规划时…

Java项目:宿舍寝室维修上报管理系统(java+SpringBoot+FreeMarker+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 管理员&#xff1a;校园管理&#xff08;楼栋管理、宿舍管理&#xff09;、师生管理&#xff08;学生管理、辅导员管理&#xff09;、维修管理&#xff08;维修工管理、维修进度管理&#xff09;、阅览室管理…

项目需求分析与建议

软件名称&#xff1a;私人助手 1.N(需求)&#xff1a;当今生活节奏迅速&#xff0c;每个人每天都有许多事情要做&#xff0c;堆积成山的事情往往让人感到迷茫&#xff0c;不知道什么时候要做什么事情。私人助手就是为了解决这个烦恼而产生&#xff0c;它会根据最初你添加的事物…