Nvidia不支持KMS已经令人诟病很长时间了,可不支持就是不支持。我们只能通过各种方式,来获得一个在没有KMS情况下完美/半完美的分辨率。有些幸运的人,在通过添加内核参数vga=791/792,就成功让自己的1024×768显示器配合VESA使用最佳分辨率了。而有些Nvidia的显卡BIOS还不太一样,有的在最差的状态下只支持800×600。这样的80×24终端除了复古,没人想要吧。
好在Gentoo的一些牛人,开发了一个vesafb的替代品——uvesafb,已经进入了主线内核,利用它也许就可以令那纠结的Nvidia分辨率稍微改善或彻底解决。由于比尔盖子用的就是Gentoo,而uvesafb的开发者也用Gentoo,再加上Gentoo编译内核很方便,所以就以Gentoo为例了,Ubuntu等请另找教程——比Gentoo省事多了。
安装必要的软件包
首先,需要安装或重新安装两个包,需要下载约70MiB的数据,3G用户需要注意了:
emerge -av klibc v86d
配置内核
然后就可以配置内核了,来到你内核源码的所在地,比如Gentoo是/usr/src/linux,开始配置内核。
Device Drivers --->
<*> Connector - unified userspace <-> kernelspace linker --->
Graphics support --->
<*> Support for frame buffer devices --->
[*] Enable firmware EDID
<*> Userspace VESA VGA graphics support
这样你就具有初步的使用uvesafb的能力了,不过还没完。
安装v86d的时候,v86d会自动保存一份initrd文件到/usr/share/v86d/initramfs,这份initrd是用来支持uvesafb的关键程序。我们还需要把它加入进内核。
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
#这里的路径要填对啊
(/usr/share/v86d/initramfs) Initramfs source file(s)
# 压缩算法。可以不选(None),但建议与你在 Kernel compression mode 中的选项一致。
Built-in initramfs compression mode (XZ) --->
这里要特别说明一下,很多Gentoo用户都不喜欢initrd,因为开机必要的东西都已放在内核中,完全不需要额外加载一个initramfs,我也是这种人中的其中一个。但实际上,上面的操作是将一个initrd文件编译进内核——没错,嵌入内核。所以完全不会多出initrd文件,各位用户请放心。
另外我说Built-in initramfs compression mode建议和Kernel compression mode中的选项一致。但并非必须如此。这么做是为了让你initrd文件的压缩算法的内核统一化。当然,如果你不在乎,不压缩或使用不同的压缩算法也是可疑的。
编译内核
好了,现在就编译安装内核吧。这些对你可能是废话。
make -j3
mount /boot 2> /dev/null
make modules_install install
修改引导参数
编辑你的引导配置文件:
# 对于 Grub Legacy,请修改您的引导配置文件,指向新内核
vim /boot/grub/menu.lst
# 对于 Grub2,请修改并重新生成一份引导配置文件
vim /enc/default/grub
grub-mkconfig -o /boot/grub/grub.cfg
# 对于Funtoo,请修改并重新生成一份引导配置
vim /etc/boot.conf
boot-update
那到底编辑什么呢?首先,要把内核参数中的vga=xxx去掉,这会阻止uvesafb的运行。第二,就是增加uvesafb的参数。比如比尔盖子添加的是:
video=uvesafb:1440x900-32,mtrr:3,ywrap
一般的,你只需把1440×900换成你的最佳分辨率即可。
搞定
接着,重启你的电脑,如果配置一切顺利,你将会得到两种结果:
- 终端机已是最佳分辨率。
Good luck! 看来你的显卡BIOS还是很有良心的,已经把你显示器的最佳分辨率硬编码了。 - 终端机的分辨率略有提高,但仍不是最佳分辨率。
你怎么和比尔盖子一样啊……这说明你的显卡BIOS并没有写入你显示器所用的分辨率。所以uvesafb就找了个最贴近你指定的分辨率,比如比尔盖子指定的1440×900变成了1280×768——反正提高不少了,别扭归别扭,反正比800×600好多啦!
发表评论