对于字符设备驱动程序:
1、确定主设备号
2、构造file_operations结构体
3、注册 register_chrdev
4、入口、出口、协议
对于块设备,由于有扇区的存在,读写方式不同,如果频繁的向字符设备一样读写,那么效率会降低——如写入前,会先备份整个扇区的数据,然后擦除,然后合并新数据和旧数据,再整体写入。
所以相比于字符设备驱动程序,
①先放入队列
②优化后再去执行
——————————————————————————————————————————
块设备驱动框架:
应用程序调用读写函数——>文件系统——>扇区的读写
函数为ll_rw_block,位于fs/buffer.c文件中
>>>>>>>>>>
通过分析框架,得出块设备驱动程序的编写步骤:
1、分配一个gendisk结构体,alloc_disk
2、设置这个结构体
2.1分配/设置队列:request_queue_t/blk_init_queue,该队列会提供读写能力
2.2设置gendisk结构体其他信息,包含一些属性:如容量等。
3、注册gendisk结构体,add_disk
使用内存模拟磁盘
代码分析:
/* 参考:
* drivers\block\xd.c
* drivers\block\z2ram.c
*/
#include <linux/module.h