手头的这台 Lenovo IdeaPad Y400 是去年买的,美行,在淘宝上代购的。原因是旧电脑更新换代,原来的那台联想 F41M 实在是太慢了(2G 内存,而且由于主板限制,内存无法扩容)。买之前就决定操作系统要装 Gentoo。

最终的事实证明,买这台电脑是无比糟糕的选择:从买回这台电脑到现在,我至少有一半的时间都在用旧电脑,而新电脑则躺在电脑包里睡大觉,因为根本就没法用。

至于原因嘛,简单地说,是因为 Y400 的 Linux 驱动问题。

 

先说 Y400 的网卡驱动问题。当然,这个问题几个月前已经解决了。现在只是回顾下那段「苦难史」。

Y400 有线网卡型号是 Atheros AR8161/8165 PCI-E Gigabit Ethernet Controller,无线网卡型号是 Intel Centrino Wireless N-2230。前面已经说过,我打算安装 Gentoo。安装过 Gentoo 的朋友都知道,Gentoo 安装起来非常麻烦。而对我来说,最大的麻烦却是一个别人一般都不会遇到的问题:没有相应的网卡(有线网卡和无线网卡)驱动,没法连网。

安装 Gentoo 需要连网来更新 Portage tree,进而编译 kernel 和各种应用程序。而当时 Gentoo 提供的 stage3 的 ISO 安装包,kernel 版本不够新(大概是 kernel 3.8 左右),导致有线网卡和无线网卡都无法工作。其中,有线网卡的驱动 alx.ko 模块,要在 kernel 3.10 以上才有提供。

我当时也尝试过采用基于 Gentoo、但是 kernel 版本经常会更高一些的 SystemRescueCd 来制作 LiveUSB 启动盘,但是最终无果。因为 SystemRescueCd 的 kernel 版本也不够高。

其实,当时如果我换用别的发行版(eg. 当时最新版本的 Ubuntu),是能够绕过这个问题的。但是,因为执意要安装 Gentoo,便一条道走到黑了。

如果我买一个支持 Linux 的 USB 网卡,也有可能解决这个问题的。但是,因为之前买过 Mercury RTL8192CU 的 USB 网卡,结果不支持 Linux……所以,就放弃这种尝试了。

最终是怎么解决这个问题的呢?说来惭愧,我等了几个月,后来 Gentoo 放出了 kernel 版本在 3.10 以上的 stages ISO,我才把 Gentoo 安装成功。

那几个月里,新电脑一直闲置,资源浪费啊。我用旧电脑凑合着。

 

安装上 Gentoo,用了几个月后,又出了大问题。这回是 nVidia 的显卡驱动出了问题。显卡型号是 nVidia GeForce GT 750M。

这也是要非写这篇博客不可的原因:我实在忍无可忍了!且听我娓娓道来。

春节回家前,随手 emerge -uDN --with-bdeps=y world 升级系统,然后发现没有 X 了。service xdm start,提示 xdm 服务可以启动,但是没有了 GUI。

几个相关日志文件,记录的错误信息如下:

kernel: NVRM: RmInitAdapter failed! (0x24:0x38:1129)
kernel: NVRM: rm_init_adapter failed for device bearing minor number 0
kernel: NVRM: nvidia_frontend_open: minor 0, module->open() failed, error -5
(EE)
Fatal server error:
(EE) no screens found(EE)
(EE)
Please consult the The X.Org Foundation support
		 at http://wiki.x.org
 for help.
(EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
(EE)
(EE) Server terminated with error (1). Closing log file.
[   168.894] (EE) NVIDIA(GPU-0): Failed to initialize the NVIDIA GPU at PCI:1:0:0.  Please
[   168.894] (EE) NVIDIA(GPU-0):     check your system's kernel log for additional error
[   168.894] (EE) NVIDIA(GPU-0):     messages and refer to Chapter 8: Common Problems in the
[   168.894] (EE) NVIDIA(GPU-0):     README for additional information.
[   168.894] (EE) NVIDIA(GPU-0): Failed to initialize the NVIDIA graphics device!
[   168.894] (EE) NVIDIA(0): Failing initialization of X screen 0
[   168.894] (II) UnloadModule: "nvidia"
[   168.894] (II) UnloadSubModule: "wfb"
[   168.894] (II) UnloadSubModule: "fb"
[   168.894] (EE) Screen(s) found, but none have a usable configuration.
[   168.894] (EE)
Fatal server error:
[   168.894] (EE) no screens found(EE)
[   168.894] (EE)
Please consult the The X.Org Foundation support
		 at http://wiki.x.org
 for help.
[   168.894] (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
[   168.894] (EE)
[   168.895] (EE) Server terminated with error (1). Closing log file.

 

我尝试过的解决方法:

  • 用不同 kernel 版本 + 不同 nvidia-drivers 版本,各种组合,无果。错误信息也基本相同。
    • linux-3.10.7-gentoo-r1 + nvidia-drivers (331.38, 331.49, 334.21)
    • linux-3.12.13-gentoo + nvidia-drivers (331.49)
  • nouveau 代替 nvidia-drivers,X 可以启动。
    但是效果很渣,分辨率太低,而且似乎不能调整。

2014.05.12 更正:采用了 nouveau 显卡驱动,分辨率是可以修改的。具体可以参考这篇文章:Scientific Linux下设置分辨率

 

各种 Google 之后,我确认这是 nVidia GeForce GT 650M/750M 显卡驱动的 bug,联想 IdeaPad Y400/Y500/Y510P 型号笔记本存在该 bug,也有一些其它品品牌的笔记本存在该 bug。而我还一度以为是显卡坏掉了呢。在 nVidia 的论坛里有关于该 bug 的讨论:12。该 bug 已经存在挺长时间了,至今未修复,nVidia 还真淡定……

由于 bug 是直接出在硬件驱动上的,所以并没有什么好的方法,只能等 nVidia 官方来修复。也有帖子说可以通过降级 kernel 版本(有说 kernel 3.9)来绕过该 bug,但是如果降级 kernel,我怕网卡驱动会再次不能用,所以不打算尝试该方法。

然后,我又想可否禁用 nVidia 显卡,而只用 Intel 的集成显卡呢?Intel 的集成显卡总不会出问题吧。

事与愿违。Y400 系列只可以使用独立显卡,集成显卡不能用。具本可以参考这两个链接:12

 

都是驱动惹的祸。

究其原因嘛,是因为 Y400 硬件太新(当时毕竟号称是顶级配置嘛),而 Linux 对新硬件的驱动支持不够及时(相对于 Windows 而言)。

当然,我并不是说 Linux 社区不努力。

一方面,这与发行版有关(在新的 kernel 已经增加了对某硬件驱动支持的情况下)。Ubuntu 每半年发布一个新版本,新版本往往会采用比较新的 kernel;Arch Linux 作为「激进派」,每次滚动更新,kernel 和各种应用程序都能升级到很新(倒不一定是最新);Gentoo Linux 虽然同样是滚动更新,但是系统更新时,对 kernel 和应用程序的更新就保守很多。个人感觉,新版本 Ubuntu 和 Arch Linux 对于新硬件的驱动支持都比 Gentoo 要好一些。

另一方面,与硬件厂商对于 Linux 驱动的支持有关。硬件厂商能提供开源驱动当然是好事;如果不愿意提供开源驱动、而闭源驱动支持又足够好用的话,作为一个普通的 Linux 用户,我也很乐意接受。毕竟,开源暗含「自由」的意思,如果强迫硬件厂商把驱动开源出来,一定程度上就违背了「自由」的含义。但是我很难接受这样的情形:闭源驱动很差,bug 严重到硬件没法正常使用;同时,又不愿意把驱动开源出来,让开源社区帮助提高……这损害了用户的利益。nVidia 就是这样的典型。

 

启示:

玩 Linux,硬件配置不要太新。因为驱动有可能跟不上。

nVidia 显卡驱动很坑爹:开源驱动效果差,几乎没法用似乎略差(存疑);闭源驱动效果虽好,但是 bug 太多(严重的可能导致显卡直接没法用),修复也很不及时。

7 thoughts on “Y400 Linux 驱动折腾记”
  1. 请问博主的问题解决了吗?我因为显卡驱动问题一直没有去用linux

      1. 请问博主怎么解决的?我也是y400。我安装n卡官方驱动过程一直没有错误,就最后的log基本一样。。麻烦能指点一下吗?

  2. I don’t want to write this with English, but I have not install Pinyin Input programe.
    I want to ask you how to solve GPU QuDong.
    Please….

  3. 你好 我也是小y 我安装ubuntu和linuxmint后 出现异常声音 ”迟迟“声 好像不是硬盘的i声音 我检测也没有坏道 求教

    1. 我这边没有遇到这样的问题哈~
      如果是硬件故障的话,无论装什么 OS、启动什么应用,都应该有问题。
      或者跟声卡驱动有关?

Leave a Reply

Your email address will not be published. Required fields are marked *