經(jīng)常在bbs上看到有新手問(wèn)到刷新率怎么改法,其實(shí)很簡(jiǎn)單.
在XFree86下,需要一個(gè)modeline的概念,雖然通過(guò)配置 HorizSync ,和VertRefresh能讓XFree86自動(dòng)把刷新搞定,可是還是不可能細(xì)細(xì)調(diào)整,比如我顯示器在800x600下可以上到108Hz可是,XFree86的自動(dòng)配置卻只有85Hz.
于是,你需要在給你的XF86Config-4文件的Monitor Section加上一條象
ModeLine "800x600@102" 73.61 800 832 1104 1136 600 610 620 631
的ModeLine參數(shù),來(lái)告訴X你顯示器有這么一個(gè)模式.具體的數(shù)字,每臺(tái)現(xiàn)實(shí)器都不一樣b,不過(guò)大多顯示器只給了Horizontal Sync Rate 和Refresh Rate(中文好象是行頻和場(chǎng)頻)兩個(gè)參數(shù),自己換算的話麻煩死,還好有這樣一個(gè)頁(yè)面 ,你把你所要的設(shè)置填好(dotclock不知道的可以不填),可以幫你作好換算.注意別太貪心,會(huì)燒掉你的Monitor的
OK,X下的Refresh解決了,到FrameBuffer了,我只說(shuō)說(shuō)vesa模式的其他的也差不多.FrameBuffer和X用的參數(shù)又不一樣了(真麻煩)不過(guò)還在(Linux Kernel Code Path)/Docmentation/fb/framebuffer.txt有個(gè)轉(zhuǎn)化的公式,不下面的數(shù)值算出來(lái).
pixclock left_margin right_margin hsync_len upper_margin lower_margin
vsync_len
然后,用那些數(shù)字去改(Linux Kernel Code Path)/drivers/video/vesafb.c
先是又這樣一個(gè)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;
的幾行.
對(duì)應(yīng)的相應(yīng)的變量把他們改了(建議原來(lái)的注釋掉),當(dāng)然要在編譯一下kernel. Reboot,haha,all ok now.