리눅스 시스템 콜 함수를 만드는 중 궁금한점이 생겼습니다.

gyunn의 이미지

우분투 OS이고 커널은 3.14.4 버전을 사용하고 있습니다. 지금 새로운 시스템 콜 함수를 만드는 공부를 하고 있는데

include<linux/unistd.h>

include<linux/errno.h>

include<linux/kernel.h>

include<linux/sched.h>

asmlinkage int sys_add(int a, int b) { return a+b;

}

include<linux/unistd.h>

include<linux/errno.h>

include<linux/kernel.h>

include<linux/sched.h>

asmlinkage int sys_sub(int a, int b) { return a-b;

}

include<linux/unistd.h>

include<linux/errno.h>

include<linux/kernel.h>

include<linux/sched.h>

asmlinkage int sys_mul(int a, int b) { return a*b;

}

include<linux/unistd.h>

include<linux/errno.h>

include<linux/kernel.h>

include<linux/sched.h>

asmlinkage int sys_div(int a, int b) { if(b==0) // b가 분모라 가정. return -1; else return a/b; }


이 함수들을 구현하고 시스템 콜 함수 번호 할당하고, 원형 선언해주고, object파일 목록 갱신해주고, 다시 커널을 컴파일 한후 터미널에서 테스트하면, 덧셈은 제대로 결과값이 나오는데 다른 함수들은 모두 반환값이 -1이 나옵니다. 시스템 콜 함수를 구현 할때는 C언어 작성하듯이 하면 안되는 건가요?

현재 제가 적은 소스에 문제점을 발견하시거나 구현할때 도움될 만한 레퍼런스가 있다면 가르쳐주시면 감사하겠습니다.ㅠㅠ