我嘗試編寫一個系統調用。我遵循以下步驟:編寫一個系統調用linux
linux/arch/x86/kernel/syscall_table_32.S ---->。 long sys mycall
linux/include/linux/syscalls.h --------> asmlinkage int sys mycall(int i,int j);
LINUX /拱/ 86 /包含/ ASM/unistd_32.h ---->的#define NR的MyCall 333
我改變的linux/Makefile以芯-γ+ =內核/毫米/ FS/IPC/security/crypto/block/mycall/
我創建了一個名爲mycall的目錄。 ----> LINUX /的MyCall
在這個文件中,我放置mycall.c:
#include <linux/kernel.h>
asmlinkageintsysmcall(int i,int j)
{
return i + j ;
}
6)我創建生成文件。 ---> linux/mycall/Makefile。
obj−y := mycall.o
然後,我嘗試這個系統調用,它總是返回-1。這些行是我在桌面上的測試代碼。 testmycall.c
#include <stdio.h>
#include <sys/syscall.h>
#define __NR_mycall 333
int main(void)
{
int x1=10, x2=20, y ;
y = syscall (__NR_mycall, x1, x2);
printf (」%d\n」,y);
return 0 ;
}
然後我重新編譯內核。如果我編譯代碼,沒有錯。當我運行這個程序時,它不會總結兩個值。它只是返回總是-1。我的系統調用出了什麼問題? (當我重新編譯內核時,系統沒有浪費時間超過3秒,我想這裏可能會出現問題)
IMO,內核模塊不應該/真的/被用來添加系統調用功能;太多糟糕的巫術可能會發生。 (加上他們是一個錯誤調試,如果出現問題!) – 2009-11-11 16:44:19
我只是寫一個系統調用。我是否需要重新編譯內核? – Iguramu 2009-11-11 16:51:02
重新編譯系統後,我必須安裝嗎? (sudo dpkg -i linux-image-2.6.28.10-custom .... deb) – Iguramu 2009-11-11 16:57:38