Linux核心系統呼叫的新增
本文通過自身實踐,介紹了在Linux下為核心新增系統呼叫的簡單例項。
系統呼叫:
作業系統為使用者態程序與硬體及核心資源進行互動提供的一組介面;
系統呼叫可被看成是一個核心與使用者空間程式互動的介面。
優點:
極大的提高了系統的安全性;
使使用者程式具有可移植性。
系統呼叫與核心函式:
核心函式在形式上與普通函式一樣,但它是在內 核實現的,需要滿足一些核心程式設計的要求;
系統呼叫是使用者程序進入核心的介面層,由核心函式實現的;
進入核心後,不同的系統呼叫會找到各自對應的 核心函式,這些核心函式被稱為系統呼叫的“服務例程”。
核心新增系統呼叫例項過程
1.在4.1.38的核心版本中,對於x86體系結構計算機的系統呼叫表是在核心檔案裡的/arch/x86/syscalls目錄裡。
目錄中syscall_32.tbl檔案主要包含了x86架構32位機器的系統呼叫,syscall_64檔案包含了x86架構64位機器
的系統呼叫。
本實驗所用機器為x86架構的64位計算機,因此需要將以下新的系統呼叫宣告新增在/arch/x86/syscalls/syscall_64.tbl
中,其中323為系統呼叫號: 323 64 newscall sys_newscall
新增宣告如下:
2.將新的系統呼叫宣告新增在/include/linux/syscalls.h檔案中,其中標誌asmlinkage通知編譯器僅從棧中讀取該
函式的引數: asmlinkage longsys_newscall(void)
新增宣告如下:
3.在核心目錄裡建立新的檔案newscall.c,在檔案中定義新的系統呼叫函式,新新增的系統呼叫為newscall。
新增新的系統呼叫如下:
4. 將驅動程式增加到核心原始碼中,通過Kconfig對驅動進行配置。核心原始碼樹的目錄下都有兩個文件Kconfig和
Makefile。
–分佈到各目錄的Kconfig構成了一個分散式的核心配置資料庫,每個Kconfig分別描述了所屬目錄源文件相關的
核心配置選單。
–在核心配置make menuconfig(或xconfig等)時,從Kconfig中讀出選單,使用者選擇後儲存到.config的核心配置文件中。
在核心的/kernel目錄下建立Kconfig檔案,並儲存為Kconfig.newscall檔案,配置檔案如下:
5.編寫相應的Makefile檔案,將newscall.o模組新增到obj-y列表中。
相應的Makefile檔案如下:
6.重新對核心進行編譯並安裝。
(詳細步驟可參考之前 “Linux核心的編譯與安裝 ”)
7.在使用者空間內編寫測試用例,對newscall進行系統呼叫。在程式中使用syscall函式進行系統呼叫,
其中引數“323”為前面所宣告的系統呼叫號。
測試用例如下:
8.對測試用例進行編譯並執行輸出結果。
執行結果如下:
9.檢視系統呼叫函式輸出,與編寫的系統呼叫輸出一致。
使用dmesg檢視如下:
至此,Linux核心的系統呼叫新增例項完成。