`

asmlinkage

阅读更多

 

http://www.linuxsir.org/bbs/showthread.php?t=278997

harveysharp@linuxsir.org ::

 

它是GCC对C程序的一种扩展, #define asmlinkage __attribute__((regparm(0)))
表示用0个寄存器传递函数参数,这样,所有的函数参数强迫从栈中提取。
这个asmlinkage大都用在系统调用中,系统调用需要在entry.s文件中用汇编语言调用,所以必须要保证它符合C语言的参数传递规则,才能用汇编语言正确调用它。
这也是为何使用asmlinkage的原因吧!这是我的理解。

分享到:
评论

相关推荐

    linux 应用程序中的open 操作与硬件驱动之间的联系浅析

    第一节 open 函数的系统操作过程,在fs/open.c 文件中 ...asmlinkage long sys_open(const char __user filename,int flags,int mode)。 那么,就是上面说过的,open 函数,对应的内核函数,就是sys_open,这种形式。

    ARM_Linux启动分析.pdf

    start_kernel()是"init/main.c"中的asmlinkage函数,至此,启动过程转入体系结构无关的通用C代码中。 对于I386平台 在i386体系结构中,因为i386本身的问题,在 "arch/alpha/kernel/head.S"中需要更多的设置,但...

    Linux内核中的信号机制??信号处理

    当进程被调度时,会调用do_... asmlinkage void do_notify_resume(struct pt_regs *regs, unsigned int thread_flags, int syscall) {  if (thread_flags & _TIF_SIGPENDING)  do_signal(&current->blocked,

    xitongdiaoyong.zip_unistd.h

    2.修改sys.C文件,添加extern int count 然后定义自己的函数,asmlinkage int sys_mycall(void) 3.修改entry.S和unistd.h文件,为自己定义的函数增加系统调用号。 4.自己写个函数进行系统调用。

    Linux内核中的dup系统调用

    内核版本:2.6.14  dup系统调用的服务例程为sys_dup函数,定义在fs/fcntl.c中。... asmlinkage long sys_dup(unsigned int fildes)//sys_dup函数的参数,即fildes,是文件描述符fd {  int ret = -EBADF;  

    用户接口实验.ppt

    1、自定义函数 修改:/usr/src/linux-2.4/kernel/sys.c ...asmlinkage int sys_mycall(int x) { printk("This is my syscall!\n"); return x; } 说明:系统调用命名规则是调用函数名加sys_前缀 ······

    ARM Linux 启动过程分析

    我们当前以linux-2.6.19内核版本作为范例来分析,本文中所有的代码,前面都会加上行号以便于和源码进行对照, 例: 在文件init/main.c中: 00478: asmlinkage void init start_kernel(void) 前面的"00478:" 表示478行,...

    嵌入式系统/ARM技术中的Linux系统调用例程system_call和参数传递

    系统调用接口调用“int $Ox8O”指令进入内核并准各了相关参数后,剩下的工作就由系统调用例程来进行。Linux定义的系统调用 例程的入口为system_call。下面具体介绍system_call所做的工作。  system_call是用汇编...

Global site tag (gtag.js) - Google Analytics