Linux system call的来龙去脉
Application通常都是调用一个C library中一个library库函数,该库函数最后又会通ARM的swi assemble instruction。SWI Instruction执行后,ARM进入Supervisor Mode,之后Linux Kernel会进行一系列的处理,最后调用我们在Linux Kernel中看到那些sys_XXX system call function。我们大多数工程师都知道如何调用库函数,但对后面发生的一切却并清楚。
C Lib入口
首先我们的入手点是:我们要创建一个process:int pid = fork()。fork() GCC libc 中一个函数,我们不妨看看fork在gcc libc中的实现:(glibc-2.7\nptl\sysdeps\unix\sysv\linux\fork.c)
pid_t
__libc_fork (void)
{
。。。。。。。(此处我们不关注,省略,详见glibc-2.7\nptl\sysdeps\unix\sysv\linux\fork.c)
#ifdef ARCH_FORK
pid = ARCH_FORK ();
#else
# error "ARCH_FORK must be defined so that the CLONE_SETTID flag is used"
pid = INLINE_SYSCALL (fork, 0);
#endif
。。。。。。(此处我们不关注,省略)