内核笔记之“System Calls”
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-13
1、基础知识. 在linux内核中,每个系统函数都有一个编号,应用程序通过此编号调用内核函数,即使函数被删除,此编号也不会被回收或重新分配,而是指向一个报错函数sys_ni_syscall().每个系统调用定义前面都有一个“asmlinkage”修饰符,告诉编译器只在栈中寻找函数参数. 2、调用过程. 应用程序调用系统调用函数时,产生一个软中断信号,在x86中,是int 0x80指令,系统捕获这个信号,进入内核模式执行处理函数 system_call(). 进行系统调用时,应用程序会把系统函数编号及参数放入寄存器,system_call()检测此编号是否合法,如果合法,则执行此调用. 3、如何把系统调用绑定到内核. 在系统调用表中添加一条目录.调用编号会在文件<asm/unistd.h>中被分配.例如要添加系统调用sys_foo(),则在 arch/*/kernel/entry.S文件中相应的地方添加 “long sys_foo”.然后将实现函数放到kernel/sys.c 及其他用到该函数的地方. linux提供了一系列的宏来实现系统调用,宏的命令形式为_syscalln(),0<n<6,宏的使用方法为“_syscall(函数返回,函数名,参数1类型,参数1名,……)“,例如对于编号为283的“void sys_foo(int a,int b)”,可以通过宏_syscall2()包装为“#define __NR_open 283 _syscall2(void,int,a,int,b)”. 这样,用户程序就可以通过调用foo()函数来调用sys_foo();
|
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: Linux命令学习手册-uname命令下一篇: Ubuntu服务器版硬件认证详情
关于内核笔记之“System Calls”的所有评论