LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 12845|回复: 20

[原创]Linux下刷新率完全解决办法:)`

[复制链接]
发表于 2004-4-12 15:55:19 | 显示全部楼层 |阅读模式
Linux 下刷新率

     经常在bbs上看到有新手问到刷新率怎么改法,其实很简单.
     在XFree86下,需要一个modeline的概念,虽然通过配置 HorizSync ,和VertRefresh能让XFree86自动把刷新搞定,可是还是不可能细细调整,比如我显示器在800x600下可以上到108Hz可是,XFree86的自动配置却只有85Hz.
      于是,你需要在给你的XF86Config-4文件的Monitor Section加上一条象
ModeLine "800x600@102" 73.61 800 832 1104 1136 600 610 620 631
的ModeLine参数,来告诉X你显示器有这么一个模式.具体的数字,每台现实器都不一样b,不过大多显示器只给了Horizontal Sync Rate 和Refresh Rate(中文好象是行频和场频)两个参数,自己换算的话麻烦死,还好有这样一个页面 http://xtiming.sourceforge.net/cgi-bin/xtiming.pl,你把你所要的设置填好(dotclock不知道的可以不填),可以帮你作好换算.注意别太贪心,会烧掉你的Monitor的
       OK,X下的Refresh解决了,到FrameBuffer了,我只说说vesa模式的其他的也差不多.FrameBuffer和X用的参数又不一样了(真麻烦)不过还在(Linux Kernel Code Path)/Docmentation/fb/framebuffer.txt有个转化的公式,不下面的数值算出来.
pixclock  left_margin  right_margin  hsync_len  upper_margin  lower_margin
vsync_len

       然后,用那些数字去改(Linux Kernel Code Path)/drivers/video/vesafb.c
先是又这样一个struct:
static struct fb_var_screeninfo vesafb_defined __initdata = {
        .activate       = FB_ACTIVATE_NOW,
        .height         = -1,
        .width          = -1,
        .right_margin   = 32,
        .upper_margin   = 16,
        .lower_margin   = 4,
        .vsync_len      = 4,
        .vmode          = FB_VMODE_NONINTERLACED,
};
然后是:
vesafb_defined.pixclock     = 10000000 / vesafb_defined.xres * 1000 / vesafb_defined.yres;
vesafb_defined.left_margin  = (vesafb_defined.xres / 8) & 0xf8;
vesafb_defined.hsync_len    = (vesafb_defined.xres / 8) & 0xf8;
的几行.
对应的相应的变量把他们改了(建议原来的注释掉),当然要在编译一下kernel. Reboot,haha,all ok now.
 楼主| 发表于 2004-4-14 11:53:54 | 显示全部楼层
斑竹呀,我的帖子可以解决很多新手的刷新率的问题呀,为什么不加精???
发表于 2004-4-14 15:07:22 | 显示全部楼层
X 下调刷新率可以用 xvidtune 调节,然后将调好的配置写入 XF86Config 即可
发表于 2004-4-14 15:08:34 | 显示全部楼层
其实只要检查一下/var/log/XFree86.0.log就会发现XFree86会帮你检查出所有适合的刷新率, 例如以下几行:

(**) RADEON(0): *Mode "1024x768": 65.0 MHz (scaled from 0.0 MHz), 48.4 kHz, 60. 0 Hz
(II) RADEON(0): Modeline "1024x768"   65.00  1024 1040 1176 1344  768 770 776   806
(**) RADEON(0):  Default mode "640x350": 65.0 MHz (scaled from 0.0 MHz), 48.4   kHz, 60.0 Hz
(II) RADEON(0): Modeline "640x350"   65.00  640 1040 1176 1344  350 770 776 806

你所要做的就是找到你想要的分辨率, 例如1024x768, 它的两个频率分别是48.4 kHz和60. 0 Hz. 然后, 在Section "Monitor"里, 加入两行, 把刷新率设成一个范围刚好分别包含了找到的两个频率就可以了:
  HorizSync  48.0 - 49.0         <-  kHz的那个频率
  VertRefresh 59.5 - 60.5        <-  Hz的那个频率

新的XFree86 4.x不需要专门设置ModeLine, 即便要设, 也可以从XFree86.0.log里找到.
 楼主| 发表于 2004-4-14 17:15:32 | 显示全部楼层
不对,我已经看多!比如我的显示器在800x600可以上108Hz可是,XFree86自己只能跳到85Hz.所以我给他加上ModeLine,于是可以上了.

还有,Vesa 的FrameBuffer默认只有75Hz,Rivafb的话只有60,加了append的参数也没用,只有给驱动的代码
发表于 2004-4-14 17:55:40 | 显示全部楼层
vesa驱动,很多都不此了吧?
发表于 2004-4-14 22:58:38 | 显示全部楼层
在控制台下如何改刷新率?
用一会儿控制台眼睛就不舒服。
 楼主| 发表于 2004-4-15 13:02:10 | 显示全部楼层
zhsl请认真看看我的帖子先
发表于 2004-5-21 00:45:28 | 显示全部楼层
我用了vesamodes.gz里面的800x600@85Hz的modeline来换算
修改了vesafb.c文件,编译出来的内核在控制台下刷新率还是60Hz..
是不是失败了,还是需要改参数?
我grub里加了vga=788了
发表于 2004-5-21 09:36:17 | 显示全部楼层
我在XF86config-4里面设置好显示器的行频、场频,显示器自己就上到1028X768,85hz

108hz?太夸张了吧,没有必要。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表