简单实现了DragonOS的块设备驱动模型以及AHCI驱动程序

上周写好了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请求

转载请注明来源:简单实现了DragonOS的块设备驱动模型以及AHCI驱动程序 | | 龙进的博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值