学写块设备驱动(一)----了解gendisk及request处理函数

本文介绍了如何编写最简单的块设备驱动,通过一个实例展示了gendisk结构和request_queue的作用。gendisk描述磁盘信息,通过request_queue与处理函数连接。在Linux 2.6.29内核中,驱动关键在于实现gendisk和request处理函数。从2.6.31内核起,部分API发生变更。通过学习,可以掌握块设备驱动的基本框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是一个最简单的块设备驱动,写完可以对编写块设备驱动的框架有初步了解。

环境:

Linux 2.6.29

源码:

simp_blkdev.c:

#include<linux/init.h>
#include<linux/module.h>
#include<linux/genhd.h>
#include<linux/fs.h>
#include<linux/blkdev.h>

#define SIMP_BLKDEV_DISKNAME "simp_blkdev"
#define SIMP_BLKDEV_DEVICEMAJOR COMPAQ_SMART2_MAJOR
#define SIMP_BLKDEV_BYTES (8*1024*1024)



static DEFINE_SPINLOCK(rq_lock);
unsigned char simp_blkdev_data[SIMP_BLKDEV_BYTES];
static struct gendisk *simp_blkdev_disk;
static struct request_queue *simp_blkdev_queue;//device's request queue

struct block_device_operations simp_blkdev_fops = {
	.owner = THIS_MODULE,
};
//handle request that pass to this device
static void simp_blkdev_do_request(struct request_queue *q){
	struct request *req;
	while( (req = elv_next_request(q)) != NULL){
		if( ( (req->sector + req-&g
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值