[완료]리눅스 kernel 2.6.26-5에서 sys_call_table이 어디서 정의되는지 아시나요?
글쓴이: parandal / 작성시간: 토, 2008/09/20 - 12:00오후
Operating System 공룡책 을 공부중입니다.
2장 끝에 커널에 System Call 을 추가해 보는 문제가 있어 한 번 해 보는 중인데,
난관에 봉착했습니다.
sys_call_table 값을 변경해 주어야 할 것 같은데, 도대체 이게 어디서 정의되는 건지 찾기가 쉽지 않네요;;
문제는 다음 순서로 풀고 있는데요.
일단
helloworld.c를 짠 다음,
unistd_32.h 파일에 system call 항목을 추가해주고
syscall_table_32.S(이 파일에 sys_call_table이 매개변수로 등장합니다.) 에도 추가해 주었구요.
그 다음에 컴파일 하다 에러가 발생 했습니다.
원래는 unistd_32.h에 있는 __NR_syscalls(system call의 총 개수)를 하나 증가시켜주어야 한다는데,
unistd_32.h 안에 실제로 존재해지 않습니다.
그래서 제 생각은 sys_call_table 값을 증가시켜주어야 하는 게 아닌가 싶은데,
찾는 것도 쉬운 일이 아니더군요.
어떻게 해야 할까요?
도와주세요...
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 53.27 KB |
![]() | 80.98 KB |
![]() | 58.69 KB |
![]() | 59.8 KB |
![]() | 119.4 KB |
Forums:
저랑 같은 수업을 들으시는 분이실지도 모르겠군요.. =_=;
윤 교수님 수업이신가요? =_=;
저는 unistd_32.h 파일에서
#define __NR_helloworld 327
#ifdef __KERNEL__
다음에
#define NR_syscalls 328
이라고 추가하니 컴파일은 정상적으로 되더군요.
^^
아... 반갑습니다 ^^;
아.. 아예 추가해 주면 되는군요.;
그런 간단하고도 명쾌한 방법이...
정말 감사합니다.
이제 오늘 저녁에 컴퓨터 앞에 앉아서 감동의 눈물을 흘리면 되겠군요.
그런데 sys_call_table 은 도대체 어디서 정의되는 걸까요?
커널 소스 폴더를 google desktop으로 뒤져도 못 찾아 내더군요 =_=;
인덱싱을 잘 못 한 거 같진 않은데 말이죠.
x86 이신것
x86 이신것 같고,
도대체 뭘 질문하신 건지 아직도 아리송합니다만,
sys_call_table[] 은 친절하게 그림으로 올려주신 것 처럼 syscall_table_32.S 에 있습니다.
(정의나 선언이아니라... 말 그대로 거기에 있습니다.)
NR_syscall 따위의 갯수에 대한 정의가 필요치 않는 까닭은
entry_32.S 에서 syscall_table_32.S 를 #include 한 뒤,
심볼의 시작 위치와 끝 위치에 대한 간단한 산수로 그 크기를 구해서 사용하기 때문입니다.
error.jpg 에 있는 에러메시지의 내용은
sys_call_table[] 에 추가한 sys_helloworld 라는 심볼의 원형을 찾지 못해서 발생한 단순 컴파일 에러입니다.
OTL
댓글 달기