Tiny6410开发板下块设备驱动程序的编写驱动之用内存模拟磁盘(二)

接上篇,框架搭好之后,可以进行内存模拟磁盘

3th

在ramblock_init 函数中加入硬件相关操作

static unsigned char *ramblock_buf;



static int ramblock_init(void)

{

.................

/* 3. 硬件相关操作 */
ramblock_buf = kzalloc(RAMBLOCK_SIZE, GFP_KERNEL);

.......................

}


在do_ramblock_request()函数中:


static void do_ramblock_request (struct request_queue * q)
{
static int cnt = 0;
struct request *req;
req = blk_fetch_request(q);

//printk("do_ramblock_request %d\n",++cnt);


while (req) {
/* 数据传输三要素: 源,目的,长度 */
/* 源/目的: */
unsigned long offset = blk_rq_pos(req) *512;                    //  unsigned long offset = req->sector * 512;

/* 目的/源: */
//req->buffer;

/* 长度: */
unsigned long len      = blk_rq_cur_bytes(req);                    //  unsigned long len = req->current_nr_sectors * 512;

if (rq_data_dir(req) == READ)
memcpy(req->buffer, ramblock_buf+offset, len);
else
memcpy(ramblock_buf+offset, req->buffer, len);

/* wrap up, 0 = success, -errno = fail */
if (!__blk_end_request_cur(req, 0))
req = blk_fetch_request(q);
}
}

测试:(在Tiny6410开发板上)

在PC上查看ramblock.bin
   sudo mount -o loop ramblock.bin  /mnt


成功将开发板上的文件挂接到linux主机。

...........................................................................................................

跟着韦东山老师学习嵌入式驱动程序设计

...........................................................................................................

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值