2009-11-11 5 views
1

시스템 호출을 작성하려고합니다. 나는이 단계들을 따라 갔다 :리눅스 용 시스템 호출 작성

linux/arch/x86/kernel/syscall_table_32.S ---->. long sys mycall

linux/include/linux/syscalls.h --------> asmlinkage int sys mycall (int i, int j);

리눅스/아치/86/포함/ASM/unistd_32.h ----> NR의 #DEFINE mycall 333

코어 I-Y 리눅스/메이크 변경 + = 커널/mm/FS/IPC/security/crypto/block/mycall/

mycall이라는 디렉토리를 만들었습니다.

#include <linux/kernel.h> 
asmlinkageintsysmcall(int i,int j) 
{ 
return i + j ; 
} 

6) 내가 Makefile을 만들 : ----> 리눅스/mycall 해당 파일의 내부

, 나는 mycall.c를 배치했다. ---> 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, 커널 모듈은/진짜/시스템 호출 기능을 추가하는 데 사용해서는 안됩니다; 너무 많은 부도가 발생할 수 있습니다. (플러스 그들은 뭔가 잘못되면 디버깅하는 놈입니다!) –

+0

나는 시스템 호출을 작성하고 있습니다. 커널을 다시 컴파일해야합니까? – Iguramu

+0

시스템을 다시 컴파일 한 후에 설치해야합니까? (sudo dpkg -i linux-image-2.6.28.10-custom .... deb) – Iguramu