linux ahci 驱动下载,linux ahci驱动分析 SylixOS中AHCI驱动框架分析

1、概述

SylixOS中AHCI驱动框架分析。本文档介绍SATA和AHCI相关协议,以IMX6Q实验平台为基础,分析SylixOS中AHCI驱动框架的具体实现。

2、SATA简介

2.1 SATA硬盘

串口硬盘SATA(Serial ATA)与以往的并口硬盘PATA(Parallel ATA)相比,数据传输速度更加快捷,并支持热插拔;同时,SATA总线使用了嵌入式时钟频率信号,具备了比以往更强的纠错能力,能对传输指令进行检查,如果发现错误会自动矫正,提高了数据传输的可靠性。

目前SATA接口主要有SATA1.0、SATA2.0、SATA3.0这三个版本,三种主流规范的带宽与传输速度的对比如图 2.1所示。20170518095808190.png

图 2.1 SATA传输速度对比

2.2 拓扑结构

SATA的拓扑结构是点对点式的,主机可以通过多个链接支持多个设备,每个设备百分百占用总线带宽,并且一个设备的链接出错不会影响其他设备的链接,其链接方式如图 2.2所示。20170518095808193.png

图 2.2 SATA拓扑结构

2.3 接口结构

SATA接口使用4根电缆传输数据,其结构图如图 2.3所示。Tx+、Tx-表示输出差分数据线,对应的,Rx+、Rx-表示输入差分数据线。20170518095808194.png

图 2.3 SATA接口结构

2.4 协议模型

SATA协议借鉴TCP/IP模型,分为四个层次来实现,包括物理层、链路层、传输层、应用层,其体系结构如图 2.4所示。20170518095809196.png

图 2.4 SATA协议模型

物理层采用全双工串行传输方式,主要功能是进行信号的串并及并串转化。

链路层的主要功能是通过控制原语的传递来控制信息帧的整个传输过程,保证帧信息能够正确的发送与接收,并能进行流量的控制,防止数据发送过快或接收过多。

传输层主要负责FIS帧信息结构的封装与解封。

应用层能够接收来自主机端的命令,根据命令的要求将自身的信息发送给主机端,或是接收来自主机端的以PIO或DMA方式传输的数据,同时写入闪存中,也能从闪存中以PIO或DMA的方式读出数据,传送给主机端。在应用层采用两个FIFO对数据进行缓冲,一个为读FIFO,一个为写FIFO。应用层能接收来自传输层的数据帧送入写FIFO中或将来自设备内部总线的数据保存在读FIFO中,然后通知传输层构造数据帧。

3、AHCI简介

3.1 AHCI系统结构

AHCI是SATA设备对应的协议标准(逻辑设备接口标准),在系统内存总线和SATA设备内部逻辑间扮演通用接口的角色,我们可以将其视为SATA的一种优化驱动,其本质就是SATA协议模型各层次的具体实现。它以AHCI HBA(Host Bus Adapter)的形式呈现,其系统结构如图 3.1所示。20170518095809199.png

图 3.1 AHCI系统结构

3.2 AHCI HBA结构

每个HBA上最多可以支持32个端口,HBA的内部逻辑结构如图 3.2所示,图中从左往右,可以按照SATA协议四层模型划分。20170518095809203.png

图 3.2 HBA内部结构

4、AHCI驱动框架分析

在IMX6Q实验平台上,HBA是集成在芯片组内部,并且仅使用了端口0。

在SylixOS集成开发环境base工程libsylixos/SylixOS/system/device/ahci路径下,提供了ahci驱动框架,其结构如图 4.1所示。20170518095809204.png

图 4.1 AHCI驱动框架

4.1 AHCI驱动管理

在ahcidrv.c中,主要实现了如下函数:

API_AhciDrvInit

该函数主要负责AHCI驱动注册的初始化工作,如:初始化驱动数量统计的全局变量、初始化驱动管理链表等,同时给shell命令"ahcidrv"关联操作函数。该函数需要在进行驱动注册前调用。

API_AhciDrvRegister

该函数主要负责注册指定类型的驱动,通过创建驱动控制块,将bsp层实现的AHCI相关驱动链入管理链表,以便AHCI控制器调用。

API_AhciDrvHandleGet

该函数为AHCI控制器提供调用AHCI驱动句柄的接口。

__tshellAhciDrvCmd

shell命令"ahcidrv"的关联函数实现,提供AHCI设备驱动列表的显示功能。

4.2 AHCI设备管理

在ahcidev.c中,主要实现了如下函数:

API_AhciDevInit

该函数主要负责AHCI设备管理的初始化,如:初始化设备数量统计的全局变量、初始化设备管理链表等,同时给shell命令"ahcidev"关联操作函数。该函数在进行驱动注册前被调用。

API_AhciDevCountGet

该函数保存当前设备链表中存在的设备数量。

API_AhciDevHandleGet

该函数提供了根据控制器句柄和驱动器编号获取AHCI设备句柄的接口,在创建设备前可以判断当前设备链表中是否已存在同类型的设备。

API_AhciDevAdd

该函数用于向AHCI设备管理链表中添加一个设备。

API_AhciDevDelete

该函数用于从AHCI设备管理链表中删除一个设备。

API_AhciDevIoctl

该函数提供AHCI设备控制接口,用于获取/设置设备的cache回写功能

__tshellAhciDevCmd

Shell命令"ahcidev"的关联函数实现,提供AHCI设备列表显示和cache回写设置功能。

4.3 AHCI控制器管理

在ahciCtrl.c中,主要实现了如下函数:

API_AhciCtrlInit

该函数主要负责AHCI控制器管理初始化,如:初始化控制器数量统计的全局变量、初始化控制器管理链表等,同时给shell命令"ahcictrl"关联操作函数。该函数在进行驱动注册前被调用。

API_AhciCtrlCountGet

该函数用来获取当前AHCI控制器总数。

API_AhciCtrlIndexGet

该函数用来给新创建的控制器分配索引号。

API_AhciCtrlHandleGetFromIndex

该函数可通过索引号获取AHCI控制器的句柄。

API_AhciCtrlHandleGetFromName

该函数可通过控制器名字获取AHCI控制器的句柄。

API_AhciCtrlHandleGetFromPciArg

该函数可通过PCI设备句柄来获取AHCI控制器的句柄。

API_AhciCtrlAdd

该函数用于向AHCI控制器链表中添加一个新的控制器。

API_AhciCtrlDelete

该函数用于向AHCI控制器链表中删除一个控制器。

__tshellAhciCtrlCmd

Shell命令"ahcictrl"的关联函数实现,提供AHCI控制器列表显示功能。

4.4 AHCI驱动库

在ahciLib.c中,提供了一些AHCI驱动器和控制器的相关操作库函数,如驱动器扇区信息、工作模式、中断处理、控制器复位、控制器信息打印等功能。

4. 5AHCI电源管理

在ahciPm.c中,提供了使能/禁能设备电源管理功能,用于块设备中的电源控制管理。

4.6 AHCI驱动实现

在ahci.c中,是AHCI控制器逻辑功能的具体实现。

创建AHCI控制器,并加入控制器管理链表进行管理。

初始化AHCI驱动,包括创建设备热插拔监测线程、控制器和驱动器内存结构的分配和初始化、命令序列和FIS信息帧的初始化、磁盘控制器和驱动器的初始化等。

设备热插拔监测线程可以监测设备接入、设备移除、设备异常等信息,并进行相关处理。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
打开ahci模式(sata)的正确步骤: 1、安装系统前在bios将硬盘模式设置为ide兼容模式(别说你不会哦),然后安装系统,建议安装微软原版系统或是官方oem原版系统; 2、系统安装完毕后安装对应型号的主板驱动,重启; 3、重启后解压我提供的压缩包到任意位置,然后运行PREPARE文件夹的install.cmd文件(vista以后的系统请右键以管理员身份运行),然后你会看到一个(也可能是两三个,闪得太快我没看清)黑黑的dos窗口一闪而过,然后手动重启电脑; 4、重启进入bios,设置硬盘模式为ahci(或sata)模式并保存退出进入系统,如能顺利进系统而不出现蓝屏,即说明安装正确,如果蓝屏就重新设置bios硬盘为ide兼容模式,进系统后重复上一个步骤; 5、如果能顺利进入系统,则不要进行任何操作,你会看到右下角任务栏那里显示正在安装硬件驱动程序,装完会提示你重启,确定之; 6、重启后到设备管理器查看,在IDE ATA/ATAPI控制器项下你会看到“标准串行模式AHCI1.0”,这即说明ahci模式已经打开,但是,还没完; 7、右键那个“标准串行模式AHCI1.0”,选择更新驱动程序,选择“浏览计算机以查找驱动程序软件”,定位到第三步解压后的文件夹,确定,你会看到“正在安装驱动程序”,成功后提示重启,确定之; 8、重启后再到设备管理器查看,在IDE ATA/ATAPI控制器项下你会看到“Intel(R) ICH9M-E/M SATA AHCI Controller”,当然,由于平台不同,前半部也可能显示为ICH7M-E/M或ICH8M-E/M,或是更高的版本,但是后面红色大号字的部分一定要出现,否则即不说明AHCI驱动正确安装。至此,操作完毕。 重点说明一下:目前网上很多集成sata的系统,个人觉得没必要,如果你会正确安装sata驱动,最好还是选用纯净的原版系统,我不看好任何所谓的集成了这个或那个的系统,因为不好的东西也可以集成,还是自己动手要安全得多。 关于打开AHCI模式的方法网上有很多,曾经看到有的教程说在注册表去修改相应项,这或许是可行的,但不熟悉注册表的朋友还是很多的,我不推荐轻易去修改注册表。 本方法适用于945以后的平台,之前的老平台或是并口硬盘就没戏了,好了,祝大家顺利,谢谢

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值