>> Delete No. 18151 article
No. [질문] 시스템 콜을 추가하려는데...

등록 2001-01-18 01:32:00 By localhost     조회 2
이름 Raymundo    

		리눅스에서 시스템콜을 추가하는 프로그래밍을 하고 배우고 있는데,
첫판부터 막혀서 도저히 진전이 안 되네요. 사흘 동안 끙끙대다가 결국
가르침을 청합니다.
 제 환경은 와우리눅스7.0 (크리스마스 버전이라나... 빌린 시디라서 정확한
명칭은 모르겠습니다) 커널은 2.2.17-8kr 입니다.
 인터넷에서 구한 가장 기초적인 예제를 따라서 해 보고 있는데요,
(프로그래밍에 대해 그다지 전문 지식이 없어서..) 순서는 다음과
같습니다.
 1. 새로 추가할 시스템콜의 명칭은 test_call 입니다.
 2. /usr/src/linux/include/asm/unistd.h 파일에
# define __NR_test_call  191
을 추가했습니다.
 3. /usr/src/linux/arch/i386/kernel/entry.S 에
.long SYMBOL_NAME(sys_test_call)
을 추가하고,
.rept NR_syscalls-190
에서 190을 191로 바꾸어 주었습니다.
 4. /usr/src/linux/kernel/ 아래에 test.c 파일을 다음과 같이
만들었습니다.
#include <linux/mm.h>
#include <asm/uaccess.h>
#include <linux/vmalloc.h>
#include <linux/kernel.h>
 asmlinkage int sys_test_call() {
  printk("hahaha");
  return 0;
}
 원래는 서른줄짜리 코드였는데 잘 안 되길래 printk 한번만을 쓰는
두줄짜리로 고쳤지요.
 5. /usr/src/linux/kernel/Makefile 에서 O_OBJS = ... 뒤에 test.o 를
추가했습니다.
 위와 같이 하고, (문서에 있는 것과 동일하게) make bzImage 를 하였더니
컴파일이 무난하게 되더군요. bzImage 를 /boot/vmlinux-exp 로 복사하고
lilo.conf 에 추가하고 lilo 를 실행했습니다. 그다음 재부팅을 했는데...
 vmlinux-exp 로 부팅을 하면, 메세지들이 출력되다가
.....
INIT: version 2.78 booting
hahaha
hahaha
       WOW Linux...
.....
위와 같이 갑자기 두번이나 test_call 이 실행되어버립니다. 그리고 각종
데몬들이 시작되다가 syslogd 가 실행되는 순간
Starting system logger
까지 나오고는 더이상 진전하지 않습니다...
 정말 간단한 예제 같은데 제대로 되지 않으니 미치겠군요. 시간이 넉넉하면
두꺼운 책 하나 구해서 차분히 보겠지만 그렇지도 않은터라 도움을
청합니다. 제가 무엇을 빠뜨렸거나 다른 이유가 있다면 가르쳐 주시면
감사하겠습니다.
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved