一个月前刚换了新的笔记本,惠普暗影精灵2, i5 6300HQ + Nvidia 960M + Intel 7265 无线网卡。

作为一个长期 Gentoo 用户,当然要自己编译内核了。当年自己编译内核很痛苦,经常遇到 kernel panic ,但现在有经验了,这次只编译一次就成功跑起来了,当然在后续几天使用的过程中逐步完善了全部硬件的完美驱动。下面从头道来。

关闭 Secure Boot

面对新笔记本,第一步是关闭 Secure Boot ,使用 liveDVD 进入系统。新电脑,一定要用最新的 liveDVD (拥有最新的 Linux 内核),这样才能更好地识别硬件,方便后续编译内核。碰巧 Gentoo 官方最近发布了年度 liveDVD 20160704 。当然由于 liveDVD 不能带闭源驱动,所以散热噪音大。

装系统

chroot 进新系统编译内核。自已编译内核有很多好处:

  • 指定 boot 参数 CONFIG_CMDLINE ,在 UEFI 系统上可以直接启动,无需 grub 。

  • 根据自己的硬件定制内核,无需 initrd 。

  • 直接将某些硬件的 firmware 编入内核,有些硬件的 firmware 在初始化后无法再加载。

  • 对于 Intel 的 GPU 来说,尤其是新的,可以开启 CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT ,可能有性能和功耗上的优化。而且可以通过 i915.fastboot=1 使屏幕早早显示内容,不会黑屏。

  • 更加美化:面对高分辨率的屏幕,默认情况下终端的字体小到不能直视了吧?开启 CONFIG_FONT_SUN12x22 获得大字体,以及开机时的企鹅 logo : LOGO_LINUX_CLUT224 。

  • 自己编译,更小的内核,更高的性能,更短的开机时间,更好的硬件支持。比如 HP 的硬盘摔落保护驱动 CONFIG_HP_ACCEL ( windows 下叫 3D DriveGuard ), Intel 的 Rapid Start Technology Driver CONFIG_INTEL_RST ,笔记本的功能键 WMI 等等。

编译驱动是编译内核的很主要的一部分,也是最烦的一部分,面对浩如烟海的各类硬件驱动,该如何找到适合自己硬件的呢?当然编译内核需要一定的软硬件知识以及英语水平,要能读得懂 F2 给出的基本帮助。

编译驱动最重要的有几点

  • 硬盘驱动,没有它就会 kernel panic 。

  • 显卡驱动, Intel 用户的话配置好 i915 集成显卡驱动。

  • 网卡驱动,没有它上不了网。

  • 声卡驱动。

  • 外设驱动。

如何找到它们对应的型号?隆重介绍” lspci -k “。在 liveDVD 上运行它,能列出检测到的驱动和使用的内核模块名称,比如 r8169 (有线网卡)、 iwlwifi (无线网卡)、 rtsx_pci (读卡器)、 snd_hda_intel (声卡)、 ahci (硬盘)、 xhci_hcd ( USB3.0 )、 proc_thermal (温度传感器)等,有了内核模块的名字,再找对应内核配置的名称就快多了。

新系统启动后检查 dmesg 来看哪些硬件有问题,再进行进一步修改。

现在我的 4.6.5 内核大小是 7.2MB , /lib/modules 24MB(其中 16MB 是 Nvidia 闭源驱动),开机时内核3秒钟加载完全部驱动,进入用户空间( /bin/init 开始运行)。

Firmware

新的 Intel GPU 也需要固件了,和功耗控制有关;其它的网卡也要固件, CPU 要 microcode 。这是我用到的固件文件。



1

2

3

4

5

i915/skl_dmc_ver1.bin

i915/skl_guc_ver6.bin

iwlwifi-7265D-21.ucode

rtl_nic/rtl8168h-2.fw

 


功耗控制

在全部硬件完美识别并驱动后,做好功耗控制。 Linux 的功耗控制可以完全不输 Windows 。在最低屏幕亮度下, powertop 给出的待机功耗可低至 9W (在无线网卡开启的情况下), 60Wh 的电池可待机约7小时,实际轻度使用中不到 15W ,可用4小时。正常待机情况下噪音不到 30dB (手机粗略测的),最低待机温度38度(室温30度左右),轻度使用时43度。并且完美配置睡眠(我不太喜欢休眠)。

Nvidia 闭源驱动及双显卡配置

对于笔记本来说,出于散热的考虑,也只能选择闭源驱动了。其实我想买不带独显的4核标压笔记本,但根本没有卖的(极少)。安装 Nvidia 的闭源驱动应该各个发行版都有自己的解决办法, Gentoo 在命令行里直接运行



1

2

emerge nvidia-drivers

 


双显卡配置说明

  • 首先有的笔记本硬件支持“真”双显卡,配置内核 CONFIG_VGA_SWITCHEROO 就行了。

  • 但大部分笔记本不是这样的。 Nvidia 官方也在试图解决这个问题,使用较新的 Nvidia 闭源驱动,配置 Xorg 使用 modesetting 驱动输出(而不是 intel 的 X11 驱动!),结合xrandr --setprovideroutputsource modesetting NVIDIA-0以及配置 mesa 的 OpenGL 库为 Nvidia 的(Gentoo上使用eselect opengl set nvidia实现,其它发行版可能是更改环境变量),就能使整个 X 桌面使用独显。详见http://us.download.nvidia.com/XFree86/Linux-x86_64/367.35/README/randr14.html

  • bumblebee ,我不是很熟。但它很久没有更新了,但它支持对个别应用程序开启独显(而不是全局开启),但是开源驱动下的独显有可能性能还不如集显。

当然啦,最新的 Intel 集显的 mesa 驱动实现了 OpenGL 4.4 ,所以大部分(所有?)的 3D 应用都能打开,基本上 HD530 集显的性能很够用,所以我几乎不用独显。

其它

很多硬件相关的程序会要求内核开启某些特性,使用 git 把内核配置 .config 管理起来很有必要,不断更新不断进步。

简单总结一下:今年六月刚发布的新笔记本,网上没有任何相关的安装 Linux 的教程,使用新一代 CPU 和显卡,没有关系, Linux 内核中的驱动更新很快,这就是开源的力量!只要有经验,将 Linux 在全新的电脑上跑起来完全不是问题!如果没有经验,编译自己的内核来开启全新的体验!最后告诉你一个小秘密:你想变得比 Knuth 更强吗?他不会自己编译内核!

I did once recompile the Linux kernel — but only when a wizard was holding my hand. http://www.ituring.com.cn/article/742