kernel学习:系统调用的知识点
5、系统调用表: 系统调用表sys_call_table存储了所有系统调用对应的服务例程函数的地址。 在x86中:2.6.38/arch/x86/kernel/syscall_table_32.S 在arm中2.6.38/arch/arm/kernel/calls.S 6、系统调用号:每个系统调用对应一个唯一的系统调用号。用户通过系统调用号,而不是名称来调用。 x86:2.6.38/arch/x86/include/asm/unistd32.h或unistd64.h arm:2.6.38/arch/arm/include/asm/unistd.h能找到它们。 内核是通过系统调用号作为下表去sys_call_table来获取服务例程的地址的。在系统中系统调用号一旦分配就不能去除,这是为了兼容。 7、系统调用例程 所有的系统调用服务例程都声明在include/linux/syscalls.h中,但分散在不同的文件中。 asmlinkagelong sys_nice(int increment); 系统调用除了sys_外还有一个asmlinkage来告诉编译器从堆栈中获取参数。还必须有一个long的返回,表示执行成功还是出错。系统调用号,名称和目的都是相同的,但是在不同内核和架构中实现的方法可能不同。 8、如何使用系统调用 1、通过c库来使用系统调用 2、在2.6.18之前的内核使用_syscall宏来使用系统调用。 3、在2.6.19开始废除了_syscall,而使用syscall()通过向函数提供调用号和参数实现调用 出处:http://blog.csdn.net/muge0913/article/details/7517303 (编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |