如何在Linux 4.12核心新增系統呼叫
阿新 • • 發佈:2018-11-08
轉發:http://blog.csdn.net/qq_34911465/article/details/74840024
基本情況
系統版本:CentOS Linux 7
核心版本:linux-4.12
準備操作
1.下載並且解壓開啟資料夾
2.進入資料夾後進入系統呼叫的入口表,這個表記錄了系統呼叫的一些基本資訊。
系統呼叫表就是這個檔案了,用如圖命令開啟
這裡是新增系統呼叫的格式,新增我們自己的系統呼叫也要按照這個格式來操作,第一個是呼叫號,就是用來呼叫的標誌,abi不知有什麼作用,名字是也不知,入口是函式名,按照格式填寫即可。
這裡是我新增的系統呼叫,參考上圖,我們知道這裡的abi有三種可以填(common、64、x32) ,經過測試發現x32沒有效果,所以我們的abi只能寫common或者x64,如圖中呼叫號為549和550所示。
3.新增系統呼叫宣告
開啟這個檔案即可
在檔案尾部進行如下新增,這裡的void很重要,如果是沒有引數的呼叫那麼就一定要寫void,否則會失敗。
4.實現系統呼叫
實現系統呼叫的檔案是kernel資料夾下的sys.c檔案,也可以自己寫一個檔案,但是自己寫檔案還需修改Makefile,這裡從簡。
在檔案的最後一行編寫實現程式碼,同樣的要在括號中寫void。紅框的都是涉及個人資訊,可修改
5.編譯核心
參看之前的文章: Linux 編譯核心全記錄
編譯核心成功後重啟進入新的核心。
6.編寫呼叫的程式
#include<unistd.h> int main(){ syscall(549);//對於無參的直接這樣呼叫即可,有參的要新增引數,括號中填寫的是之前定義的系統呼叫號 return 0; }
- 1
- 2
- 3
- 4
- 5
編譯
//使用g++命令編譯,g++命令加上檔名編譯,預設生成a.out檔案,使用./a.out執行
- 1
7.檢視系統呼叫
//直接在終端中打dmesg,出來的字元中就有我們的系統呼叫的結果了。
- 1
這是系統呼叫號為549的程式,abi是common
這是系統
呼叫號為550的程式,abi是64,出現兩個結果是受了上面這個程式的影響。