Linux Kernel development (2)

Posted on 2011-04-12 16:36  Teddy Yan  阅读(158)  评论(0)    收藏  举报

Syscalls:

SYSCALL_DEFINE0(getpid)
{
return task_tgid_vnr(current); // returns current->tgid
}

SYSCALL_DEFINE0 is simply a macro that defines a system call with no parameters (hence the 0).The expanded code looks like this:
asmlinkage long sys_getpid(void)

System Call Numbers

The kernel keeps a list of all registered system calls in the system call table, stored in sys_call_table.This table is architecture; on x86-64 it is defined in arch/i386/kernel/syscall_64.c.

System Call Handler

The defined software interrupt on x86 is interrupt number 128, which is incurred via the int $0x80 instruction. It triggers a switch to kernel mode and the execution of exception vector 128, which is the system call handler.

Denoting the Correct System Call
On x86, the syscall number is fed to the kernel via the eax register.

Parameter Passing

System Call Implementation

    1. Implementing System Calls
    2. Verifying the Parameters
    3. System Call Context
    4. Final Steps in Binding a System Call

This can be as simple as putting the system call in a relevant file in kernel/, such as sys.c

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3