设备节点

Linux文件系统与设备驱动
应用程序和VFS之间的接口是系统调用。而VFS与文件系统以及设备之间的接口是file_operation结构体
成员函数,这个结构体对文件进行打开,关闭,读写,控制的一系列成员函数。
字符设备的上层没有类似于磁盘的ext2文件系统,所以字符设备的file_oeration成员函数就直接由设备
驱动提供了。file_operation正是字符设备驱动的核心。
设备驱动当中,比较关心file和inode这两个结构体。
file结构体
file结构体代表一个打开的文件,系统中每个打开的文件在内核空间当中都有一个关联的struct file。他由内核在
打开是创建。并传递给在文件上进行操作的任何函数。struct file通常被命名为

struct file{
union{
struct llist_node fu_llist;
struct  rcu_head fu_rcuhead;
} f_u;
struct path f_path;
#define f_dentry f_path.dentry;
struct inode *f_inode /*cached value*/
const struct file_operation *f_op; /*和文件关联的操作*/

/*
*Protect f_ep_link,f_falags
*Must not be taken from IRQ context
*/
spinlock_t f_lock;
atomic_long_t f_count;
unsigned int f_flags;
fmode_d f_mode;
struct mutex f_pos_lock;
loff_t f_pos; /*当前的读写位置*/
struct fown_struct f_owner;
const struct cred *f_cred;
struct file_ra_static f_ra;
 
u64 f_version;
#ifdef
void *f_security;
#endif
/*needed for tty driver,and maybe others*/
void *private_data; /*文件私有数据*/
 
#ifdef CONFIG_EPOLL
/*Used by fs/eventpoll.c to link all the hooks to this file*/
struct list_head f_ep_links;
struct list_head f_tfile_llink;
#endif
struct sddress_space *f_mapping;
}__attribute__{(aligned(4))};
文件读/写模式,标志f_flags都是设备驱动关心的内容。而私有数据指针private_data在设备驱动当中被广泛的
应用,大多数被指向设备驱动自定义以用于描述设备的结构体。
下面的代码可以用于判断以阻塞还是非阻塞的方式打开设备文件:
if(file->f_flags & O_NONBLOCK)
pr_debug("open:non-blocking\n");
else
pr_debug("open:blocking\n");

inode结构体
VFS inode包含文件的访问权限。 属性、组、大小、生成时间、访问时间、最后修改时间等信息。他是Linux管理
文件系统的最基本信息。是管理文件系统的最基本信息。也是文件系统连接任何子目录、文件的桥梁,

inode结构体的关键部分定义。

struct inode{
umode_t i_node; /*inode权限*/
uid_t  i_uid;  /*拥有者的id*/
gid_t i_gid; /*所属的群组id*/
dev_t i_rdev; /*若是设备文件,此字段将记录设备的设备号*/
loff_t i_size; /*inode所代表的文件的大小*/

struct timespec i_atime;   /*inode最近一次的存取时间*/
struct timespec i_mtime; /*inode最近一次的修改时间*/
struct timespec i_ctime;

unsigned int i_blkbits;
blkcnt_t i_block; /*inode所使用的block数,一个block为512字节*/
union{
struct pipe_inode_info *i_pipe;
struct block_device *i_bdev;
/*若是块设备,为其对应的block_device结构体指针*/
struct cdev *i_cdev;    /*若是字符设备,为其对应的cdev结构体指针*/
}
...
}
今天先到这里,爱你,YZ.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值