2009-11-11 130 views
1

我嘗試編寫一個系統調用。我遵循以下步驟:編寫一個系統調用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秒,我想這裏可能會出現問題)

回答

2

重新編譯內核並重新引導。或者它是一個內核模塊?

+0

IMO,內核模塊不應該/真的/被用來添加系統調用功能;太多糟糕的巫術可能會發生。 (加上他們是一個錯誤調試,如果出現問題!) – 2009-11-11 16:44:19

+0

我只是寫一個系統調用。我是否需要重新編譯內核? – Iguramu 2009-11-11 16:51:02

+0

重新編譯系統後,我必須安裝嗎? (sudo dpkg -i linux-image-2.6.28.10-custom .... deb) – Iguramu 2009-11-11 16:57:38