简单理解 struct inode 和 struct file,cdev 和 inode的关系

 内核中用inode结构表示具体的文件,而用file结构表示打开的文件描述符。

inode中对于编写驱动代码有用的主要成员是dev_t i_rdevstruct 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这种类型的设备有两个。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值