简单理解 struct inode 和 struct file,cdev 和 inode的关系
2013-12-17 16:54
786 查看
内核中用inode结构表示具体的文件,而用file结构表示打开的文件描述符。
inode中对于编写驱动代码有用的主要成员是dev_t i_rdev,struct cdev * i_cdev。
对于代表设备文件的结点,dev_t i_rdev包含了实际的设备编号。内核中提供了两个宏可以提取inode中的主次编号。
unsigned int iminor(struct inode * inode);
unsigned int imajor(struct inode * inode);
当结点inode指的是一个字符设备文件时,成员struct cdev * i_cdev指针指向的就是这个字符设备。
int register_chrdev_region(dev_t first, unsigned int count, char * name);
first是手动给定的设备编号,主、次设备号通过MKDEV宏生成。count是所请求的连续设备号的个数。
int alloc_chrdev_region(dev_t * dev, unsigned int firstminor, unsigned int count, char * name);
这是动态分配设备号。
要注意的是,这两个函数仅仅是注册设备号!如果要和cdev关联起来,还要调用cdev_add()。
cdev 和 inode的关系可以用下图描述清楚:
图中两个inode代表有两个设备文件,指针*i_cdev连接到相同的cdev代表这两个设备文件指向同一类型设备。而cdev下的list链表表示cdev这种类型的设备有两个。
inode中对于编写驱动代码有用的主要成员是dev_t i_rdev,struct cdev * i_cdev。
对于代表设备文件的结点,dev_t i_rdev包含了实际的设备编号。内核中提供了两个宏可以提取inode中的主次编号。
unsigned int iminor(struct inode * inode);
unsigned int imajor(struct inode * inode);
当结点inode指的是一个字符设备文件时,成员struct cdev * i_cdev指针指向的就是这个字符设备。
int register_chrdev_region(dev_t first, unsigned int count, char * name);
first是手动给定的设备编号,主、次设备号通过MKDEV宏生成。count是所请求的连续设备号的个数。
int alloc_chrdev_region(dev_t * dev, unsigned int firstminor, unsigned int count, char * name);
这是动态分配设备号。
要注意的是,这两个函数仅仅是注册设备号!如果要和cdev关联起来,还要调用cdev_add()。
cdev 和 inode的关系可以用下图描述清楚:
图中两个inode代表有两个设备文件,指针*i_cdev连接到相同的cdev代表这两个设备文件指向同一类型设备。而cdev下的list链表表示cdev这种类型的设备有两个。
相关文章推荐
- 简单理解 struct inode 和 struct file,cdev 和 inode的关系
- 字符设备驱动中cdev与inode、file_operations的关系
- 对关于字符驱动的一些重要数据结构(file_operations, file, inode, cdev)的理解
- 字符设备驱动中cdev与inode、file_operations的关系
- cdev 与inode ,file_operations,kobject map的关系
- 简单理解java的File,InputStream,InputStreamReader,BufferedReader之间的关系
- struct inode & struct file &&inode理解
- struct file 和 struct inode的理解
- 主设备号和file_operations结构关系; ioctl和unlocked_ioctl, ioctl简单测试例子
- struct file 和struct inode
- linux设备模型的inode,cdev,kobj_map,char_device_struct
- struct inode 和 struct file
- vfs的superblock、inode、dentry、file之间的关系
- linux字符cdev和Inode的关系
- struct file_operations及struct file结构体理解转
- 简单的理解unicode和utf-8的关系
- 字符驱动设备中几个重要的结构体(cdev,file_operations,inode,file)
- void cdev_init(struct cdev *cdev, const struct file_operations *fops)
- LINUX-VFS的supper bolck、inode、dentry和file关系简述
- struct inode 和 struct file