B.4. ½Ã½ºÅÛ ÄÝ Ãß°¡

½Ã½ºÅÛ ÄÝÀ» Ãß°¡Çغ¸ÀÚ. ¿ì¼± »õ·Î¿î ½Ã½ºÅÛ ÄÝÀÌ µé¾îÀÖ´Â ÆÄÀÏÀ» ¸¸µéÀÚ($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¸¦ »ç¿ëÇØ Ä¿³Î Ãâ·ÂÀ» È®ÀÎÇØ º¸ÀÚ. Á¦ÀÏ ³¡¿¡ ¹®ÀåÀÌ Á¦´ë·Î ÂïÇû´Â°¡?