简而言之,我想为一些 Jetway 工程师和我自己弄清楚为什么他们为我制作的自定义 BIOS 不允许 SATA 设备在 AHCI 模式下启动。
显然,考虑到它是一个*自定义 bios,这个问题很难问,但希望我能够提供足够的细节,以便有人可以提供一些想法,因为我已经用完了。
该主板是 Jetway NF98。原始 BIOS 顶部写着 American Megatrends。我了解到他们只提供源代码进行编译(?或者可能只是一个徽标?),但 Jetway 才是配置和生成实际 BIOS 的人。所以我联系了 Jetway,他们提供了令人难以置信的帮助。我告诉他们我的目标,他们立即行动并发送了一个自定义 BIOS。
目标很简单,就是让我配置 BIOS,拒绝从通过 SATA 端口 0 连接的磁盘以外的任何其他介质启动。他们提供的功能几乎完全符合要求,只是不可配置,只是设置为不允许从 SATA 端口 0 以外的任何设备启动。
因此,我插入运行 Crux Linux 发行版的自定义版本的 SATA 磁盘,并且 BIOS 报告请连接磁盘,好像它看不到任何磁盘(即使浏览 BIOS 设置会显示磁盘连接到端口 0)。
经过一些调试后,我将 SATA 模式从 AHCI 更改为 IDE。这样可以看到磁盘,但启动仍然失败。这次它走得更远了一点,在寻找 root / 时失败了。
首先,我有相当多的调试 Linux 启动的经验。此外,我有一个与该系统完全相同的副本(硬件和软件方面),使用的是 NF98 附带的标准 BIOS。因此,我可以取出磁盘,在标准 BIOS 中启动它,一切都会成功。当我将其放入自定义 BIOS 中时,没有成功。
经过进一步的调试,我认为我知道的是:
-使用 SATA 模式作为 IDE
--Linux(crux)启动直到寻找root
--Vista 启动成功
使用 SATA 模式作为 AHCI
--Linux(crux)无法成功启动(更多,启动过程没有启动)
--Vista 无法成功启动(更多,启动过程无法启动)
Crux OS 上的自定义内核略显过时,并使用 initramfs(也是自定义的)。Jetway 工程师建议升级内核,我认为这很合理,但这没有帮助。
然后我想我可以试试 Arch Linux,但它在 IDE 模式下也失败了,在 AHCI 中也看不到。这是一个 3.0-ARCH 内核。
接下来,也是最后,我再次安装了 arch,但这次是安装到单个分区并使用 dev,而不是 UUID 或 LABEL。在 AHCI 模式下,仍然看不到它。在 IDE 模式下,传输到 root 仍然失败。
但是,当我选择 Arch 的后备启动菜单选项,并且 SATA 模式为 IDE 时,我半成功启动;也就是说,我得到了登录提示,但启动过程中出现了相当多的错误。我目前正在寻找导致差异的原因。
抱歉,我的文字太长了。有谁知道为什么或者我应该去哪里查找,以帮助找出为什么带有 SATA 模式 AHCI 的自定义 BIOS 无法启动?
答案1
可能是 AHCI 模式与 American Megatrends BIOS 配合得不太好。我在使用 Gigabyte GA-J1800N-D2H 时也遇到了类似的问题,它看起来像一块类似的主板,但配备了 Intel J1800 SoC。我从可靠的 CD-ROM 安装了 Linux Mint 17.2 和 xfce 32 位。安装完成后,它重新启动,但卡在 shell 中,并显示一条消息“ModemManager ... 无法获取 org.freedesktop.ModemManager1”。在尝试从 HDD 重新启动几次时,我大多数时候都会进入“(initramfs)”或卡在消息“ata1.00:失败命令:READ FPDMA”上。我擦除 HDD 后重试安装,但这没有任何区别。
在听取了几个建议后,我尝试在 BIOS 中将 SATA 模式从 AHCI 更改为 IDE,机器可以正常启动和关闭。我来回检查了几次以确保无误。安装是在 AHCI 模式下进行的,但只能在 IDE 模式下启动和关闭。
BIOS 的详细信息如下:
ID:8A05AG03 项目名称:J1800N-D2H 版本:F4 构建时间:2014/04/29 15:00:08
主板在 IDE 模式下的响应速度还算可以接受。
答案2
有一些值得考虑的事情可能会对遇到这种情况的人有所帮助。
当 BIOS 处于 UEFI(仅)模式时,BIOS/UEFI 中无法检测到磁盘: UEFI BIOS 只能看到 GPT 分区磁盘。如果您看不到磁盘,则可能是旧的 MBR 分区磁盘。尝试在 BIOS 中选择传统模式来检测 MBR 磁盘,使用分区工具将磁盘模式更改为 GPT,或完全清除磁盘(删除所有分区,清除 MBR)。
当 BIOS 处于 AHCI 模式时,操作系统无法启动,但当 BIOS 处于 IDE 模式时,操作系统可以启动:切换 AHCI/IDE 后,您的操作系统可能未安装 AHCI 或 IDE 驱动程序。例如,在 Windows 7 中,安装时的模式决定了所安装驱动程序的类型。您可以使用以下方式设置
HKLM/System/CurrentControlSet/Services/msahci/Start=0
和HKLM/System/CurrentControlSet/Services/pciide/Start=0
注册表项注册表编辑器。每当您切换 AHCI/IDE BIOS 模式时,它都会重新安装正确的驱动程序。
答案3
Windows(可能还有其他操作系统)不会为 AHCI 模式安装 SATA 驱动程序,除非它在启动时处于活动状态。
要在 Windows 中解决此问题:-
以 IDE(传统)模式启动
- 运行注册表编辑器 (regedit.exe)
- 导航到注册表项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci
- 将“开始”值设置为 0(零)
- 导航到注册表项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Pciide
- 将“开始”值设置为 0(零)
- 关闭
- 重新启动,但在 Windows 启动之前进入 BIOS 配置
屏幕并将磁盘模式更改为“AHCI”。保存新的 BIOS 配置并重新启动,以便 Windows 启动。Windows 启动时,它将检测到更改,加载新的磁盘驱动程序,并再次重新启动以启动它们。
我确信您的系统上的 Linux 操作系统也会有类似的过程。