linux块设备分析

来源:互联网 发布:最火的js框架 编辑:程序博客网 时间:2024/04/29 06:13

块子系统的初始化:

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 0