折腾Nvidia分辨率,启用uvesafb

Nvidia不支持KMS已经令人诟病很长时间了,可不支持就是不支持。我们只能通过各种方式,来获得一个在没有KMS情况下完美/半完美的分辨率。有些幸运的人,在通过添加内核参数vga=791/792,就成功让自己的1024x768显示器配合VESA使用最佳分辨率了。而有些Nvidia的显卡BIOS还不太一样,有的在最差的状态下只支持800x600。这样的80x24终端除了复古,没人想要吧。

好在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
一般的,你只需把1440x900换成你的最佳分辨率即可。

搞定

接着,重启你的电脑,如果配置一切顺利,你将会得到两种结果:
  • 终端机已是最佳分辨率。 Good luck! 看来你的显卡BIOS还是很有良心的,已经把你显示器的最佳分辨率硬编码了。
  •  终端机的分辨率略有提高,但仍不是最佳分辨率。 你怎么和比尔盖子一样啊……这说明你的显卡BIOS并没有写入你显示器所用的分辨率。所以uvesafb就找了个最贴近你指定的分辨率,比如比尔盖子指定的1440x900变成了1280x768——反正提高不少了,别扭归别扭,反正比800x600好多啦!


文章来源:http://biergaizi.info/archives/2012/07/1440.html

你可能感兴趣的:(折腾Nvidia分辨率,启用uvesafb)