시스탬콜 컴파일
test_systemcall.c
라는 파일을 만들었슴다.
리눅스 2.4.19 버전에서
unistd.h 에 호출번호 추가 했슴다.
#define __NR_newsyscall 250
entry.S 에 엔트리도 추가 했슴다
.long SIMBOLE_NAME(sys_newsyscall) /* 250 */
.rept NR_syscalls-250
.long SIMBOLE_NAME(sys_newsyscall)
kernel 디랙토리의 Makefile 에 test_systemcall.o 추가 해서
커널 빌드 했슴다.
소스는 아래와 같슴다. kernel 디랙토리에 작성 했슴다.
/* test_systemcall.c */
#include
#include
#include
#include
asmlinkage int sys_newsyscall()
{
printk("hello Linux\n");
return(0);
}
그리고 시스탬콜 호출하는 사용자 응용플그램을
만들었는데 컴파일이 안됨다.
소스는 아래와 같슴다. /usr/src/linux 디랙토리에 작성 했슴다.
#include
_syscall0(int,newsyscall);
main()
{
newsyscall();
}
그리고
/usr/src/linux 디랙토리에서
gcc test_systemcall.c
이렇게 했슴다
근데 함수 선언을 안했다는 에러가 나면서
컴파일이 안됨다.
지가 어디서 틀린 걸까요?
잘 아시는분께 도움을 부탁 드림다.
Re: 시스탬콜 컴파일
마지막 테스트 프로그램 컴파일시에...
unistd.h 파일 include시에...
실제 변경된 unistd.h 파일이 include되지 않아서 그렇습니다.
만약 변경된 커널이 /usr/src/linux 에 있지 않고 /work/linux 에 있다면
마지막 테스트 프로그램 컴파일시...
gcc -I/work/linux/include test.c
하시구요...
변경된 커널이 /usr/src/linux 에 있다면...
마찬가지로...
gcc -I/usr/src/linux/include test.c
-I 옵션이 없으면 gcc는 자동으로 /usr/include 에서 include합니다.
Re: 해결 했슴다 ^^
-B 라는 옵셧을 gcc에 주고 하니까
컴파일이 되드군요.
이렇게 간단한걸 몰라서 이틀을 삽질을 했슴다. ㅡㅡ;
혹시 책쓰시는 분들 보시면 이런것 좀 신경 써 주세요.
초보들은 문제를 어디서 찾아야 될지도 잘 모릅니다.
첨엔 소스 코드에 먼가를 잘못했나 해서 소스코드 고치고
커널 컴파일을 수차래 ㅡㅡ;
책에는 그냥 promp# gcc test.c 이렇게 해서 a.out 을 만든다
이렇게 나와 있으니
책에 나온대로 하면 되겠지 하며 밤 새도록 삽질을 했슴다.
그리고
리플 달아 주신분께 감사 드림다 ^^
댓글 달기