一.文件操作,文件结构
清单1 sys_open 函数代码
asmlinkage long sys_open(const char __user * filename, int flags, int mode) { …… fd = get_unused_fd(); if (fd >= 0) { struct file *f = filp_open(tmp, flags, mode); fd_install(fd, f); } …… return fd; …… }
asmlinkage:asmlinkage大都用在系统调用中。有一些情况下是需要明确的告诉编译器,我们是使用stack来传递参数的,比如X86中的系统调用,是先将参数压入stack以后调用sys_*函数的,所以所有的sys_*函数都有asmlinkage来告诉编译器不要使用寄存器来编译。
__user:__user
宏简单告诉编译器(通过 noderef
)不应该解除这个指针的引用(因为在当前地址空间中它是没有意义的)。(void __user *)arg 指的是arg值是一个用户空间的地址,不能直接进行拷贝等,要使用例如copy_from_user,copy_to_user等函数。默认是内核空间,因为这是驱动,是在内核空间运行的,直接拷贝不了,因为一个是在用户空间,一个是在内核空间
aio异步写文件:http://blog.chinaunix.net/uid-8566031-id-2018931.html
open参数O_DIRECT:
http://www.w2bc.com/Article/19913
二.异步poll读文件
http://blog.youkuaiyun.com/fansongy/article/details/6853395
三.mount原理
四.读写错误
http://lobert.iteye.com/blog/1705861