6.块设备驱动程序--一:块设备驱动程序框架

一:块设备的引入
1.之前我们学的都是字符设备驱动,先来回忆一下

字符设备驱动:
当我们的应用层读写(read()/write())字符设备驱动时,是按字节/字符来读写数据的,期间没有任何缓存区,因为数据量小,不能随机读取数据,例如:按键、LED、鼠标、键盘等

2.接下来本节开始学习块设备驱动

块设备:
块设备是指只能以块为单位进行访问的设备,块的大小一般是512个字节的整数倍。
块设备是i/o设备中的一类, 当我们的应用层对该设备读写时,是按扇区大小来读写数据的,若读写的数据小于扇区的大小,就会需要缓存区, 可以随机读写设备的任意位置处的数据,例如 普通文件(.txt,.c等),硬盘,U盘,SD卡,

二块设备驱动程序框架流程
硬件:硬盘、FLASH
对普通文件 1.txt 的读写会转成对块设备的读写,要读写哪个扇区。从文件的读写转成对扇区的读写,中间会涉及到“文件系统”。

应用程序读写一个变通的文件,最终会转换成操作硬件,由“块设备驱动程序”来操作硬件。
普通的文件转换成对扇区的读写,是由“文件系统”转换。
ll_rw block 是通用的入口,读写请求会放入队列,优化后再来执行。Ll_rw_block 把“读写”放入队列,调用队列的处理函数去优化(调顺序、合并)执行。
如何知道是“ll_rw_block”可以看《LINUX 内核源代码情景分析》。文件系统不是我们关心的重点,分析块设备驱动程序,就是“ll_rw_block”这个函数开始分析。

1
2.

三:如何写块设备驱动程序
0 , 使用register_blkdev()创建一个块设备
1,以面向对象的思想分配 gendisk 结构体。用 alloc_disk 函数。
2,设置 gendisk 结构体。
①,分配/设置一个队列:request_queue_t. (提供读写能力)用 blk_init_queue 函
数。
②,设置 gendisk 其他信息。(提供磁盘属性:磁盘容量,扇区大小等)
3,注册 gendisk 结构体。用 add_disk 函数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值