Linux块设备驱动: ramdisk


/*
 * linux: 4.5.2
 */

#include <linux/module.h>
#include <linux/blkdev.h>
#include <linux/vmalloc.h>

#define BLKDEV_NAME "test_blkdev"
#define GENDISK_NAME "test_gendisk"

#define NSECTORS	1024
#define RAMDISK_MINORS	1

struct ramdisk_dev {
	struct gendisk *gd;
	unsigned char *data;
};

static blk_qc_t ramdisk_make_request(struct request_queue *q, struct bio *bio)
{
	struct ramdisk_dev *dev = q->queuedata;
	struct bio_vec bvec;
    struct bvec_iter iter;
	unsigned long byte_offset = bio->bi_iter.bi_sector << 9;	// !!!!!!

	bio_for_each_segment(bvec, bio, iter) {
		unsigned char * const buffer = __bio_kmap_atomic(bio, iter);
		unsigned long const cur_bv_len = bio_cur_bytes(bio);	// can be divided by 512

		if (byte_offset + cur_bv_len > (NSECTORS << 9)) {
			printk (KERN_NOTICE "Beyond-end r/w (%ld %ld)\n", byte_offset, cur_bv_len);
			goto err_b
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值