我正在学习Linux内核,目前尝试实现自己的系统调用。
在内核代码中,它看起来是这样的:
asmlinkage long sys_my_syscall()
{
printk("My system call\n");
return 0;
}
如果我使用systemcall()
函数调用它,它可以正常工作,但我发现另一种方法:
int my_syscall(void)
{
long __res;
__asm__ volatile (
"movl $312, %%eax;"
"int $0x80;"
"movl %%eax, %0;"
: "=m" (__res)
:
: "%eax"
);
if ((unsigned long) (__res) >= (unsigned long) (-125)) {
errno = -(__res);
__res = -1;
}
return (int)(__res);
}
但它返回值为-14
EFAULT
。
我做错了什么?
设置: Linux内核3.4,ARCH x86_64
systemcall()
жәҗд»Јз Ғ - иҝҷеҸҜиғҪдјҡжҳҫзӨәе·®ејӮгҖӮ - Dmytro Sirenkoint 0x80
。 - nos