上周写好了DragonOS的AHCI驱动程序,能够通过DMA读写SATA硬盘,在这里简单记录一下。
块设备驱动程序模型
块设备定义
(以下内容来自维基百科)
块设备是指与系统间用块的方式移动数据的设备。这些设备节点通常代表可寻址设备,如硬盘、CD-ROM和内存区域。块设备通常支持随机存取和寻址,并使用缓存器。操作系统为输入输出分配了缓存以存储一块数据。当程序向设备发送了读取或者写入数据的请求时,系统把数据中的每一个字符存储在适当的缓存中。当缓存被填满时,会采取适当的操作(把数据传走),而后系统清空缓存。
在DragonOS中,采用与Linux类似的块设备驱动程序模型。如下图所示:
块设备数据结构及操作
块设备驱动包含了以下数据结构:
名称 | 功能 | 说明 |
block_device_operation | 块设备的操作接口 | 对外统一提供该接口 |
block_device_request_packet | 块设备请求包 | |
block_device_request_queue | 块设备请求队列 |
AHCI驱动程序
AHCI驱动程序用于操作SATA硬盘设备。暂时只支持1个AHCI控制器。
初始化操作
其流程如下所示
- 从pci总线获取AHCI控制器结构体,并在内存中映射ABAR
- 为每个AHCI控制器创建ahci_device_t结构体
- 映射第0个AHCI控制器的端口
- 初始化请求队列
处理I/O请求
转载请注明来源:https://longjin666.cn/?p=1385
欢迎关注我的公众号“灯珑”,让我们一起了解更多的事物~