当前位置:嗨网首页>书籍在线阅读

09-块设备的打开与释放

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

13.4 块设备的打开与释放

块设备驱动的open()和release()函数并非是必须的,一个简单的块设备驱动可以不提供open() 和release()函数。

块设备驱动的open()函数和其字符设备驱动的对等体不太相似,不以相关的inode和file结构体指针作为参数。在open()中我们可以通过block_device参数bdev获取private_data、在release()函数中则通过gendisk参数disk获取,如代码清单13.12所示。

代码清单13.12 在块设备的open()/release()函数中获取private.data

1 static int xxx_open(struct block_device *bdev, fmode_t mode)

2 {

3 struct xxx_dev *dev = bdev->bd_disk->private_data;

4

5 ...

6

7 return 0;

8 }

9

10 static int xxx_release(struct gendisk *disk, fmode_t mode)

11 {

12 struct xxx_dev *dev = disk->private_data;

13

14 ...

15

16 return 0;

17 }

在一个处理真实的硬件设备的驱动中,open()和release()方法还应当设置驱动和硬件的状态,这些工作可能包括启停磁盘、加锁一个可移出设备和分配DMA缓冲等。