經常在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.