系統調用
與內核通信
POSIX : IEEE標準
C庫:
系統調用:系統內核層面使用,應用層需要syscall
系統調用
asmlinkage 限定詞 通知編譯器僅從棧中提取該函數參數
系統調用號
系統通過調用號來進行系統調用,在編譯的時候已經確定
系統調用表,例如x86-64就在 arch/i386/kernel/syscall_64.c
系統調用處理
應用程序通過軟中斷方式通知內核,通過一個異常導致系統切換到內核
實現系統調用
參數驗證
指針必須保證:
內存區域屬於用戶空間
在進程的地址空間裏
讀寫可執行等權限要說明
使用copy_to_user() 和copy_from_user()來進行內核用戶層交換數據,它們的參數類似memcpy
使用capable() 來判斷是否有權限,
系統調用註冊
用戶空間訪問系統調用
_syscalln() n爲0~6,代表需要傳遞的參數個數
例如open 進行系統調用: _syscall3(long,open,const char*,filename,int,flags,int,mode);原型:long open(const char* filename,int flags,int mode);