GRUB2是由VBE提供的模式信息来显示的。在GRUB2命令模式下,使用vbeinfo可以查看VBE所支持的所有显示模式,一般都是4:3显示比例。
而在intel显卡驱动还不成熟的时候,有一款915resolution的工具,可以调整分辨率,使得X工作在宽屏模式下,现在基本上不需要用了。915resolution的工作原理就是将VBE里的某些不常用的显示模式替换成我们想要的宽屏模式。例如,我的intel 965芯片,以915resolution -l查看,
Mode 30 : 640×480, 8 bits/pixel
Mode 32 : 800×600, 8 bits/pixel
Mode 34 : 1024×768, 8 bits/pixel
…
其中的640×480等模式根本用不到,可以用915resolution将它们修改为1280×800等模式。这种修改只是在内存中进行,重启后一切回复。所以每次启动X前都需要执行。当然现在基本不需要这个工具了。
于是有人就把915resolution的功能移植进了GRUB2,作为一个模块,在内核尚未启动前,修改VBE信息,提供宽屏显示模式。今天试验了一把,下载了patch, 打到GRUB2源码,重编译安装GRUB2。重启进入GRUB2命令模式, insmod 915resolution没有问题。但是915resolution 38 1280 800就会报错,无法识别显示芯片。后来发现这个patch里识别芯片的函数里没有包含比较新的芯片型号。而Debian/Ubuntu源里的915resolution打过补丁,支持这些型号,把debian的patch移植到GRUB2里的915resolution,重新编译安装,一切正常。配置好后就支持宽屏分辨率了。
还有人更进一步,直接修改了VBE BIOS里的信息。具体做法在这里。原理是把bios信息用工具从内存中dump出来,比较915resolution修改前后的区别,然后修改二进制的bios,最后刷进主板。这种方法不太安全。
