实验七(补充)sbull虚拟的磁盘驱动的编写

实验七(补充)sbull虚拟的磁盘驱动的编写

ID:37668873

大小:100.50 KB

页数:17页

时间:2019-05-28

实验七(补充)sbull虚拟的磁盘驱动的编写_第1页
实验七(补充)sbull虚拟的磁盘驱动的编写_第2页
实验七(补充)sbull虚拟的磁盘驱动的编写_第3页
实验七(补充)sbull虚拟的磁盘驱动的编写_第4页
实验七(补充)sbull虚拟的磁盘驱动的编写_第5页
资源描述:

《实验七(补充)sbull虚拟的磁盘驱动的编写》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、sbull虚拟的磁盘驱动的编写分类:Embedded[ARM/DSP...]驱动2011-11-2817:24191人阅读评论(0)收藏举报原理指导:我们通过vmalloc在内存中开辟一部分空间,作为一个虚拟的磁盘,然后我们以块设备的方式来访问这片内存,例如这个sbull模型。sbull(Simple Block Utility for Loading Localities),该驱动程序实现了一个使用系统内存的块设备,从本质上讲,属于一种 RAM 磁盘驱动程序。字符设备的IO操作则是直接不绕弯的,块设

2、备的IO操作会配对和整合。驱动的任务是处理请求,对于这些请求的排队和整合的工作有IO调度算法处理。所以块设备的核心工作就是:请求处理函数或者是制造请求。Block_devices_operations结构体中没有读写一类的成员函数,而只是包含打开、释放和IO控制等函数。块设备的流程:(1)先把模块模型搭建好MODULE_LICENSE("Dual BSD/GPL");static struct block_device_operations sbull_ops = {.owner           

3、= THIS_MODULE,.open          = sbull_open,.release  = sbull_release,.media_changed   = sbull_media_changed,.revalidate_disk = sbull_revalidate,.ioctl         = sbull_ioctl,.getgeo= sbull_getgeo,};module_init(sbull_init);module_exit(sbull_exit);(2)定义一个我们

4、用内存虚拟出来的块设备sbull_devstruct sbull_dev {        int size;                       /* Device size in sectors */        u8 *data;                       /* The data array */        short users;                    /* How many users */        short media_change;

5、             /* Flag a media change? */        spinlock_t lock;                /* For mutual exclusion */        struct request_queue *queue;    /* The device request queue */        struct gendisk *gd;             /* The gendisk structure */        str

6、uct timer_list timer;        /* For simulated media changes */};这个设备结构体是我们工作的核心,也许你不知道需要哪些成员,不要紧,还是那句话,编写驱动的时候,需要设备表现出那些性质和功能,相应的添加上就OK了。(3)设备的初始化 sbull_init(  ){一、sbull_major = register_blkdev(sbull_major, "sbull");二、Static struct sbull_dev *Devices = 

7、kmalloc(ndevices*sizeof (struct sbull_dev), GFP_KERNEL);//在这里可以对Kmalloc的结果判断下,然后进一步处理...三、setup_device()跳到我们设备注册函数中去}//初始化函数结束(4)开始注册我们的这个设备 setup_device(  ){  //安装(注册)一个设备前,一定要保证它被初始化了这些成员都得出初始化好:    一、    int size;                       /* Device size

8、 in sectors */        u8 *data;                       /* The data array */        short users;                    /* How many users */        spinlock_t lock;                /* For mutual exclusion */        struct request_queue 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。