【发布时间】:2021-08-01 05:44:45
【问题描述】:
我正在尝试在 linux 内核中实现一个新的系统调用,所以我写道:
asmlinkage int my_func(void) {
return my_func_internal();
}
我的问题,我应该将my_func_internal 定义为 asmlinkage 吗?
换句话说,我应该写A还是B?
A)asmlinkage int my_func_internal(void) {return 1;}
B)int my_func_internal(void) {return 1;}
我也想解释一下
注意:我已将 my_func 添加到 syscalls.h 中,我是否也应该添加内部的(可能答案是否定的)
【问题讨论】:
-
与其直接用
asmlinkage声明系统调用函数,不如使用SYSCALL_DEFINE宏,例如SYSCALL_DEFINE0(my_func){return my_func_internal();}。这是与使用系统调用包装器的架构兼容所必需的。注意:宏会将函数的名称设置为sys_my_func,除非它使用系统调用包装器,在这种情况下,名称将以_my_func结尾。
标签: c assembly linux-kernel system-calls calling-convention