- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经编写一个小型 AHCI 驱动程序两周了。我已阅读this article和 Intel's Serial ATA Advanced Host Controller Interface (AHCI) 1.3.有一个示例,展示了如何通过 DMA 模式读取扇区 (osdev.org)。我已成功完成此操作 (ATA_CMD_READ_DMA 0xC8),但是当我尝试将扇区 (ATA_CMD_WRITE_DMA 0xCA) 写入设备时,HBA 设置了错误
Offset 30h: PxSERR – Port x Serial ATA Error - Handshake Error
(这是根据 Intel AHCI 规范进行的解码)。我不明白为什么会这样。请帮助我。
此外,我尝试发出命令IDENTIFY 0xEC,但没有成功...
最佳答案
您在大约两个月前提出了这个问题,所以我不确定您是否已经弄清楚了。请注意,我是根据必须先做什么等内容凭内存写的。我可能没有记住全部或准确地记住必须做什么。您应该引用 AHCI 规范的所有内容。执行此操作的方法因执行此操作的程序员而异。因此,我不包含代码示例。
对于初学者,请确保您已相应地设置 HBA 状态机。您将能够在同一 SATA 规范 1.3 中找到 HBA 支持的状态机的引用。相反,您应该检查一些寄存器。
请注意,所有页码都是在 Adobe Acrobat 中查看时给出的,比实际文档中的页码多 8 页
从规范的第 24 页和第 25 页,检查 GHC.IE 和 GHC.AE。这两个将打开中断并确保HBA工作在AHCI模式。另一个需要检查的非常重要的寄存器是 CAP.SSS(第 23 页)。如果该位为高电平,则 HBA 支持交错旋转。这意味着HBA不会对任何端口执行任何协议(protocol)协商。在执行以下操作之前,请存储 PxSIG 的值(第 35 和 36 页)。
要实际启动端口,您需要访问规范的第 33、34 和 35 页。这些页面涵盖 PxCMD 寄存器。对于 HBA 支持的每个端口(检查 CAP.NP 以了解有多少个端口),您必须切换高位 PxCMD.SUD。将该位切换为高电平后,您需要轮询 PxSSTS(第 36 页)以检查 PHY 的状态。您可以检查 CAP.ISS 以了解您可以在 PxSSTS 上看到“活跃”的速度。
启动端口后,检查 PxSIG(第 35 和 36 页)。该值应该与开始时不同。我现在不记得你会期望他们变成什么样子,但他们会有所不同。当实际建立通信时,设备向主机发送初始 FIS。如果没有第一个 FIS,HBA 将无法与设备通信。 (正是通过第一个 FIS,HBA 在 PxSIG 中设置了正确的位。)
最后,完成所有这些之后,您需要设置 PxCMD.FRE(第 34 页)。端口命令寄存器中的该位启用 FIS 向设备的传送。如果该位为低电平,HBA 将忽略您发送给它的任何内容。
正如我在一开始所说的,我不确定这是否能回答您的所有问题,但我希望它确实能让您走上正轨。我将凭内存记述为了有效地与 SATA 设备通信而必须完成的事件。我可能记不太清楚了。
希望这对您有帮助。
关于drivers - 适用于自己操作系统的 AHCI 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11739979/
我正在尝试获取此亚马逊页面中列出的每台笔记本电脑的图像 URL ( https://www.amazon.com/s?rh=n%3A565108%2Cp_72%3A4-&pf_rd_i=565108&
我正在设置 Atlassian Confluence,在选择数据库时,我在选择“使用外部 Mysql 数据库”时卡住了我看过一些教程,但对我来说,它并没有按照应有的方式工作。我使用 ubuntu 12
我是 Neo4J 的新手,正在尝试通过 java 连接到 Neo4J 服务器。 我的一个独立项目的pom入口如下: org.neo4j neo4j-o
所有这些有什么区别和用途? spark.local.ip spark.driver.host spark.driver.bind地址 spark.driver.hostname 如何将机器修复为 Sp
我在旧的 Inspiron 6400 计算机(GeForce 7300 笔记本电脑版)上安装了 Lubuntu 19.04,通过网络草稿编辑器教我儿子 Scratch。每次我通过 Firefox 打开
我使用 qt 开发了一个 c++ 库。在本文中,我使用 QSqlDatabase 从 SQLite 数据库中查询信息。注意:我的库在 qt 桌面应用程序中运行良好(我在 Linux 上开发)。 现在我
存在类似的问题,但没有帮助。 在 Apache 2.4 上安装 php5-fpm 通过 SSL 连接到远程 MySql 数据库。 可以通过命令行连接MySQL mysql -u myname -p'p
使用以下配置 (doctrine.yaml) 在 Symfony 4 中使用 Doctrine DBAL: dbal: # configure these for your database
使用以下配置 (doctrine.yaml) 在 Symfony 4 中使用 Doctrine DBAL: dbal: # configure these for your database
我有一个用 Java 编写的 Selenium Web 驱动程序测试,目标是 Liferay 站点。 // Login driver.get(baseUrl + "/"); driver.findEl
在driver.findElements()中,我们获得了另一个用于查找size()的函数,该函数在driver.findElement()中不可用。 这是唯一的区别吗? 最佳答案 driver.fi
这个问题已经有答案了: java.lang.IllegalStateException: The driver executable does not exist: while trying to e
简短描述:我有一个通过 SignTool 验证的签名驱动程序,但 Windows 拒绝加载它并出现错误:CodeIntegrity 3004 - 在系统上找不到文件哈希。我该如何解决这个问题? 详细说
我正在设置一些 Geb 测试,但出现“geb.driver.DriverCreationException:无法从回调创建驱动程序”错误。 Geb 将尝试启动测试浏览器窗口,但一旦启动,我的所有测试都
我想通过应用对象存储库概念在 Chrome 驱动程序中打开 url。下面给出的是我的 selenium 程序,其中包含两个文件,一个是 testng 文件,另一个是 config.property 文
我在 Ubuntu Linux、Spring Tools 2.7.1、Spring Roo 1.1.5 上运行 Eclipse Indigo。我正在阅读 Getting Started with Ro
打开 Url 的首选方法是什么(它们之间是否存在任何差异): driver.Url = "http://example.com"; 或 driver.Navigate().GoToUrl("http:
我使用 python 脚本传递给 cassandra 批处理查询,如下所示: query = 'BEGIN BATCH ' + 'insert into ... ; insert into ... ;
我在 Protractor 中执行脚本时出现以下错误。 System info: host: '8888', ip: '88888', os.name: 'Mac OS X', os.arch: 'x
我收到错误 KeyError:'driver'。 我想使用scrapy-selenium 创建一个网络爬虫。我的代码如下所示: class TestSpider(Spider): name="test
我是一名优秀的程序员,十分优秀!