syscall

系统调用(system call)是用户空间(user space)与内核空间(kernel space)通信的桥梁,其中应用层 glibc/uclibc库 等的实现,就是对系统调用进行封装,所以想从应用层向内核层深入研究,必须先对系统调用有一定了解。

base linux-2.6.34

零参数系统调用

  1. 内核层添加系统调用

  • 系统调用入口

    $ vim arch/x86/include/asm/unistd_64.h
    #define __NR_foo				300
    __SYSCALL(__NR_foo, sys_foo)
  • 系统调用实现

    $ vim kernel/sys.c
    #include <linux/syscalls.h>
    
    SYSCALL_DEFINE0(foo)
    {
    	printk("%s: syscall test\n", __func__);
    	return 0;
    }
  1. 应用层调用系统调用

base linux-5.4

零参数系统调用

  1. 内核层添加系统调用

  • 系统调用入口

  • 系统调用实现

  1. 应用层调用系统调用

整型参数系统调用

  1. 内核层添加系统调用

  • 系统调用入口

  • 系统调用实现

  1. 应用层调用系统调用

字符串参数系统调用

  1. 内核层添加系统调用

  • 系统调用入口

  • 系统调用实现

  1. 应用层调用系统调用

数组参数系统调用

  1. 内核层添加系统调用

  • 系统调用入口

  • 系统调用实现

  1. 应用层调用系统调用

指针参数系统调用

  1. 内核层添加系统调用

  • 系统调用入口

  • 系统调用实现

  1. 应用层调用系统调用

Last updated

Was this helpful?