您的位置:首页 > 其它

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

2014-12-22 17:17 357 查看
接上篇,框架搭好之后,可以进行内存模拟磁盘

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主机。

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

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

...........................................................................................................
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: