一.linux文件系统和字符设备驱动
应用程序和VFS之间的接口是系统调用,而VFS和磁盘文件系以及普通设备之间接口是file_operation结构体成员函数,这个结构包含打开,关闭,读,写等各种对文件的操作
字符设备上层不涉及到磁盘,所以字符设备的file_operation成员函数直接由设备驱动提供。file_operation是字符设备的操作核心。
1.file结构体
文件结构体代表一个文件(若是设备,则为设备文件),系统中每个打开的文件在内核中都有个一个struct file,由内核在打开文件的时候创建,并传递给在文件上进行
操作的任何函数,在文件的所有实例都关闭后,内核释放这个数据结构。
struct file {
/*
* fu_list becomes invalid after file_free is called and queued via
* fu_rcuhead for RCU freeing
*/
union {//共用体不同时刻占用同一段内存
struct list_head fu_list;
struct rcu_head fu_rcuhead;//2.6新加入的锁机制
} f_u;
struct path f_path;
#define f_dentry f_path.dentry//目录入口
#define f_vfsmnt f_path.mnt
const struct file_operations *f_op;//和文件关联的操作
spinlock_t f_lock; /* f_ep_links, f_flags, no IRQ */
atomic_long_t f_count;
unsigne