cheri_yang 发表于 2017-8-9 14:52

仅支持IDE模式的硬盘及解决方案--无AHCI的老主板的福音【翻译自InsanelyMac论坛】

本帖最后由 cheri_yang 于 2017-8-9 15:39 编辑

【声明:首先,此贴非本人原创,而是本人发在insanelymac论坛上的一个求助贴的回复。由于该回复比较详细的解释了OS X系统支持IDE硬盘的原理和解决方案,我在征得答主同意后翻译并发过来,希望对没有AHCI支持的老旧主板的初级黑果爱好者们能够提供一些帮助,高手/大神请忽略。本人表达能力和英文水平有限,如果有翻译的不对或者不合适的地方,欢迎指正;有能力的同学,请阅读原帖(链接在下面)。
如果此贴有违论坛规则或者有其他不合适的地方,请版主告知后删帖。转载请注明出处。】


感谢Hervé大神
InsanelyMac论坛原帖链接(http://www.insanelymac.com/forum/topic/326015-how-to-load-an-ide-hard-drive-in-os-x/)
【以下为原贴内容翻译】
当你的硬盘工作在AHCI/SATA模式或是IDE/ATA/PATA(legacy)模式下时, 硬盘控制器(HDD controller)会有一个不同的PCI id。这个id可以在windows的设备管理器—— 通过查看磁盘控制器驱动(controller driver)的详细信息 —— 里面得到,也可以通过诸如: CPUz, Aida64之类的查看设备信息的软件(IOreg browsing app)来获取它。
实际上OS X是支持硬盘的ATA/IDE模式的,前提是相关的驱动(kext, intel芯片相关的是AppleIntelPIIXATA.kext)支持这个磁盘控制器。而我们发现, OS X并没有默认支持全部的Intel ICHx磁盘控制器的IDE模式。这就是为什么某些同学的IDE模式的硬盘识别不到 ——要么你得注入必要的信息, 或者给系统驱动(vanilla kext)打补丁.
如ellaosx(论坛上另一位同学)所说, 在你的ATA injector 或 AppleIntelPIIXATA驱动包含了你的磁盘控制器id —— 即: Info.plist文件中包含该id —— 之前, 这些驱动对于IDE模式的硬盘是无效的。现附上最新版Yosemite的AppleIntelPIIXATA.kext下的Info.plist (AppleIntelPIIXATA.kext(版本为v2.5.1), 该kext是S/L/E下面的IOATAFamily.kext(版本为v2.5.3)的一个组件):如果用文本编辑器打开这个文件的话, 你会注意到该文件仅支持个别ICH控制器的ATA/PATA/IDE模式, 如: ICH7/ICH8
<key>ICH8 ATA/100</key><dict><key>CFBundleIdentifier</key><string>com.apple.driver.AppleIntelPIIXATA</string><key>Controller Name</key><string>ICH8 ATA/100</string><key>IOClass</key><string>AppleIntelPIIXATARoot</string><key>IOPCIPrimaryMatch</key><string>0x28508086</string><key>IOProbeScore</key><integer>2000</integer><key>IOProviderClass</key><string>IOPCIDevice</string><key>Supported Transfer Modes</key><string>0x3f061d</string></dict>

磁盘控制器id是IOPCIPrimaryMatch字段下的一个十六进制的数字; 以的形式构成(如, 8086=intel)。在上例中,所支持的ICH8 ATA/IDE控制器的id是2850(十六进制).
而在你上传的ATA injector 或 AppleIntelPIIXATA驱动中并未包含ICH9的ATA控制器, 因此, 如前所述, 在此Info.plist文件下的某个ATA控制器包含你的磁盘控制器之前, 你的硬盘仍然不支持(识别不到).
要添加系统对ICH9芯片的IDE模式的支持, 操作如下(任选其一):
[*]1, 给vanilla kext打补丁, 把磁盘驱动器id添加到Info.plist文件中;
[*]2, 在Injector kext中提前更新你的磁盘驱动器信息;
[*]3, 安装一个提前打好补丁的kext —— 此驱动将优先加载,以覆盖vanilla kext;

注入的数据会看起来像这样:<key>ICH9 ATA/100</key><dict><key>CFBundleIdentifier</key><string>com.apple.driver.AppleIntelPIIXATA</string><key>Controller Name</key><string>ICH9 ATA/100</string><key>IOClass</key><string>AppleIntelPIIXATARoot</string><key>IOPCIPrimaryMatch</key><string>0xYYYY8086</string><key>IOProbeScore</key><integer>2000</integer><key>IOProviderClass</key><string>IOPCIDevice</string><key>Supported Transfer Modes</key><string>0x3f061d</string></dict>
其中, YYYY就是你找到的磁盘控制器id。
(以下只是建议)在类似于Injector kext的工作方式下,该数据同样可以被添加到FakeSMC的Info.plist文件里, 以及需要注入信息的相关kext。但那是较次一级的方式,而且涉及的内容更”高深”一些。。



galaxybabyby 发表于 2017-8-9 18:31

cheri_yang 发表于 2017-8-9 23:37

galaxybabyby 发表于 2017-8-9 18:31 https://www.pcbeta.com/static/image/common/back.gif
不明觉厉啊。。。。。楼主

呵呵。。其实这个对大多数人来说可能用不上,现在主流的主板芯片早都支持AHCI/IDE模式的SATA硬盘了,只有特别老的主板不支持AHCI,只支持IDE。。然而,如此贴所说,os x的默认驱动对于IDE的支持并不完整。因此,当我的主板恰好是ICH9芯片(比较老,而且还不支持AHCI)的时候,就会遇到识别不到硬盘的情况。而这个贴就是为了解决这种问题的
页: [1]
查看完整版本: 仅支持IDE模式的硬盘及解决方案--无AHCI的老主板的福音【翻译自InsanelyMac论坛】