0
블럭 디바이스 드라이버 (예 :/dev/dua)를 작성하는 태스크가 있는데,이 블럭 디바이스는 OS처럼 보일 것입니다./dev/sda와 같은 디스크 장치. 따라서이 드라이버는 데이터 블록을 처리하여 다른 블록 장치에 기록해야합니다.리눅스에서 블럭 디바이스 드라이버로부터 디바이스를 차단하기 위해 입출력을 수행하는 방법
"/ dev/sdb"와 같은 백엔드 장치에서 I/O 작업을 수행하는 올바른 방법을 찾고 있습니다.
저는 디스크 섹터 크기의 전송을 위해 vfs_read/write 루틴을 사용했습니다. 하지만 백엔드 장치에서 I/O를 수행하는 데 더 효과적인 방법이 있습니까?
TIA. 이 백엔드 블록 장치`
void misc_request_fn(struct request_queue *q, struct bio *bio) {
printk ("we are passing bios.\n");
// here is where we trace requests...
original_request_fn (q, bio);
return;
}
void register_block_device(char *path) {
struct request_queue *blkdev_queue = NULL;
if (path == NULL) {
printk ("Block device empty.\n");
return;
}
printk ("Will open %s.\n", path);
blkdev = lookup_bdev(path);
if (IS_ERR(blkdev)) {
printk ("No such block device.\n");
return;
}
printk ("Found block device %p with bs %d.\n", blkdev, blkdev->bd_block_size);
blkdev_queue = bdev_get_queue(blkdev);
original_request_fn = blkdev_queue->request_fn;
blkdev_queue->request_fn = misc_request_fn;
}
에 대한 I/O를 수행하는 방법으로 사용할 수 있도록하는 "필터링"기능을 구현
[ask]를 검토하십시오. – Aron