以下是一个最简单的块设备驱动,写完可以对编写块设备驱动的框架有初步了解。
环境:
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->current_nr_sectors)<<9) > SIMP_BLKD

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

被折叠的 条评论
为什么被折叠?



