一.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;
unsigned int f_flags;//文件标识,O_RDONLY,O_NONBLOCK,O_SYNC
fmode_t f_mode;//文件读写模式
loff_t

本文深入探讨Linux文件系统和字符设备驱动,重点解析file结构体及其在设备驱动中的作用。file_operation结构体作为字符设备操作的核心,直接由设备驱动提供其成员函数,用于实现打开、关闭、读、写等操作。当打开文件时,内核创建并维护struct file实例,直至所有实例关闭后释放。此外,VFS inode存储文件元信息,如大小、权限,作为文件系统管理和连接的基础。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



