1. 程式人生 > >Linux新增系統呼叫(2018)

Linux新增系統呼叫(2018)

今晚有點不在狀態,就來總結一下在Linux中新增一個系統呼叫吧,示例平臺Ubuntu 1604 64位,核心版本linux-4.4.4

歡迎大家評論交流,題主從linux-2.6一直到linux-4.15的核心都新增過系統呼叫,各個大版本之間新增系統呼叫還是有一定區別。現在以linux-4.4.4新增系統呼叫為例進行一下記錄~

關於核心的下載與編譯可以參考博文:

這裡直接來新增系統呼叫。

1、新增系統呼叫程式碼

進入到自己對應的linux核心原始碼的kernel目錄下,例如我的kernel目錄為

/usr/src/linux-4.4.4/kernel

新增系統呼叫原始碼有兩種方式:

1)可以自己新增檔案

2)在kernel目錄下已有的檔案中新增自己的程式碼(一般在sys.c中新增)

這兩種方法的差別在於1)需要修改Makefile檔案,而2)不需要。

如果程式碼量大可以自己定義檔案,在這裡我採用第一種方式,以自己寫的檔案的形式新增。在kernel目錄下編寫swee.c

#include <linux/kernel.h>
asmlinkage long sys_swee (int data)
{
	printk("\nSWEE:This is the sys_swee!\n");
	printk("SWEE: data is %d \n",data);
	return 0;
}

2、修改Makefile檔案

如果直接在kernel/sys.c中新增的程式碼那就直接跳到第3步。

修改Makefile就新增如上所示的一個與你自己新增的.c檔案同名的.o即可。

3、在標頭檔案中宣告

進入到原始碼的/include/linux目錄,我這裡是

/usr/src/linux-4.4.4/include/linux

在裡面找到syscalls.h檔案,進入新增我們定義的系統呼叫宣告

如上圖紅框中所示。

4、註冊系統呼叫

進入linux原始碼目錄 /arch/x86/entry/syscalls,我這裡是

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

可以看到裡面有如下內容

32位系統就新增到syscall_32.tbl,64位就修改syscall_64.tbl

我這裡是64位,因此我進入到syscall_64.tbl中

按著順序往下新增即可,中間使用Tab鍵分隔。

5、編譯核心安裝

這一步同樣參考最開始的博文,至此一個系統呼叫就寫好了。編譯安裝完成後切換到我們編譯的核心。

6、測試

建立test.c檔案

#include <stdio.h>
#include <stdlib.h>

int main()
{
	syscall(328,10);
	return 0;
}

執行結果如下,可以看到我們新增系統呼叫成功了~

相關推薦

Linux新增系統呼叫2018

今晚有點不在狀態,就來總結一下在Linux中新增一個系統呼叫吧,示例平臺Ubuntu 1604 64位,核心版本linux-4.4.4 歡迎大家評論交流,題主從linux-2.6一直到linux-4.15的核心都新增過系統呼叫,各個大版本之間新增系統呼叫還是有一定區別。現在

Linux 檔案系統呼叫習題

1 設計一個程式,要求開啟檔案"pass",如何沒有這個檔案,新建此檔案,許可權設定為只有所有者有隻讀許可權。 程式程式碼: #include <stdio.h> #include <stdlib.h> #include <fcntl.h>

一次性講明白Linux系統呼叫1

什麼是系統呼叫 Linux核心中設定了很多可以實現各種系統功能的子程式,這些子程式就叫系統呼叫。而系統呼叫和普通函式呼叫的區別主要是在系統呼叫是系統提供的,函式一般是函式庫或者自己提供的。 為什麼要用系統呼叫 其實很多我們平時用的C語言標準函式,在Linux

Linux檔案系統學習之read open系統呼叫

open的執行過程:v2.6.30  Open Sys_open |do_sys_open() |get_unused_fd_flags ()//得到一個可用的檔案描述符;通過該函式,可知檔案描述符                                      

Linux操作系統基礎

Linux 運維服務器操作系統 Unix Linux:GNU/Linux WindowsLinux歷史 Linux是類Unix Unix誕生於1969年 Ken Tompson

Linux操作系統基礎

Linux文件管理 文件系統和目錄結構 文件和目錄被組成成一個單根倒置樹結構。根文件系統rootfs root filesystem rootfs:/etc/,/usr,/var,/root,/home,/dev 文件系統分層結構

LKD_05_系統呼叫20181021

LKD_05_系統呼叫   系統呼叫的目的 與核心進行通訊,即系統呼叫是在使用者層和硬體裝置層之間增加的一箇中間層;其主要有3個作用: 為使用者空間提供一種硬體的抽象介面: 比如讀寫檔案時,應用程式不用考慮磁碟型別和介質,也不用考慮檔案系統型別;

Linux新增系統呼叫鬥爭的血淚史

《作業系統原理》開課沒多久,老師猝不及防佈置了一項任務,在Linux核心裡新增系統呼叫。在當時還不知道Linux是何方神聖的我怎麼也想象不到現在我已經成功完成任務並正在記錄著我屢戰屢敗,屢敗屢戰的小白鬥爭史。知己知彼才能百戰百勝。要完成任務,必須先要知道這任務本質的要求。查閱

作業系統課程設計linux核心編譯及新增系統呼叫

1.實驗目的 通過實驗,熟悉Linux作業系統的使用,掌握構建與啟動Linux核心的方法;掌握使用者程式如何利用系統呼叫與作業系統核心實現通訊的方法,加深對系統呼叫機制的理解;進一步掌握如何向作業系統核心增加新的系統呼叫的方法,以擴充套件作業系統的功能。 2.實

Linux核心2.6.34.14新增系統呼叫及編譯方法CentOS-6.4-x86_64

<?xml version="1.0" encoding="UTF-8"?> //我新增系統呼叫步驟,僅供參考,尤其是系統呼叫的實現部分,建議大家自己寫,除了我這種好像還可以用sys_open系列來寫 #define 核心版本 linux-2.6.34.14

Linux 檔案系統呼叫open七日遊

接著上回,當對“.”和“..”處理完成後就直接返回進入下一個子路徑迴圈了,但如果當前子路徑不是“.”或“..”呢? 【fs/namei.c】 sys_open > do_sys_open > do_filp_open >&

Linux檔案系統呼叫open 七日遊

還記得在上一個場景中,build_open_flags裡面有一個對標誌位O_PATH的判斷麼?現在我們就來看看這個標誌位是幹啥的: 【場景二】open(pathname,O_PATH)     這個O_PATH似乎是不常用的,咱們先看看它的使用

linux檔案系統呼叫 open 七日遊

現在,我們的“路徑行走”只剩下最後一個小問題需要處理了——符號連結。 【fs/namei.c】 sys_open > do_sys_open > do_filp_open > path_openat &g

Linux系統管理

linux redhat 服務器 系統管理 點擊下載:Linux系統管理(一)本文出自 “飛奔的魚兒” 博客,請務必保留此出處http://feiyuer.blog.51cto.com/6967044/1931977Linux系統管理(一)

Linux系統管理網絡服務

網絡服務 linux redhat 紅帽 點擊下載:Linux系統管理(二)(網絡服務)本文出自 “飛奔的魚兒” 博客,請務必保留此出處http://feiyuer.blog.51cto.com/6967044/1931978Linux系統管理(二)(網絡服務)

linux系統啟動過程具體解釋-開機加電後發生了什麽 --linux內核剖析

界面 種類 system pos 放置 nlog 提示 mar .com 本文參考了例如以下文章 深入理解linux啟動過程 mbr (主引導記錄(Master Boot Record)) 電腦從開機加電到操作系統main函數之前執行的過程

linux初級運維 之 文件以及文件系統規範FHS

linux入門文件:drwxr-xr-x. 2 root root 60 8月 5 21:12 vfio最前面的一個字符表示文件的類型。文件類型有: -:普通文件(f) d:目錄文件 b:塊設備文件(block) c:字符設備文件(

Linux系統管理Linux系統安裝與修復

linux系統安裝與修復一. Linux多種安裝方式與應用軟件安裝1. Linux的硬盤安裝方式(1) 復制Linux的ISO文件到硬盤某個分區(2) 用Linux安裝啟動盤啟動/DOS啟動盤啟動計算機註: DOS啟動盤中必須要存放加載Linux系統的工具及Linux內核和initrd映像文件,主要文件包括:

Linux用戶管理Linux系統概述

linuxLinux系統概述一. 認識Linux1.Linux的性質Linux為一種源碼公開的自由軟件,是一種真正多任務和多用戶的網絡操作系統。Linux的多用戶和多任務、同時開設多個用戶終端、可以由用戶同時運行多個程序 2. Linux的發展歷史(1) UNIX和Linux的發展:-1968年 美國的k

Linux用戶管理Linux系統安裝

linux安裝 1、RedHatLinux安裝前準備硬件要求CPU:Intel、ADM、VIA兼營內存:SDRAM、EDO和DDR,建議容量在128MB以上,最大4GB硬盤:接口類型(IDE、SCSI、USB)、自由空間(最小:500MB、完全安裝:4.5G)網卡:一塊或多塊顯卡:VGAhttp://hard