对于open函数的一些记录

 

static RET_CODE dev_open(struct inode *inode, struct file *file) 
之前老是对open这个函数中的inode和file参数不是很理解,查了些资料也是干巴巴的说教,最近把这个东东好好理一理,其实这两个函数的作用很简单,inode用来识别不同的次设备号,file用来传递私有数据(or全局数据) 
看个例子:

 
  1. static RET_CODE dev_open(struct inode *inode, struct file *file)
  2. {
  3. UINT8 dev_idx = 0;
  4. dev_idx = MINOR(inode->i_rdev);//获取次设备号
  5. if(dev_idx >= MAX_TUNER_SUPPORT_NUM)//看此设备好是否超过驱动所支持的最大数
  6. {
  7. PRINTF(LOG_DBG,"[%s]line=%d,dev_idx set error!\n", __FUNCTION__, __LINE__);
  8. return ERR_FAILED;
  9. }
  10. file->private_data = (void *)&my_dev[dev_idx];//将属于每个次设备的私有数据赋值
  11. return RET_SUCCESS;
  12. }

有这样一种情况:板上有四个同样的设备,他们的驱动都是一样的,此时就不需要编写4份驱动代码了,我们只需要有一份代码及可,但是可以创建4个设备,这四个设备拥有同样的主设备号,但是却有不同的此设备号,代码框架可以只用一份,但是要为每个次设备设置单独的私有数据,&my_dev[dev_idx]这就是为他们准备的,每个设备的节点属性就是靠inode和file来控制的,虽然公用一份open函数但是传进来的inode和file值是不一样的。 
当open不同的次设备节点时,dev_idx = MINOR(inode->i_rdev);会获取各自设备的次设备号,file->private_data = (void *)&my_dev[dev_idx]这个就可以将各自的私有数据给各自的file,每个此设备都各自拥有各自的file,这样就可以使用一份代码创建多个相同设备了。

 
  1.  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值