上周写好了DragonOS的AHCI驱动程序,能够通过DMA读写SATA硬盘,在这里简单记录一下。

源代码:https://github.com/fslongjin/DragonOS/tree/cc39911d4db00b9e3890f35ca46f1579e44d5be4/kernel/driver/disk


块设备驱动程序模型

块设备定义

(以下内容来自维基百科)

块设备是指与系统间用块的方式移动数据的设备。这些设备节点通常代表可寻址设备,如硬盘、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

欢迎关注我的公众号“灯珑”,让我们一起了解更多的事物~

你也可能喜欢

发表评论