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主机。
...........................................................................................................
跟着韦东山老师学习嵌入式驱动程序设计
...........................................................................................................
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主机。
...........................................................................................................
跟着韦东山老师学习嵌入式驱动程序设计
...........................................................................................................
相关文章推荐
- Tiny6410开发板下块设备驱动程序的编写驱动之用内存模拟磁盘(一)
- 编写块设备驱动之内存模拟磁盘
- arm 驱动进阶:块设备驱动程序程序设计之用内存模拟磁盘
- 块设备驱动程序分析之内存模拟磁盘
- 块设备驱动1—用内存模拟磁盘
- linux块设备驱动程序分析之 nor flash驱动分析 以及使用内存模拟 nor flash
- 块设备驱动程序分析之内存模拟磁盘
- 块设备驱动之内存模拟硬盘
- 嵌入式驱动开发之--- 虚拟磁盘SBULL块设备驱动程序分析
- Linux块设备驱动之内存模拟块设备
- Linux驱动编程 step-by-step (九)字符设备模拟pipe的驱动程序
- 内存模拟设备进行驱动编程
- linux驱动入门-hello设备驱动程序编写及内核的更新(网卡的添加)
- Linux驱动编程 step-by-step (九)字符设备模拟pipe的驱动程序
- 通过上节的块设备驱动分析,本节便通过内存来模拟块设备驱动
- 嵌入式Linux驱动学习之路(二十二)用内存模拟磁盘
- 2014-04-19 块设备驱动程序(模拟内存)__
- Linux驱动开发----块设备驱动(内存模拟)Tiny6410
- Linux驱动USB驱动程序之USB设备驱动程序1简单编写
- 第12课第4.3节 字符设备驱动程序之中断方式的按键驱动_编写代码