Ubuntu 添加系統調用

  • 實驗內容

  • 通過內核編譯法添加一個不用傳遞參數的系統調用,其功能可自定義。

    (1)添加系統調用號,系統會根據這個號找到syscall_table中的相應表項。具體做法是在syscall_64.tbl文件中添加系統調用號和調用函數的對應關系。

    (2)實現my_syscall,在kernel/sys.c中添加自已的服務函數,然后為該函數在syscalls. h中添加函數聲明。

    (3)完成準備工作之后,就可以編譯內核。

  • 實驗步驟

  • 1. 進入kernel目錄:

3.1 進入/usr/src/linux-6.13.1路徑

2.添加系統調用號、聲明、函數

前情提要:因為沒有下載庫dbus-x11會導致添加系統調用號后報錯。下載方法見下文圖3.6。

3.2 打開系統調用表

不要使用387到423的號碼,在最后一個“普通”條目之后添加新的系統調號。

?3.3 添加系統調用號前

3.4 添加系統調用號后

a)警告

b)警告

3.5 關閉系統調用表

之后再打開系統調用入口表,發現做的改動沒有被清除,關閉系統調用入口表仍然會出現警告。解決辦法:需要退出內核目錄,回到/usr/src路徑下下載dbus-x11。

3.6 下載dbus-x11

3.7 成功解決報錯

如圖3.7所示,再次打開系統調用入口表并關閉,發現不會報錯。

?3.8 添加聲明

3.9 加入函數(2976行-2979行)

注意:不要按這個函數加進去,這里加入的函數并不能使后面編譯成果,具體應該如何修改見下文圖3.17。

3. 配置內核:

3.10 清除內核編譯過程產生的中間文件

3.11 清除以前生成的目標文件和其他文件

配置編譯參數 ,過程:Save--->ok--->Exit--->Exit

3.12配置編譯參數

3.13 配置編譯參數結束

4. 編譯和安裝內核:

3.14 執行sudo make -j8

注意,參數8是虛擬機內核數。我的虛擬機有8個內核,所以是sudo make -j8

3.15 出現錯誤

make[1]: *** [/usr/src/linux-6.13.1/Makefile:1989:.] 錯誤 2

make: *** [Makefile:251:__sub-make] 錯誤 2

執行make -n讓 make 程序模擬執行構建過程,把原本要執行的命令打印出來。

3.16 模擬執行構建過程?

????????可能的原因:內核配置問題:.config 文件中部分配置選項可能導致某些依賴關系未正確建立。比如與目標文件生成相關的配置缺失或錯誤,使得 make 找不到構建 vmlinux.a 的規則。

????? 在網上查找資料,發現是在高版本的內核中會出現以上報錯。解決報錯的過程如下:

修改sys.c中的函數如下圖所示,然后執行sudo make -j8等待一段時間后即可編譯成功。make加上-jn選項多線程編譯內核來加速內核編譯。

3.17 修改sys.c中的函數

3.18 編譯成功

安裝模塊:

3.19 執行sudo make modules_install

在/lib/moudles目錄下查看是否安裝成功:

3.20 安裝成功

是否生成內核壓縮鏡像文件,在/arch/x86/boot下查看生成bzImage:

3.21 已生成

安裝內核

3.22 執行sudo make install

更改系統啟動參數:

3.23 執行sudo update-grub2

  • 實驗結果

運行及測試:

4.1 執行vim test.c

運行命令、./test:

4.2 調用成功

查看日志,執行sudo dmesg:

4.3 系統調用成功

  • 實驗總結

????????通過內核編譯法添加一個無需傳遞參數的自定義功能系統調用,具體步驟涵蓋添加系統調用號、實現系統調用函數并聲明,以及編譯內核。

????????本實驗成功添加自定義系統調用,過程中遇到依賴安裝、文件編輯報錯、內核編譯錯誤等問題,通過查閱資料、分析錯誤原因并嘗試不同解決方法得以解決,加深了對 Linux 內核系統調用機制的理解 。

????????進入內核源碼目錄/usr/src/linux - 6.13.1,安裝相關依賴,解決安裝過程中軟件包定位失敗問題,如安裝dbus - x11解決gedit編輯文件時的報錯。在syscall_64.tbl文件添加系統調用號與函數對應關系,在syscalls.h中聲明系統調用函數,在sys.c中實現系統調用函數。執行sudo make mrproper清除編譯中間文件,配置編譯參數,編譯內核時遇到make[1]: *** [/usr/src/linux - 6.13.1/Makefile:1989:.]錯誤2等錯誤,經分析后,修改sys.c中的函數后編譯成功。執行sudo make modules_install安裝模塊,在/lib/modules目錄查看安裝情況;執行sudo make install安裝內核,執行sudo update - grub2更新啟動配置。編寫測試程序test.c,使用gcc -o test test.c編譯,運行./test后顯示syscall returned 1,執行sudo dmesg查看日志出現helloworld!,表明系統調用添加成功。

如果對你有幫助的話,請給我點個贊吧?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81219.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81219.shtml

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

相關文章

Javascript:WebAPI

獲取網頁元素 queryselector queryselector是 JavaScript 中用于選擇 DOM 元素的重要方法,它允許使用 CSS 選擇器語法來查找頁面中的元素。 一般queryselector獲取的元素都是html中第一個選擇器的元素 支持選擇器類型:類選擇器(.class) &#xff0c…

十二、Hive 函數

作者:IvanCodes 日期:2025年5月1日 專欄:Hive教程 在數據處理的廣闊天地中,我們常常需要對數據進行轉換、計算、清洗或提取特定信息。Hive 提供了強大的內置運算符和豐富的內置函數庫,它們就像魔法師手中的魔法棒&…

Linux之Nginx安裝及配置原理篇(一)

Nginx安裝及配置 前情回顧 首先針對Nginx進程模型,我們回顧一下它的原理機制,我們知道它是通過Master通過fork分發任務節點給予work節點,然后work節點觸發了event事件,之后通過一個access_muttex互斥鎖,來單線程調用我…

嵌入式培訓之數據結構學習(五)棧與隊列

一、棧 (一)棧的基本概念 1、棧的定義: 注:線性表中的棧在堆區(因為是malloc來的);系統中的棧區存儲局部變量、函數形參、函數返回值地址。 2、棧頂和棧底: 允許插入和刪除的一端…

深度學習---知識蒸餾(Knowledge Distillation, KD)

一、知識蒸餾的本質與起源 定義: 知識蒸餾是一種模型壓縮與遷移技術,通過將復雜高性能的教師模型(Teacher Model)所學的“知識”遷移到輕量級的學生模型(Student Model),使學生模型在參數量和計…

ARP Detection MAC-Address Static

一、ARP Detection(ARP檢測) ? 定義: ARP檢測是一種防止ARP欺騙攻擊的安全機制。它通過監控或驗證網絡中的ARP報文,來判斷是否存在偽造的ARP信息。 🔍 工作原理: 網絡設備(如交換機&#xf…

基于 Python 的界面程序復現:標準干涉槽型設計計算及仿真

基于 Python 的界面程序復現:標準干涉槽型設計計算及仿真 在工業設計與制造領域,刀具的設計與優化是提高生產效率和產品質量的關鍵環節之一。本文將介紹如何使用 Python 復現一個用于標準干涉槽型設計計算及仿真的界面程序,旨在幫助工程師和…

Python繪制南丁格爾玫瑰圖:從入門到實戰

Python繪制南丁格爾玫瑰圖:從入門到實戰 引言 南丁格爾玫瑰圖(Nightingale Rose Chart),也被稱為極區圖(Polar Area Chart),是一種獨特的數據可視化方式。這種圖表由弗洛倫斯南丁格爾&#xff…

計算機操作系統概要

不謀萬世者,不?謀?時。不謀全局者 ,足謀?域 。 ——陳澹然《寤?》《遷都建藩議》 操作系統 一.對文件簡單操作的常用基礎指令 ls ls 選項 目錄或?件名:羅列當前?錄下的?件 -l:以長格式顯示?件和?錄的詳細信息 -a 或 --all&…

<PLC><視覺><機器人>基于海康威視視覺檢測和UR機械臂,如何實現N點標定?

前言 本系列是關于PLC相關的博文,包括PLC編程、PLC與上位機通訊、PLC與下位驅動、儀器儀表等通訊、PLC指令解析等相關內容。 PLC品牌包括但不限于西門子、三菱等國外品牌,匯川、信捷等國內品牌。 除了PLC為主要內容外,相關設備如觸摸屏(HMI)、交換機等工控產品,如果有…

從專家編碼到神經網絡學習:DTM 的符號操作新范式

1st author: Paul Soulos paper: Differentiable Tree Operations Promote Compositional Generalization ICML 2023 code: psoulos/dtm: Differentiable Tree Machine 1. 問題與思路 現代深度學習在連續向量空間中取得了巨大成功,然而在處理具有顯式結構&#x…

微信小程序第三方代開發模式技術調研與實踐總結

?? 微信小程序第三方代開發模式技術調研與實踐總結 ?? 前言 隨著企業對私有化品牌運營訴求的增加,許多大型客戶希望將原本由 SaaS 平臺統一提供的小程序遷移至自有主體(AppID)下運行,同時又希望繼續沿用 SaaS 平臺的業務服務與數據托管方式。微信開放平臺提供的“小程…

開啟智能未來:DeepSeek賦能行業變革之路

前言 在人工智能重構生產關系的2025年,DeepSeek以其革命性的推理能力和Python生態的技術延展性,正在重塑內容創作與數據智能的邊界。本書以"工具迭代思維升維"為雙輪驅動,構建從認知突破到商業落地的完整知識圖譜。 DeepSeek的崛…

常見三維引擎坐標軸 webgl threejs cesium blender unity ue 左手坐標系、右手坐標系、坐標軸方向

平臺 / 引擎坐標系類型Up(上)方向Forward(前進)方向前進方向依據說明Unity左手坐標系YZtransform.forward 是 Z 軸正方向,默認攝像機朝 Z 看。Unreal Engine左手坐標系ZXUE 的角色面朝 X,默認使用 GetActor…

Cold Diffusion: Inverting Arbitrary Image Transforms Without Noise論文閱讀

冷擴散:無需噪聲的任意圖像變換反轉 摘要 標準擴散模型通常涉及兩個核心步驟:圖像降質 (添加高斯噪聲)和圖像恢復 (去噪操作)。本文發現,擴散模型的生成能力并不強烈依賴于噪聲的選擇&#xf…

Java并發編程核心組件簡單了解

一、Lock體系 1. ReentrantLock(可重入鎖) Lock lock new ReentrantLock(); lock.lock(); try {// 臨界區代碼 } finally {lock.unlock(); }特點:可重入、支持公平/非公平策略優勢:可中斷鎖獲取、定時鎖等待使用場景&#xff1…

第二個五年計劃!

下一階段!5年后!33歲!體重維持在125斤內!腰圍74! 健康目標: 體檢指標正常,結節保持較小甚至變小! 工作目標: 每年至少在一次考評里拿A(最高S,A我理…

Redis(三) - 使用Java操作Redis詳解

文章目錄 前言一、創建項目二、導入依賴三、鍵操作四、字符串操作五、列表操作六、集合操作七、哈希表操作八、有序集合操作九、完整代碼1. 完整代碼2. 項目下載 前言 本文主要介紹如何使用 Java 操作 Redis 數據庫,涵蓋項目創建、依賴導入及 Redis 各數據類型&…

【Folium】使用離線地圖

文章目錄 相關文獻離線地圖下載Folium 使用離線地圖 相關文獻 Folium — Folium 0.19.5 documentationOffline Map Maker 離線地圖下載 我們使用 Offline Map Maker 進行地圖下載。 特別注意:Folium 默認支持 WGS84 坐標系,建議下載 WGS84 坐標系的地…

DeepSearch:字節新一代 DeerFlow 框架

項目地址:https://github.com/bytedance/deer-flow/ 【全新的 Multi-Agent 架構設計】獨家設計的 Research Team 機制,支持多輪對話、多輪決策和多輪任務執行。與 LangChain 原版 Supervisor 相比,顯著減少 Tokens 消耗和 API 調用次數&#…