virtualbox虛擬機中的ubuntu 20.04.6安裝新的linux內核5.4.293 | 并增加一個系統調用 | 證書問題如何解決

參考文章: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 mrpropersudo 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.pswp.cn/pingmian/81064.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81064.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81064.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Java實戰]Spring Boot 3 整合 Ehcache 3(十九)

[Java實戰]Spring Boot 3 整合 Ehcache 3&#xff08;十九&#xff09; 引言 在微服務和高并發場景下&#xff0c;緩存是提升系統性能的關鍵技術之一。Ehcache 作為 Java 生態中成熟的內存緩存框架&#xff0c;其 3.x 版本在性能、功能和易用性上均有顯著提升。本文將詳細介紹…

LlamaIndex 第九篇 Indexing索引

索引概述 數據加載完成后&#xff0c;您將獲得一個文檔對象(Document)列表&#xff08;或節點(Node)列表&#xff09;。接下來需要為這些對象構建索引(Index)&#xff0c;以便開始執行查詢。 索引&#xff08;Index&#xff09; 是一種數據結構&#xff0c;能夠讓我們快速檢索…

【問題排查】easyexcel日志打印Empty row!

問題原因 日志打印??I/O 操作開銷?&#xff08;如 Log4j 的 FileAppender&#xff09;會阻塞業務線程&#xff0c;直到日志寫入完成&#xff0c;導致接口響應變慢 問題描述 在線上環境&#xff0c;客戶反饋導入一個不到1MB的excel文件&#xff0c;耗時將近5分鐘。 問題排…

代碼隨想錄第51天|島嶼數量(深搜)、島嶼數量(廣搜)、島嶼的最大面積

1.島嶼數量&#xff08;深搜&#xff09; ---》模板題 版本一寫法&#xff1a;下一個節點是否能合法已經判斷完了&#xff0c;傳進dfs函數的就是合法節點。 #include <iostream> #include <vector> using namespace std;int dir[4][2] {0, 1, 1, 0, -1, 0, 0, -…

Made with Unity | 從影視到游戲:《魷魚游戲》IP 的邊界拓展

優質IP的跨媒體開發潛力不可限量。以現象級劇集《魷魚游戲》為例&#xff0c;Netflix旗下游戲工作室Boss Fight在第二季開播前夕推出的手游《Squid Game: Unleashed》&#xff0c;一經發布便橫掃全球107個國家和地區的App Store免費游戲榜首。 這款多人派對大逃殺游戲完美還原…

allure 報告更改標題和語言為中文

在網上看到好多談到更改allure 的標題設置都很麻煩&#xff0c;去更改JSON文件 其實可以有更簡單的辦法&#xff0c;就是在生成報表時增加參數 使用allure --help 查看&#xff1a; --lang, --report-language 設置報告的語言&#xff0c;默認是應用 The report language. …

HGDB索引膨脹的檢查與處理思路

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.8 文檔用途 本文檔主要介紹HGDB索引膨脹的定義、產生的原因、如何檢查以及遇到索引膨脹如何處理&#xff08;包括預防和解決&#xff09; 詳細信息 …

【Python CGI編程】

Python CGI&#xff08;通用網關接口&#xff09;編程是早期Web開發中實現動態網頁的技術方案。以下是系統化指南&#xff0c;包含核心概念、實現步驟及安全實踐&#xff1a; 一、CGI 基礎概念 1. 工作原理 瀏覽器請求 → Web服務器&#xff08;如Apache&#xff09; → 執行…

數據庫故障排查指南:從入門到精通

1. 常見數據庫故障類型 1.1 連接故障 數據庫連接超時連接池耗盡網絡連接中斷認證失敗1.2 性能故障 查詢執行緩慢內存使用過高CPU使用率異常磁盤I/O瓶頸1.3 數據故障 數據不一致數據丟失數據損壞事務失敗2. 故障排查流程 2.1 初步診斷 -- 檢查數據庫狀態SHOW STATUS;SHOW PRO…

conda創建環境常用命令(個人用)

創建環境 conda create --name your_project_name創建環境 ---- 指定環境python版本 conda create --name your_project_name python3.x環境列表 conda env list激活環境 conda activate your_project_name退出環境 conda deactivate環境列表 #使用conda命令 conda list …

PCL 繪制二次曲面

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 這里基于二次曲面的公式: z = a 0 + a 1 x + a 2 y + a

一文講透面向對象編程OOP特點及應用場景

面向對象編程&#xff08;Object-Oriented Programming, OOP&#xff09;是一種以對象為核心、通過類組織代碼的編程范式。它通過模擬現實世界的實體和交互來構建軟件系統&#xff0c;是現代軟件開發中最廣泛使用的范式之一。以下是 OOP 的全面解析&#xff1a; 一、OOP 的四大…

linux,我啟動一個springboot項目, 用java -jar xxx.jar ,但是沒多久這個java進程就會自動關掉

當使用 java -jar xxx.jar & 啟動 Spring Boot 項目后進程自動關閉時&#xff0c;可能由多種原因導致。以下是常見排查步驟和解決方案&#xff1a; 一、查看日志定位原因 進程異常關閉通常會在控制臺或日志中留下線索&#xff0c;建議先獲取完整日志&#xff1a; 1. 查看…

【獨家精簡】win11(24h2)清爽加速版

自作該版本的初心&#xff1a;隨著電腦性能的不斷提升&#xff0c;我們需要的更多的是沒有廣告&#xff0c;沒有推薦&#xff0c;沒有收集隱私的windows清爽版純凈系統 目前只會去制作windows系統專業版 1、去除Windows系統自帶的廣告新聞和推薦以及小組間和聊天功能。 2、精簡…

大二java第一面小廠(掛)

第一場&#xff1a; mybatis怎么防止數據轉義。 Hutool用的那些你常用的方法。 springboot的常用注解。 redis的多級緩存。 websocket怎么實現的多人協作編輯功能。 怎么實現的分庫分表。 mysql里面的各種操作&#xff0c;比如說分表怎么分&#xff0c;分頁查詢怎么用。 mybat…

OceanBase 的系統變量、配置項和用戶變量有何差異

在繼續閱讀本文之前&#xff0c;大家不妨先思考一下&#xff0c;數據庫中“系統變量”、“用戶變量”以及“配置項”這三者之間有何不同。如果感到有些模糊&#xff0c;那么本文將是您理清這些概念的好幫手。 很多用戶在使用OceanBase數據庫中的“配置項”和“系統變量”&#…

HTML-3.3 表格布局(學校官網簡易布局實例)

本系列可作為前端學習系列的筆記&#xff0c;代碼的運行環境是在HBuilder中&#xff0c;小編會將代碼復制下來&#xff0c;大家復制下來就可以練習了&#xff0c;方便大家學習。 系列文章目錄 HTML-1.1 文本字體樣式-字體設置、分割線、段落標簽、段內回車以及特殊符號 HTML…

如何在Edge瀏覽器里-安裝夢精靈AI提示詞管理工具

方案一&#xff08;應用中心安裝-推薦&#xff09;&#xff1a; 夢精靈 跨平臺AI提示詞管理工具 - Microsoft Edge AddonsMake Microsoft Edge your own with extensions that help you personalize the browser and be more productive.https://microsoftedge.microsoft.com…

GpuGeek 網絡加速:破解 AI 開發中的 “最后一公里” 瓶頸

摘要&#xff1a; 網絡延遲在AI開發中常被忽視&#xff0c;卻嚴重影響效率。GpuGeek通過技術創新&#xff0c;提供學術資源訪問和跨國數據交互的加速服務&#xff0c;助力開發者突破瓶頸。 目錄 一、引言&#xff1a;當算力不再稀缺&#xff0c;網絡瓶頸如何破局&#xff1f; …

校園社區小程序源碼解析

基于ThinkPHP、FastAdmin和UniApp開發的校園社區小程序源碼&#xff0c;旨在為校園內的學生和教職員工提供一個便捷的在線交流和服務平臺。 該小程序前端采用UniApp進行開發&#xff0c;具有良好的跨平臺兼容性&#xff0c;可以輕松發布到iOS和Android平臺。同時&#xff0c;后…