让上网本的Linux跑上1024x600分辨率

 

Linux确实是非常优秀的操作系统,不管安装在哪种硬件平台上都能让人玩得得心应手。所以抱回MSI Wind U100之后的头等要务就是装上Gentoo Linux,折腾许久终于让它们结合为一体,可以无线上网、可以挂载BT、电驴。但一段时间后却明显地感觉到不爽。一方面U100使用1024x600的分辨率,一方面Gentoo945GME驱动不支持这个分辨率,使得U100只能在800x600的分辨率下显示控制台,结果所有的字符都被拉宽了一点,看上去很别扭。平时不直接在小本上写程序,也就没怎么想去解决它,这几天休假没事做,花了半个晚上来折腾这个本本,终于搞定。现在看着使用正常分辨率的控制台,眼睛那叫一个爽,赶紧把解决的过程和方法记录下来以备参考。

问题的根源在于LCD显示屏工作在非标准分辨率上,不被显卡驱动支持。如果能让驱动支持非标准分辨率,那么问题将迎刃而解。用Google翻了翻半个地球,发现有个叫“915resolution”的软件提供让驱动支持非标准分辨率的办法,原理是动态地修改显卡芯片的Video BIOS。为达到这个效果,还需要将uvesafb编译进内核。UvesafbLinux使用的新一代FrameBuffer驱动,和v86d配合工作。另外,还得用fbset实用程序强制FrameBuffer设备使用1024x600的分辨率。也就是说,要解决分辨率不匹配问题,得安装下列软件:

1.   uvesafb:产生、驱动和管理FrameBuffer虚拟设备,如fb0

2.   v86d:提供运行x86指令的仿真环境;

3.   915resolution:动态修改Video BIOS以支持非标准分辨率;

4.   fbset:在用户态下强制fb0设备使用非标准分辨率。

安装过程非常简单:

1.   配置内核,在“Device Drivers”大项中勾选“Connector - unified userspace <-> kernelspace linker”项目,将其编译进内核;

2.   同样在“Device Drivers => Graphics support => Support for frame buffer devices”项目中,勾选“Userspace VESA VGA graphics support”项目,将uvesafb驱动编译成内核模块;

3.   勾选“Intel 830M/845G/852GM/855GM/865G/915G/945G support”,将945GME驱动编译进内核;

4.   编译内核;

5.   使用emerge安装v86d(依赖于klibc包);

6.   重新配置内核,在“General Setup”大项中勾选“Initial RAM filesystem and RAM disk (initramfs/initrd) support”,使用 /usr/share/v86d/initramfs做为 Initramfs源文件(CONFIG_INITRAMFS_SOURCE="/usr/share/v86d/initramfs");

7.   重新编译内核,安装到/boot启动区;

8.   访问www.geocities.com/stomljen/,下载0.5.3版的915resolution

9.   下载chezphil.org/tmp/915r_945GME.patch,为915resolution打上945GME的补丁;

10.  编译、安装915resolution

11.  使用emerge安装fbset

12.  /etc下配置一个fb.modes文件:

# cat /etc/fb.modes

mode "1024x600-60"

  geometry 1024 600 1024 600 8

  timings 20461 144 40 18 1 104 3

endmode

至此四个软件都安装完毕,下面进行调试和测试。先查看915resolution能找到的分辨率模式:

# 915resolution -l

Intel 800/900 Series VBIOS Hack : version 0.5.3

 

Chipset: 945GME

BIOS: TYPE 1

Mode Table Offset: $C0000 + $269

Mode Table Entries: 36

 

Mode 30 : 640x480, 8 bits/pixel

Mode 32 : 800x600, 8 bits/pixel

Mode 34 : 1024x768, 8 bits/pixel

Mode 38 : 1280x1024, 8 bits/pixel

Mode 3a : 1600x1200, 8 bits/pixel

Mode 3c : 1920x1440, 8 bits/pixel

Mode 41 : 640x480, 16 bits/pixel

Mode 43 : 800x600, 16 bits/pixel

Mode 45 : 1024x600, 16 bits/pixel

Mode 49 : 1280x1024, 16 bits/pixel

Mode 4b : 1600x1200, 16 bits/pixel

Mode 4d : 1920x1440, 16 bits/pixel

Mode 50 : 640x480, 32 bits/pixel

Mode 52 : 800x600, 32 bits/pixel

Mode 54 : 1024x600, 32 bits/pixel

Mode 58 : 1280x1024, 32 bits/pixel

Mode 5a : 1600x1200, 32 bits/pixel

Mode 5c : 1920x1440, 32 bits/pixel

通过动态地替换不使用的模式(如34号模式),可以实现强制使用非标准模式的目的:

# 915resolution 34 1024 600 8

四个参数分别是模式编号、列数、行数和颜色深度(8位)。设定好模式之后,装载uvesafb

# modprobe uvesafb

这时候可能会突然黑屏,这是正常的,继续执行下面的指令:

# fbset 1024x600-60

看到效果了吗?正常而华丽的1024x600的控制台出来了,这下眼睛是不是舒服多了?打开vi,一个美现新世界呐。

虽然使用这个方案很好,但有三点比较烦人:由于915resolution是动态修改Video BIOS,这意味着每次重启系统都不会自动使用1024x600的分辨率,而且按下Atl+Fn功能键切换控制台时其它控制台也不会自动使用这个分辨率。不过这不算个问题,因为只要简单地写一个切换脚本并将它放到init脚本中就一切OK。最后,使用uvesafb似乎不会自动进入屏保状态,这个就留待下次解决吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值