无忧启动论坛

标题: 测试外部命令 ahci(初步工作,仅仅用于测试) [打印本页]

作者: 不点    时间: 2015-9-4 19:02
标题: 测试外部命令 ahci(初步工作,仅仅用于测试)
本帖最后由 不点 于 2015-9-13 23:48 编辑

编写这条外部命令的目的是为将来开发 ahci 硬盘驱动而作准备的。目前只是初步工作。大家闲来无事的时候,可以顺便测试一下。

测试的步骤如下(请严格按顺序执行以下测试步骤):

1、首先将 ahci 这个程序文件放在内存中,方法(举例)如下:
      map   (hd0,4)/ahci   (rd)
为什么要把 ahci 这个程序文件放在内存中呢?这是因为,一旦执行了 ahci 命令,那么硬盘就可能无法访问了,因此也就无法进行后续的测试了。放在内存中的好处就是,无需访问硬盘,而直接执行内存中的 ahci 程序。

2、刚才那条 map 命令已经把 ahci 放在内存了,因此,这时,(rd)+1 的内容就是 ahci 这个程序文件的内容。好了,现在执行以下命令:
      (rd)+1   --init
注意,执行完了 (rd)+1   --init 之后,就不要以任何方式再去碰你的硬盘了,一旦访问硬盘,机器就可能要处于假死状态。比如,不可以用 ls 命令,也不可以用 geometry 命令,以及 root、find 等等,这些命令都不要使用了。如果此时(在 --init 之后)已经死机,说明测试是失败的,请报告失败的机器信息(无需执行后续的测试步骤了)。

3、如果一切正常(即没有死机),现在请执行
      (rd)+1   --test
这条命令会把硬盘 MBR 扇区读到内存 0x60000 处。这条命令有可能导致死机。如果死机,请结束测试,报告机器详情。

4、如果没有死机,现在请执行
      cat   --hex   (md)0x300+1
这条命令会显示出你的硬盘 MBR 扇区内容。它实际上只是显示内存 0x60000 处的内容。如果上一条命令能够成功读取硬盘 MBR 扇区,那么此时所显示的也就是 MBR 的内容。如果没能显示出硬盘 MBR 的内容,请报告机器详情。

5、现在请执行
      (rd)+1   --stop
这条命令的目的是卸载 ahci 的环境,并尝试恢复原先的 BIOS 环境。如果死机,请结束测试,报告机器详情。

6、如果坚持到现在还没死机,请执行 ls、root、geometry、find 等命令,看看这些命令能否访问你的本地硬盘。如果没有问题,则表示本次测试完全成功。请结束测试,报告机器品牌和型号。如果在访问硬盘时死机,请结束测试,报告机器详情。



ahci.zip

23.6 KB, 下载次数: 20, 下载积分: 无忧币 -2

外部命令,含源代码。仅供测试之用。

ahci.zip

23.99 KB, 下载次数: 11, 下载积分: 无忧币 -2

更新:有少量改进,有兴趣者可以试试。

ahci.c.gz

20.23 KB, 下载次数: 3, 下载积分: 无忧币 -2

这个源代码是用来学习 asm + C 混合编程的(注意:它不是硬盘驱动)。


作者: q8155128    时间: 2015-9-4 19:21
本帖最后由 q8155128 于 2015-9-4 21:00 编辑

不点大师,俺等哈试试。。。

测试好后,给大师汇报。。。


图来了。。。。

嘿嘿。。。大师又有的忙了啊。。

















第6步忘记测试了,再去试试。。。
大师等等哈。。
作者: 土著007    时间: 2015-9-4 20:29
本帖最后由 土著007 于 2015-9-4 21:50 编辑


到第三步就死了,拍了特写给大师瞧瞧





Acer的笔记本,换0.4.5测试也是这个结果



作者: wylgogogo    时间: 2015-9-4 20:58
      硬件配置都不写的吗。
作者: 不点    时间: 2015-9-4 20:58
我注意到你是用 0.4.6 来测试的。不知换用 0.4.5 会不会成功?

另外,机器品牌是什么? implemented ports=5, 比较多(我的机器只有 1)。

准备再编译一个调试版,看看死机原因是啥。


作者: 2011yaya2007777    时间: 2015-9-4 21:14
没有完全退出。执行 geometry 死机。
(rd)+1 --stop
Try to restore BIOS handoff. BH=0
Try to force BIOS ownership. BH=0
BIOS could not take ownership. Try yo reset HBA. BH=0
reset hba ...
GLC:0
GLC:2

作者: q8155128    时间: 2015-9-4 21:35
本帖最后由 q8155128 于 2015-9-4 21:38 编辑

不点大师。。
俺的命令打字错了??

刚刚俺对比了一下,没发现打字错误啊。。。



发现了。。。。。

是第2步  init前面少了2个--

俺再测试一下吧。。。不好意思哈。。。
作者: q8155128    时间: 2015-9-4 22:20
本帖最后由 q8155128 于 2015-9-4 22:23 编辑

不点大师,俺又测试了一次。。。

不好意思耽误大师很多宝贵的时间。。。

下面是图。。。

应该没有命令打字错误了,要是还有,俺就去自杀算了。。。























find命令启动WIN764成功。。。。。
作者: 不点    时间: 2015-9-4 23:22
q 兄的硬盘,好像不是 ahci 接口的硬盘。所以,ahci 的驱动不能成功。也因为驱动不成功,所以 BIOS 没有受到破坏,因此整个过程都能够以 BIOS 的方式访问硬盘。

--init 的时候,最后显示“不能检测到 AHCI 设备”。这说明是失败的。

ports implemented=ff=255,比 ports=0x20 还多,好像不正确。这可能说明了,硬盘不是 ahci 规格的。


当然,也有可能是我的程序有毛病。这是从 grub2 移植过来的程序,其可靠性还需要验证。


作者: q8155128    时间: 2015-9-5 00:43
本帖最后由 q8155128 于 2015-9-5 13:23 编辑

。。。。俺测试的时候是没有调动主板硬盘工作模式,主板一直是ahci模式。。。硬盘是SATA接口的。。。

俺的硬盘是160G的。。。会不会是太老了???    在SATA模式下工作,但是没在ahci模式下???

附主板图:

删除了。。。。


系统和软件图:







我看了2楼的,设备管理器里面有AHCI字样。。。。

大师看了图后,有什么问题没有??

顺便问下大师还有哪些地方可以判断出系统里面硬盘开启AHCI模式啦???





作者: 不点    时间: 2015-9-5 01:35
q 兄的机器确实是 ahci 的。可能是我引进并修改的程序有毛病。程序是从 grub2 移植的,它在我的机器上有毛病,我好不容易把他改好了,在我的机器上已经正常了。没想到在大家的机器上验证,却遇到各种失败。

我得出粗略的结论:grub2 里面的 ahci 硬盘驱动还很不完善。假如要等待它完善起来以便能够应付大多数情况,那恐怕是猴年马月、遥遥无期。

暂时先告一段落,朋友们。

好在这个驱动能够在我的机器上成功,在 yaya 的机器上也基本是成功的。那么接下来,我尝试把它改造成一个放在扩展内存的 int13 处理程序,这个实践的过程,或许能够对 yaya 的 USB 驱动的改进与完善有所帮助。


作者: xirch    时间: 2015-9-5 02:01
q8155128 发表于 2015-9-5 00:43
。。。。俺测试的时候是没有调动主板硬盘工作模式,主板一直是ahci模式。。。硬盘是SATA接口的。。。

俺 ...

硬盘必须要有NCQ(Native Command Queuing )的功能才能支持AHCI!
作者: 邪恶海盗    时间: 2015-9-5 10:28
**啊,又捣鼓新玩意了...
作者: q8155128    时间: 2015-9-5 10:57
不点 发表于 2015-9-5 01:35
q 兄的机器确实是 ahci 的。可能是我引进并修改的程序有毛病。程序是从 grub2 移植的,它在我的机器上有毛 ...

非常感谢不点大师。。。我以前一直觉得硬盘是肯定是SATA的AHCI模式的,因为从大文件复制速度方面可以看出来,文件复制速度最小50M以上,一般平均80M左右,最大100多M都有。。。现在不自信了,所以想问问大师,耽误大师的宝贵时间帮俺看看。。。大师忙哈,俺不打扰大师了哈。。。
作者: smine    时间: 2015-9-5 11:24
(rd)+1   --stop 后没有死机,但是之后执行root、find死机:

电脑型号:华硕A43S
硬件信息:


测试的G4D版本:0.4.5c  0.4.6a 两个版本测试结果一样。


0.4.5c  测试




0.4.6a测试






作者: 不点    时间: 2015-9-5 11:50
本帖最后由 不点 于 2015-9-5 12:17 编辑

smine 的测试结果,与 yaya 的结果一样,都是成功驱动 ahci 硬盘,而最后无法卸载 ahci 造成的污染,使得后来在执行 BIOS int13 时死机。

保证驱动成功,就已经很难了,因此,不再奢望能够干净卸载 ahci 驱动所造成的污染。

看来我太幸运了,是几年前买的 lenovo ideapad S205 上网本。不知其他型号的联想电脑是否也能成功去除 ahci 的污染?


我知道 Intel 的 AHCI 规范里面,就故意禁止由 ahci 模式返回到 BIOS 模式。这是明文禁止(参看 Intel achi 的 pdf 文档):一旦进入 ahci 模式,必须重启才能进入 BIOS 模式。所以,我们也不可能在不重启的情况下回到正常的 BIOS 环境。至于说联想电脑的特殊情况,可能是个例外(或许联想在个别型号上没有遵守 Intel 的规定)。

我想明白了另外一个问题:我不懂硬件编程,这些驱动究竟要怎么去修改,那不是我力所能及的事情。那是别人的事情。我现在只做一项工作即可:把驱动成功放在扩展内存顶部,让实模式的 int13 处理程序能够调用即可。至于说驱动本身的修改完善,那是别人的事情了。


作者: qqbab    时间: 2015-9-5 15:55
smine 发表于 2015-9-5 11:24
(rd)+1   --stop 后没有死机,但是之后执行root、find死机:

电脑型号:华硕A43S

+1
h77主板,i5 ,gtx660

作者: q8155128    时间: 2015-9-5 16:20
qqbab 发表于 2015-9-5 15:55
+1
h77主板,i5 ,gtx660

你的和他的一样?
作者: qqbab    时间: 2015-9-5 16:26
q8155128 发表于 2015-9-5 16:20
你的和他的一样?

是,stop之前都正常
find等就死机了。




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3