涉及到一个问题,在内核态读磁盘固定的位置的数据应该怎么办。如果是在用户态,有C库函数可以做到,read, lseek 等都可以。但是在内核态呢?最直接的办法就是自己发bio去读,但这样有点麻烦,还有两种比较简单的方法。
一种是用buffer_head, 一种是用 dm_io_sync_vm。
第一种:buffer_head.
代码如下:
22static int __init bread_init(void)
23 {
24
25 struct buffer_head *bh = NULL; //声明bh
26 struct block_device *bdev;
27 char *p, ch;
28 int i;
29 int block_size;
30 int j;
31
32 bdev = open_bdev_excl(PATH, FMODE_READ, NULL); //打开设备,获取bdev
33 if (IS_ERR(bdev)) {
34 printk(KERN_ALERT "open bdev failed./n");
35 goto out1;
36 }
37
38
39 block_size = bdev->bd_block_size;
40
42 bh = __bread(bdev, j, block_size);
43