从linux0.11源码看内核设备添加请求
2023-11-25 05:24:15
概述
在计算机系统中,设备添加请求是系统与设备驱动程序之间通信的重要机制。当系统需要访问新添加的设备时,会通过设备添加请求将该请求发送给驱动程序,由驱动程序负责加载并初始化设备,以便系统能够与之交互。在linux0.11内核中,设备添加请求的处理过程涉及多个数据结构和函数,本文将深入分析这些数据结构和函数,以阐述内核如何处理设备添加请求。
数据结构
1. blk_dev_struct
blk_dev_struct结构体定义了系统可用的块设备信息,包括主设备号、设备名称、读写函数指针、私有数据指针等。当设备驱动程序初始化时,会将相关信息填充到这个结构体中,以便系统能够访问和使用这些设备。
2. request_queue_t
request_queue_t结构体定义了请求队列,其中包含了当前正在处理的请求、等待处理的请求以及请求处理的统计信息等。当设备驱动程序初始化时,会创建一个request_queue_t结构体,以便系统能够将请求发送给驱动程序。
函数
1. blk_dev_init()
blk_dev_init()函数负责初始化块设备。该函数首先分配内存空间并初始化blk_dev_struct结构体,然后将相关信息填充到结构体中,最后将结构体添加到系统中。
2. blk_register_region()
blk_register_region()函数负责将块设备区域注册到系统中。该函数首先检查该区域是否已经被注册,如果没有,则分配内存空间并初始化一个request_queue_t结构体,然后将该结构体添加到系统中。
3. blk_mq_alloc_tagset()
blk_mq_alloc_tagset()函数负责为块设备分配标签集。该函数首先检查该块设备是否已经分配了标签集,如果没有,则分配内存空间并初始化一个blk_mq_tag_set结构体,然后将该结构体添加到块设备中。
设备添加请求的流程
当系统需要访问新添加的设备时,会通过设备添加请求将该请求发送给驱动程序。驱动程序收到请求后,会执行以下步骤:
- 调用blk_dev_init()函数初始化块设备。
- 调用blk_register_region()函数将块设备区域注册到系统中。
- 调用blk_mq_alloc_tagset()函数为块设备分配标签集。
- 加载并初始化设备驱动程序。
- 将设备信息添加到系统中。
设备驱动程序初始化完成后,系统就可以通过该驱动程序访问设备了。
总结
在linux0.11内核中,设备添加请求的处理过程涉及多个数据结构和函数,包括blk_dev_struct结构体、request_queue_t结构体、blk_dev_init()函数、blk_register_region()函数和blk_mq_alloc_tagset()函数。通过对这些数据结构和函数的分析,我们可以更好地理解内核如何处理设备添加请求,并理解系统如何与设备驱动程序交互。这对于系统开发和维护人员来说具有重要意义。