시스템 콜을 추가해보자. 우선 새로운 시스템 콜이 들어있는 파일을 만들자($TOPDIR)/kernel/mysyscall.c
/* $(TOPDIR)/kernel/mysyscall.c */ #include <linux/linkage.h> asmlinkage int sys_mysyscall() { printk("My First System Call.\n"); }
$(TOPDIR)/include/asm/unistd.h에 새로운 시스템 콜을 위한 번호를 추가한다.
... #define __NR_vfork 190 #define __NR_mysyscall 191
$(TOPDIR)/i386/kernel/entry.S에 있는 시스템 콜 테이블에 등록한다.
ENTRY(sys_call_table) ... .long SYSBOL_NAME(sys_mysyscall) .rept NR_syscalls-191
커널을 컴파일하는데 위에서 만든 mysyscall.c를 Makefile에 등록해 준다. 간단히 'O_OBJS='이란 줄에 mysyscall.o라고 추가해주면 된다.
커널 컴파일이 끝나면 새로운 커널을 설치하고 재부팅한 다음 아래와 같은 테스트 프로그램을 만들어 실행해 보자.
/* test.c */ #include <linux/unistd.h> _syscall0(int, mysyscall); int main() { int i; i = mysyscall(); return i; }
테스트 프로그램을 실행했을 때 화면에 'My First System Call'이라고 출려되면 다행인데 아무런 출력도 없다면 dmesg를 사용해 커널 출력을 확인해 보자. 제일 끝에 문장이 제대로 찍혔는가?
Copyrights © - Joinc, All Rights Reserved. Inherited From - Yundream Rebranded By - Joonphil
B.4. 시스템 콜 추가
시스템 콜을 추가해보자. 우선 새로운 시스템 콜이 들어있는 파일을 만들자($TOPDIR)/kernel/mysyscall.c
$(TOPDIR)/include/asm/unistd.h에 새로운 시스템 콜을 위한 번호를 추가한다.
$(TOPDIR)/i386/kernel/entry.S에 있는 시스템 콜 테이블에 등록한다.
커널을 컴파일하는데 위에서 만든 mysyscall.c를 Makefile에 등록해 준다. 간단히 'O_OBJS='이란 줄에 mysyscall.o라고 추가해주면 된다.
커널 컴파일이 끝나면 새로운 커널을 설치하고 재부팅한 다음 아래와 같은 테스트 프로그램을 만들어 실행해 보자.
테스트 프로그램을 실행했을 때 화면에 'My First System Call'이라고 출려되면 다행인데 아무런 출력도 없다면 dmesg를 사용해 커널 출력을 확인해 보자. 제일 끝에 문장이 제대로 찍혔는가?
Recent Posts
Archive Posts
Tags