virtualbox虚拟机中的ubuntu 20.04.6安装新的linux内核5.4.293 | 并增加一个系统调用 | 证书问题如何解决

news2025/5/20 23:32:19

参考文章:linux添加系统调用【简单易懂】【含32位系统】【含64位系统】_64位 32位 系统调用-CSDN博客

安装新内核

1. 在火狐下载你需要的版本的linux内核压缩包

这里我因为在windows上面下载过,配置过共享文件夹,所以直接复制粘贴通过共享文件夹得到源码。共享文件夹配置可以参考教程:VM Virtualbox虚拟机ubuntu共享文件夹 | 权限控制问题解决-CSDN博客

2. 在你下载的文件夹中打开终端

分别执行两个语句

sudo -s
//申请权限
cp linux-5.4.293.tar.xz /usr/src
//将这个压缩包拷贝至 /usr/src

在usr/src中成功找到!

在这里打开终端,对源码进行解压

sudo tar -xvf linux-5.4.293.tar.xz
  • sudo:以超级用户权限执行命令(需要输入管理员密码)
  • tar:Linux 下的归档工具
  • -x:解压模式(extract)
  • -v:显示详细过程(verbose)
  • -f:指定文件名(file)

下面就得到了新内核!

给新内核添加一个新的系统调用

以下参考linux官方手册:如何给linux-5.4添加一个系统调用Adding a New System Call — The Linux Kernel documentation

我最后一遍重新下载了linux 5.19的版本:

Index of /pub/linux/kernel/v5.x/

参考视频[Linux Kernel] 系统调用的添加和测试(syscall;QEMU)_哔哩哔哩_bilibili

放在前面的友情提示:

这个虚拟机分配的内存一定要够,我是分配了60G,最终源码都是放在usr/src下面,最好保证编译之前有30G左右的内存,不然会在你接近成功的时候发生“设备上没有空间”的错误,功亏一篑!

报这个错,再次打开虚拟机会发现虚拟机再也用不了了,只能重开

找一个文件夹,它的绝对路径为:

/usr/src/linux-5.4.293/arch/x86/entry/syscalls


进去之后看这两个文件,你的虚拟机的操作系统是32位就改syscall_32.tbl,64位就改syscall_64.tbl
不知道系统是多少位的?打开终端,输入命令getconf LONG_BIT,看看你现在的操作系统中,long型数据占几位,就知道系统是几位的了

下面的部分就是修改内核源码的部分了:

下面三张白色的图是视频里面的,用作参考,后面的图是我自己修改的

 

#include <linux/kernel.h>
#include <linux/syscalls.h>
#include <linux/sched/signal.h>   // for for_each_process
#include <linux/uaccess.h>        // for copy_to_user
#include <linux/printk.h>
#include <linux/errno.h>

SYSCALL_DEFINE4(ps_info,
    int __user *, pid,
    char __user *, comm,
    long long __user *, ttime,
    long __user *, state)
{
    struct task_struct *task;
    int counter = 0;
    long ret;

    printk(KERN_INFO "[Syscall] ps_info invoked\n");
    printk(KERN_INFO "[StuID] ZhuoJunxi from CSU\n");

    for_each_process(task) {
        /* PID */
        ret = copy_to_user(&pid[counter],
                           &task->pid,
                           sizeof(task->pid));
        if (ret) 
            return -EFAULT;

        /* Command name (fixed 16 bytes) */
        ret = copy_to_user(&comm[counter * TASK_COMM_LEN],
                           task->comm,
                           TASK_COMM_LEN);
        if (ret)
            return -EFAULT;

        /* Cumulative execution time */
        ret = copy_to_user(&ttime[counter],
                           &task->se.sum_exec_runtime,
                           sizeof(task->se.sum_exec_runtime));
        if (ret)
            return -EFAULT;

        /* Current state (renamed __state in 5.14+) */
        ret = copy_to_user(&state[counter],
                           &task->__state,
                           sizeof(task->__state));
        if (ret)
            return -EFAULT;

        counter++;
    }

    return 0;
}

修改完源码之后,就要准备编译了。

suso make mrproper

sudo make clean 

# 步骤1:编译内核镜像(bzImage)和模块(modules)

sudo make -j12  //这里的j是你分配给虚拟机的内核数量

make出现问题:由需要签名证书部分交互的,或者说不存在XXX(这里我找不到bug图片了)

解决方法:为 Linux 内核模块签名生成所需的证书和私钥。

mkdir -p certs && openssl req -new -x509 -newkey rsa:4096 -keyout certs/signing_key.pem -out certs/signing_key.x509 -nodes -subj "/CN=Kernel Signing Key/"

这样再重新运行make指令就好了,中间如果有一些bug是需要下载--直接下载

 

注意:只有出现最后一句 Kernel :       is ready 才是编译成功的标志

否则就去上面找哪里有错误,一个个修正

编译时间参考:15核CPU编译一分钟,4核CPU编译两小时

sudo make modules_install
sudo make install

 内核编译好后,重启虚拟机,输入

uname -a

查看当前内核是否为你修改的那个内核,成功! 

测试程序 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/syscall.h>

#define __NR_ps_info 451  // 根据实际系统调用号调整

int main() {
    int pids[100];
    char comms[100 * 16];
    long long times[100];
    long states[100];
    int count = 100;
    
    // 调用 ps_info 系统调用
    syscall(__NR_ps_info, pids, comms, times, states, &count);
    
    printf("Retrieved %d processes\n", count);
    for (int i = 0; i < count && i < 10; i++) {  // 只打印前10个进程
        printf("PID: %d, Comm: %s, Time: %lld, State: %ld\n",
               pids[i], &comms[i*16], times[i], states[i]);
    }
    
    return 0;
}

运行测试 

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

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

相关文章

unity UGUI虚线框shader

Shader "Custom/DottedLineShader" {Properties{_MainTex ("Texture", 2D) "white" {}_Color("Color",COLOR) (1,1,1,1)_LineLength("虚线长度",float) 0.08}SubShader{Tags //设置支持UGUI{ "Queue""Tran…

chirpstack v4版本 全流程部署[ubuntu+docker]

背景介绍 由于chirpstackv3 版本使用的是锐米提供的版本,从网络上寻找的资源大多数都是一样的v3版本,是经过别人编译好发布出来的,原本的chirpsatck项目是运行的linxu环境下的,因此我的想法是在linux服务器上部署chirpsatckv4,暂时使用linux上的chirpstack v4版本,目前编译成e…

数字信号处理-大实验1.1

MATLAB仿真实验目录 验证实验&#xff1a;常见离散信号产生和实现验证实验&#xff1a;离散系统的时域分析应用实验&#xff1a;语音信号的基音周期&#xff08;频率&#xff09;测定 目录 一、常见离散信号产生和实现 1.1 实验目的 1.2 实验要求与内容 1.3 实验…

对抗性机器学习:AI模型安全防护新挑战

随着采用对抗性机器学习&#xff08;Adversarial Machine Learning, AML&#xff09;的AI系统融入关键基础设施、医疗健康和自动驾驶技术领域&#xff0c;一场无声的攻防战正在上演——防御方不断强化模型&#xff0c;而攻击者则持续挖掘漏洞。2025年&#xff0c;对抗性机器学习…

[[春秋云境] Privilege仿真场景

文章目录 靶标介绍&#xff1a;知识点卷影拷贝(VSS) 外网任意文件读取Jenkins管理员后台rdp远程登录Gitlab apiToken 内网搭建代理 Oracle RCESeRestorePrivilege提权mimikatzspn卷影拷贝提取SAM 参考文章 靶标介绍&#xff1a; 在这个靶场中&#xff0c;您将扮演一名资深黑客…

Redis学习打卡-Day3-分布式ID生成策略、分布式锁

分布式 ID 当单机 MySQL 已经无法支撑系统的数据量时&#xff0c;就需要进行分库分表&#xff08;推荐 Sharding-JDBC&#xff09;。在分库之后&#xff0c; 数据遍布在不同服务器上的数据库&#xff0c;数据库的自增主键已经没办法满足生成的主键全局唯一了。这个时候就需要生…

数据库第二次作业--SQL的单表查询与多表查询

单表查询 查询专业信息表中的专业名称和专业类型 SELECT Mname, Mtype FROM MajorP;查询一个学校有多少个专业 SELECT COUNT(Mno) AS 专业数量 FROM MajorP;查询学校的男女学生各有多少位 SELECT Ssex&#xff0c; COUNT(*) AS 人数 FROM StudentP GROUP BY Ssex查询每个专业…

在Cursor中启用WebStorm/IntelliJ风格快捷键

在Cursor中启用WebStorm/IntelliJ风格快捷键 方法一&#xff1a;使用预置快捷键方案 打开快捷键设置 Windows/Linux: Ctrl K → Ctrl SmacOS: ⌘ K → ⌘ S 搜索预设方案 在搜索框中输入keyboard shortcuts&#xff0c;选择Preferences: Open Keyboard Shortcuts (JSON) …

vue3:十三、分类管理-表格--编辑、新增、详情、刷新

一、效果 实现封装表格的新增、编辑、详情查看,表格刷新功能 实现表格组件中表单的封装 1、新增 如下图,新增页面显示空白的下拉,文本框,文本域,并实现提交功能 2、编辑 如下图,点击行数据,可将行数据展示到编辑弹窗,并实现提交功能 3、详情 如下图,点击行数据,…

c#基础01(.Net介绍)

文章目录 .Net平台介绍.Net平台简介跨平台开源.Net Core.Net Framework开发工具安装选项 创建项目 .Net平台介绍 .Net平台简介 .NET是一种用于构建多种应用的免费开源开放平台&#xff0c;例如&#xff1a; Web 应用、Web API 和微服务 云中的无服务器函数 云原生应用 移动…

Logrotate:配置日志轮转、高效管理Linux日志文件

Logrotate 是 Linux 系统中用于自动化管理日志文件的工具&#xff0c;能够定期轮转、压缩、删除日志文件&#xff0c;确保系统日志不会无限制增长&#xff0c;占用过多磁盘空间。 它通常由 Cron 作业定期执行&#xff0c;也可以手动触发。 1. &#x1f527; 核心功能 日志轮转…

贵州某建筑物挡墙自动化监测

1. 项目简介 某建筑物位于贵州省某县城区内&#xff0c;靠近县城主干道&#xff0c;周边配套学校、医院、商贸城。建筑物临近凤凰湖、芙蓉江等水系&#xff0c;主打“湖景生态宜居”。改建筑物总占地面积&#xff1a;约5.3万平方米&#xff1b;总建筑面积&#xff1a;约15万平…

nginx服务器实验

1.实验要求 1&#xff09;在Nginx服务器上搭建LNMP服务&#xff0c;并且能够对外提供Discuz论坛服务。 在Web1、Web2服务器上搭建Tomcat 服务。 2&#xff09;为nginx服务配置虚拟主机&#xff0c;新增两个域名 www.kgc.com 和 www.benet.com&#xff0c;使用http://www.kgc.…

高速光耦在通信行业的应用(五) | 5Mbps通信光耦的特性

针对5MBd速率光耦市场&#xff0c;晶台推出KL2200、KL2201和KL2202系列光耦 ,对标大部分国外品牌产品的应用&#xff1b;它分别由一个红外发射二极管和一个高速集成光电检测器逻辑门组成。 它采用 8 引脚 DIP 封装&#xff0c;并提供 SMD 选项。KL2200 的检测器具有一个三态输出…

Apidog MCP服务器,连接API规范和AI编码助手的桥梁

#作者&#xff1a;曹付江 文章目录 1.了解 MCP2.什么是 Apidog MCP 服务器&#xff1f;3.Apidog MCP 服务器如何工作4.利用人工智能改变开发工作流程5.设置 Apidog MCP 服务器&#xff1a; 分步指南5.高级功能和提示5.1 使用 OpenAPI 规范5.2.多个项目配置5.3.安全最佳实践5.4…

国内MCP服务平台推荐 AIbase推出MCP服务器客户端商店

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度发展&#xff0c;不断改变着我们的生活和工作方式。2025年&#xff0c;AI领域迎来了一项重要的技术进展——MCP(Model Context Protocol&#xff0c;模型上下文协议)的广泛应用。这一技术…

Profinet转Ethernet IP主站网关:点燃氢醌生产线的智慧之光!

案例分享&#xff1a;转角指示器和Profinet转EthernetIP网关的应用 在现代工业自动化中&#xff0c;设备和系统之间的高效通信至关重要。最近&#xff0c;我们在某大型化工企业的生产线上实施了一个项目&#xff0c;旨在通过先进的设备和通信技术提高生产效率和安全性。该项目…

爬虫攻防战:从入门到放弃的完整对抗史与实战解决方案

爬虫攻防战:从入门到放弃的完整对抗史与实战解决方案 这张有趣的图片生动描绘了爬虫开发者与反爬工程师之间的"军备竞赛"。作为技术博主,我将基于这张图的各个阶段,深入分析爬虫技术的演进与对应的反制措施,提供一套完整的反爬解决方案,包括技术原理、实施方法…

[ctfshow web入门] web75

信息收集 启用了open_basedir&#xff0c;所以之前的方法又不能用了 解题 cforeach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString(). ); } ob_flush();cif ( $a opendir("glob:///*") ) {while ( ($file readdir($a)) ! false …

交流学习 | 江西同为科技有限公司赴海尔总部考察交流

2025年4月8日至9日&#xff0c;江西同为科技有限公司在江西省科技装备商会的带领下&#xff0c;以蔡文君经理为代表&#xff0c;一行人赴山东青岛海尔总部开展两天的考察交流活动。本次考察不仅深入剖析了海尔企业的前沿技术与管理理念&#xff0c;更促进了行业内科技创新、商业…