linux块设备分析

块子系统的初始化:

Genhd.c (block)    20196    2014/3/6

static int __init genhd_device_init(void)   :为linux内核中块设备驱动程序的整体框架进行了必要的初始化。


linux块驱动程序用来处理来自内核块子系统中的读/写请求。

     制作请求make_request   需要xxx_make_request,还需要请求处理函数。    blk_queue_make_request

     请求request     调用blk_init_queue为当前块设备分配一个请求队列,同时安装驱动程序实现的请求处理函数。

request_queue->(request_fn_proc   make_request_fn)  request

-------------------------------

块设备号的注册与管理 由register_blkdev函数来完成;与字符设备的register_chrdev_region函数非常类似.

--------------

block_device结构体表示一个逻辑块设备对象。当块设备所对应的设备文件被打开时,内核会创建一个block_device对象。主要用来沟通文件系统组件与实际的块设备驱动程序。定义:include/linux/fs.h。与文件系统更为密切。hd_struct表示块设备上的某一分区信息。


------------

gendisk结构体表示一个实际磁盘设备的抽象。 块设备驱动程序直接分配与操纵该结构体对象。定义:include/linux/genhd.h。与驱动程序更为密切。结构体中的major表示对应的驱动程序。

块设备驱动程序需要负责产生gendisk对象,并初始化其中相关成员。add_disk函数用于将gendisk添加到系统中。

设备驱动程序用alloc_disk分配一个gendisk对象。


block_device_operations块设备的一整套操作集。块设备的读写函数由读写请求队列完成。


来自文件系统的对块设备的数据传输等操作以请求的方式发送给块设备,块设备需要一个容纳请求的队列。

需要在内核的帮助下申请一个请求队列,及提供一个能够处理队列中每个请求的设备特定的处理函数。








请求队列与请求

                                                                            





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值