今天,总算是把 Gentoo 下困扰我 N 久的一个问题给解决了,把经历分享下,以便与我同命相连的人 google 到这篇日志。

主要症状是这样的: 使用华硕 K8N4-E/Deluxe 主板的,无论是使用 Gentoo LiveCD 06/07 版还是自编译内核 (>2.6.13) 启动,都无法识别到 SATA 硬盘设备,必须采用降级内核的方式或者使用 Gentoo LiveCD 2005 才能正常识别,而在 Ubuntu/Fedora Core (2.6.2 系列 kernel) 下却没有这个问题。只要是大于 2.6.13 的内核无论是 gentoo-sources, genkernel, vanilla-sources, mm-sources, sabayon-sources 甚至 Ubuntu 和 Fedora 的 kernel 都没用。我曾经在论坛里 发过帖子 询问,当时没太在意,以为降级内核到 2.6.13 就算解决了,但是随便 kernel 的不断更新,问题越来越多了,udev 不能用最新的,与之而来的就是 hal 不能自动挂载移动储存设备,nvidia 驱动不能用 100 系列版本,否则退出 X 会花屏,xorg-x11 不能用 7.3,因为没有 100 系列的 nvidia 驱动配合,这么多问题差点让我被迫转投 ubuntu 了,还好最终还是选择向 Gentoo Community 寻求帮助。 我在 open a new thread 之前就发现论坛里用同样一块主板的朋友都遇到了这个问题:

  1. SATA drives not recognized on kernel > 2.6.11
  2. Problem finding my SATA-drives
  3. kernel panic (solved)
  4. What does “VFS: Cannot open root device…” mean, exactly?

加上后面两个我之前发布的贴子/回复,搜集好所有信息后,我发了个新的帖子:

Kernels(>2.6.13) dont recognize sata disk on K8N4-E [solved]

并给当时发表/回复那些帖子的人发了封 private message,也得到了这些人的热心帮助,但是始终没能解决问题。于是我去 Gentoo Mailing List 上发邮件,也没能得到解决的办法,最终选择了向 Gentoo 的 Bugzilla 提交 bug,直接询问 Gentoo Developers。

Bugzilla Bug 194531 : Kernels (>2.6.13) dont recognize the sata harddisk on ASUS K8N4-E motherboard

在这里得到了解决方案,关闭 MMCONFIG PCI Access Mode 可以成功识别到 SATA 设备,正如其中一个 developer 说的: Nforce motherboards don’t have the best history with the linux kernel。关闭 MMCONFIG 有两种方式,一是设置内核:

取消自动选择模式和 MMCONFIG 模式,选择 BIOS 或者 DIRECT 方式

CONFIG_PCI=y
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GOMMCONFIG is not set 
CONFIG_PCI_GODIRECT=y
# CONFIG_PCI_GOANY is not set

二是在 grub.conf 的 kernel 行末尾添加 pci=nommconf 参数来关闭它。

同样,使用 Gentoo LiveCD 的话,可以在启动时加入启动参数_nommconf_来顺利引导 LiveCD 读取 SATA 硬盘。问题是解决了,不过查看下 ubuntu 和 fedora 的 kernel config 文件,并没有关闭 MMCONFIG 模式,难道还是 Gentoo 的问题?

在 Developers 的帮助下,进入 Kubuntu/Fedora LiveCD,cat /proc/iomem 发现其中没有那句 f0000000-f3ffffff : PCI MMCONFIG 0,意味着 Ubuntu 和 Fedora 把 MMCONFIG 给 blacklist 了。哪位使用 Ubuntu 或者 Fedora 的朋友麻烦把 cat /proc/iomem 的结果贴出来给我看下,我想知道是 Ubuntu/Fedora 直接 blacklist 了 MMCONFIG 还是在硬件检测时根据我的硬件关闭了 MMCONFIG。

这样,整个症结就落在了 MMCONFIG 上,排除了 Gentoo 本身的因素。

Gentoo 之所以受青睐的原因不仅是它的高度可定制性和 portage 的包管理方式,还有它背后强大的社区支持。Gentoo 的官方论坛 是目前最活跃的 linux 论坛之一了,里面集结了来自全世界各地的顶尖 linux 高手和 geek,无论是帖子还是回复都是高质量的,即便是不用 Gentoo Linux 的朋友在里面都能找到很多有价值的东西。而 Bugzilla 作为 forum 的补充,提供了与开发人员直接的交流平台,你可以得到最专业的帮助。

I <3 Gentoo and its Community !