시스템 호출을 작성하려고합니다. 나는이 단계들을 따라 갔다 :리눅스 용 시스템 호출 작성
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 초 이상 시간을 낭비하지 않았다. 문제가있을 수 있다고 생각한다.)
IMO, 커널 모듈은/진짜/시스템 호출 기능을 추가하는 데 사용해서는 안됩니다; 너무 많은 부도가 발생할 수 있습니다. (플러스 그들은 뭔가 잘못되면 디버깅하는 놈입니다!) –
나는 시스템 호출을 작성하고 있습니다. 커널을 다시 컴파일해야합니까? – Iguramu
시스템을 다시 컴파일 한 후에 설치해야합니까? (sudo dpkg -i linux-image-2.6.28.10-custom .... deb) – Iguramu