本文通過自身實踐,介紹了在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核心的系統呼叫新增例項完成。
Linux嵌入式 核心 系統呼叫
1.系統呼叫 定義 linux核心中設定了一組用於實現各種系統功能的子程式,稱為系統呼叫。使用者可以通過系統呼叫命令在自己的應用程式中呼叫它們。系統呼叫和普通的函式呼叫非常相似,區別僅僅在於,系統呼叫由作業系統核心實現,執行於核心態 而普通的函式呼叫由函式庫或使用者自己提供,執行於使用者態。2.系統...
深入理解Linux核心 系統呼叫
系統呼叫 使用者態程序向核心發出的,實現使用者態程序呼叫硬體裝置的函式或者中斷 優點 使程式設計更容易,將使用者從學習硬體裝置的低階程式設計特性中解放 提高系統到安全性,核心在滿足請求之前可以做正確性檢查 提高可移植性 系統呼叫與api呼叫的區別 1 api呼叫是乙個函式定義 系統呼叫是通過軟中斷向...
Linux核心系統呼叫劫持之kallsyms
1.通過kallsyms方式 基於linux 5.0 linux5.3 的x86 64系統.1.通過kallsyms lookup name查詢sys call table位址.2.關閉寫保護 3.修改sys call table linux5.0上直接呼叫write cr0介面,能夠順利的修改cr...