系统调用
与内核通信
POSIX : IEEE标准
C库:
系统调用:系统内核层面使用,应用层需要syscall
系统调用
asmlinkage 限定词 通知编译器仅从栈中提取该函数参数
系统调用号
系统通过调用号来进行系统调用,在编译的时候已经确定
系统调用表,例如x86-64就在 arch/i386/kernel/syscall_64.c
系统调用处理
应用程序通过软中断方式通知内核,通过一个异常导致系统切换到内核
实现系统调用
参数验证
指针必须保证:
内存区域属于用户空间
在进程的地址空间里
读写可执行等权限要说明
使用copy_to_user() 和copy_from_user()来进行内核用户层交换数据,它们的参数类似memcpy
使用capable() 来判断是否有权限,
系统调用注册
用户空间访问系统调用
_syscalln() n为0~6,代表需要传递的参数个数
例如open 进行系统调用: _syscall3(long,open,const char*,filename,int,flags,int,mode);原型:long open(const char* filename,int flags,int mode);