在设备驱动程序中,在用open函数打开时候,首先就要确定要具体打开的设备。其中的inode参数在i_cdev字段中包含了我们所需要的信息,就是我们先前设置的cdev的结构。唯一的问题是,通常不需要cdev结构本身,而是希望得到包含cdev结构的设备原始结构,在ldd3中就是scull_dev结构。实现此技巧的就是通过在中的container_of宏来实现:
container_of(pointer, container_type, container_field);
struct scull_dev *dev; /*device information*/
dev = container_of(inode->i_cdev, struct scull_dev, cdev);
filp->private_data = dev /*for other method*/
一旦代码找到scull_dev结构后,scull将一个指针保存到了file结构的private_data字段中,这样可以方便以后对该指针的访问。
阅读(1591) | 评论(0) | 转发(0) |