1 首先看一下SYSCALL_DEFINE的定义,如下: 1#defineSYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)2#defineSYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)3#defineSYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)4#defineSYSCALL_DEFINE3...
#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) #define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__) #define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, ...
SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
可以看到它有三个参数,对应的就是前面的SYSCALL_DEFINE3,我们在linux-2.6.34\net\socket.c可以找到如下定义: SYSCALL_DEFINE3(socket,int,family,int,type,int,protocol){code...} 可以看到确实使用了SYSCALL_DEFINE3,在宏中##表示的是字符串连接符,__VA_ARGS__代表前面…里面的可变参数,将上面的代码展开如下...
1 ⾸先看⼀下SYSCALL_DEFINE的定义,如下:1 #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)2 #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)3 #define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)4 #def...
函数名称:SYSCALL_DEFINE3 函数原型:SYSCALL_DEFINE3(setitimer, int, which, struct itimerval __user *, value, struct itimerval __user *, ovalue) 返回类型: 参数:无342 如果value则343 error等于get_itimerval( & set_buffer, value) 344 如果error则返回:error 346...
Socket的创建是在用户空间调用socket系统函数完成的,创建一个Socket返回一个文件描述符fd,内核的系统调用接口为SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol),在net/socket.c文件中,下面我们看一下内核中的源码实现。 SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) ...
#define__SC_DECL3(t3,a3, ...)t3a3,__SC_DECL2(__VA_ARGS__) 所以对函数定义 SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) 就等于 SYSCALL_DEFINEx(3, _##socket, __VA_ARGS__) = asmlinkage long sys_socket(__SC_DECL3(__VA_ARGS__)) = asmlinkage long sys_sock...
所以对函数定义 SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) 就等于 SYSCALL_DEFINEx(3, _##socket, __VA_ARGS__) = asmlinkage long sys_socket(__SC_DECL3(__VA_ARGS__)) = asmlinkage long sys_socket(int family, __SC_DECL2(__VA_ARGS__)) ...
syscall指令,ax寄存器指定系统调用号