viewtopic.php?t=6700
其中 Tvout 並沒有完全成功的試出來, 半年後, Xorg 也進入到 Debian, 並且官方也發表了 6.9/7.0 版, drm 與 mesa 在 build 上也多了些小步驟, 更重要的是 TVOUT 在現在也成功了, 當然, patch 與 build 是少不了的.
1. Source/Patch 的取得
首先, build 所需要的 libs*-dev 是少不了的, 在此不繁述. 而您所需要的source 與 patch 如下:
1.1.1. Xorg source (From snapshot, release, or cvs access)
1.1.2. TV-Out patch for Xorg (Thanks to Rune Petesen)
1.1.3. DRM sources (From cvs access, or ....dunno)
1.1.4. Mesa/DRI sources (From cvs access, or Mesa3d homepage)
取得方法:
1.2.1. Xorg (目前以6.9 為主)
Snapshot 可以從
http://xorg.freedesktop.org/snapshots
Realse 可以從
http://xorg.freedesktop.org/releases/X1 ... index.html
而小弟偏好 cvs, 注意有可因為 breakage 讓您無法build, 不過同時您也享有最新的功能
- 代碼: 選擇全部
cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg login
cvs -z3 -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg co xc
1.2.2. Tvout patch
從 http://megahurts.dk/rune/tv_output.html 取得最新的 patch
目前為 2005-12-14 (6.9 final - and newer)
http://megahurts.dk/rune/stuff/xorg_CVS ... t.patch.gz
1.2.3. DRM sources
CVS access, 普通release 懶的去找 orz....
- 代碼: 選擇全部
cvs -d:pserver:anonymous@cvs.freedesktop.org:/cvs/dri login
cvs -z3 -d:pserver:anonymous@cvs.freedesktop.org:/cvs/dri co drm
1.2.4. Mesa/Dri Sources
可以從 http://www.mesa3d.org 下載
不過小弟再次偏好使用 cvs
- 代碼: 選擇全部
cvs -d:pserver:anonymous@cvs.freedesktop.org:/cvs/mesa login
cvs -z3 -d:pserver:anonymous@cvs.freedesktop.org:/cvs/mesa co Mesa
2. Patching/Building
2.1 將 Xorg source 打上 tvout 的 patch
假設您下載的 patch檔名為 xorg_CVS-20051214-tv_output.patch.gz
進入您xorg source 的 dir 下, 這時你應該看到有個叫 xc 的目錄, 執行:
- 代碼: 選擇全部
gunzip -c xorg_CVS-20051214-tv_output.patch.gz | patch -p1 -d xc/programs/Xserver/hw/xfree86/drivers/ati
其中 -pX 的 level 與您所在的 dir 位置有關
2.2 Preparing and Building Xorg
Xorg 6.9 是使用 Imake 作為build 工具, 小弟偏好 6.9 因為 7.0 autogen 花很多時間 (如果你要全套服務的話..)
解開/cvs Xorg source 後 (可以先 tar 起來當寶貝)
將 xc/config/cf/xorgsite.def copy 一份到 xc/config/cf/host.def
並在 xc/config/cf/host.def 後面加上
- 代碼: 選擇全部
#define ProjectRoot /opt/xorg-cvs
#define NothingOutsideProjectRoot YES
#define HasFreetype2 YES
#define HasFontconfig YES
前面兩行是把 Xorg 裝在 /opt/xorg-cvs 下, 且所有的東西皆不會跑出來
與 --prefix= 的意思一樣, 這樣可以盡量讓您make install 後東西不會到處亂跑 (應該說跑到你想要他跑的地方)
後兩行嘛....意思看的懂, 小弟也是抄來的, 不知道不加字型會不會出錯就是了...
為了不把抓下來/解開的xorg source dir 弄髒, 可以利用lndir
首先建立一個目錄, 將 xc 下的things 連結到新建目錄下, 之後就可以來個 make World !
- 代碼: 選擇全部
mkdir xc-build
cd xc-build
lndir ../xc
make World
以小弟的機器 P4-1.7G, 1G Ram 大概要花個 1 hr 整, 所以..等吧
2.3 Installing Xorg 6.9
建議之後退出 X window
依照上面做著, 以root
- 代碼: 選擇全部
make install
前往 /usr, 將 X11R6 mv 走, 並且將 /opt/xorg-cvs 連結取而代之
- 代碼: 選擇全部
ln -s /opt/xorg-cvs ./X11R6
至此, 其實您已經可以使用剛編好的xorg 了, 只是難道您忍心放著最新的3D 加速不管嗎?
2.4 Building libdrm & kernel module
首先要先安裝 libdrm, 才能build Mesa, 進入 drm 的 source tree 後
- 代碼: 選擇全部
cd drm
./autogen.sh
./configure --prefix=/usr
make install
之後再build drm kernel module:
如果你是用 kernel 2.6 到 cd linux-core
如果你是用 kernel 2.4 到 cd linux 後
- 代碼: 選擇全部
make
如果他無法自動找到kernel source, 就
- 代碼: 選擇全部
make LINUXDIR=/path/to/kernel/source
一陣 build, 可以看到一堆 .ko 檔
把modules 丟到 /lib/modules/`uname -r`/kernel/drivers/char/drm 下
- 代碼: 選擇全部
cp *.ko /lib/modules/`uname -r`/kernel/drivers/char/drm
2.5 Build/installing Mesa3D/DRI
轉換戰場至 Mesa 的source tree下
編輯 Mesa/configs/default
找到 "DRM_SOURCE_PATH" 後, 指向之前的 DRM source
eg.
- 代碼: 選擇全部
DRM_SOURCE_PATH=/cvs/drm-cvs/drm
再編輯 Mesa/configs/linux-dri
找到"DRI_DIRS"後, 留下您要的DRI components, 這一篇是以 radeon 為主, 當然就留radeon
- 代碼: 選擇全部
DRI_DIRS = radeon
嗯, 是的, 接下來的又是對您的 CPU 一陣亂棍
- 代碼: 選擇全部
make linux-dri
之後更新 libGL*, libglut*
注意, 這一招出手極狠, 非死即傷, 不過小弟是從來沒出錯過....就下手吧!嘿嘿
- 代碼: 選擇全部
cd lib
mv libGL* /usr/X11R6/lib
mv libgl* /usr/X11R6/lib
mv dri* /usr/X11R6/lib/modules/dri/
cd /usr/X11R6/lib
ln -sf libGL* /usr/lib/
ln -sf libgl* /usr/lib/
2.6 設定好您的 Xorg 和 TVOut
編輯 /etc/X11/xorg.conf
在 Section "Module" 是否有, 沒有就加上:
- 代碼: 選擇全部
Load "glx"
Load "dri"
接下來就是 TV-Out 的設定
參考 http://www.mindfully.org/Resource/Video ... -World.htm
得知台灣為 NTSC
在 Section "Module" 是否有, 沒有就加上:
- 代碼: 選擇全部
Driver "radeon"
Option "AGPMode" "4"
Option "AGPFastWrite" "yes"
Option "TVOutput" "NTSC"
Option "IgnoreEDID" "true"
Option "MonitorLayout" "CRT, NONE"
注意:
其中 Option "MonitorLayout" "CRT, NONE" 是因為目前只有
單純 TVOut 或是 TVOut+CRT 可以使用, 如果您不使用TVout 或想要用
LCD 時, 將 "MonitorLayout" 那一行 # 掉
接下來就是 Monitor Section 了..
- 代碼: 選擇全部
Section "Monitor"
Identifier "TV Monitor"
HorizSync 30.0 - 40.0
VertRefresh 60
Modeline "800x600" 40.00 800 840 968 1056 600 601 605 628
EndSection
目前只support 到 800x600, Modeline 方面, 小弟是從 google 隨便抄下來的
好像有一定的算法, 小弟也有看到, 不過能用就好...不管他了..
當然, 哪位客倌發現有更好的 Modeline, 請不吝告知小弟
最後將
- 代碼: 選擇全部
export LD_PRELOAD=/usr/X11R6/lib/libGL.so
export LIBGL_DEBUG=verbose
才能確保3D Game 都找的到喔
第一個是為了讓其他用 GL 的app 可以知道去load 什麼, 沒加這個前
我除了 glxgears 外, 其他的app 都用不了 GL
第二個是debug 用的, 如果發生了什麼事, 至少還可以貼出來討論討論
2.7 Dual screen
雙視界是以在 xorg.conf 中達成的, 在 section 3.2 可以看到小弟的設定方法
2.8 其他的小工具
2.8.1 DriConf
DriConf 是個不錯的 tweak 工具, 可以拿來玩一玩:
http://dri.freedesktop.org/wiki/DriConf
2.8.2 glxgears/glxinfo
- 代碼: 選擇全部
glxgears
libGL: XF86DRIGetClientDriverName: 5.0.3 radeon (screen 0)
libGL: OpenDriver: trying /usr/X11R6/lib/modules/dri/radeon_dri.so
drmOpenByBusid: Searching for BusID pci:0000:01:00.0
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 4, (OK)
drmOpenByBusid: drmOpenMinor returns 4
drmOpenByBusid: drmGetBusid reports pci:0000:01:00.0
7577 frames in 5.0 seconds = 1515.225 FPS
跟上次比..變慢了些? 錯覺錯覺!! orz....
2.9 最後記得以root 來個
- 代碼: 選擇全部
ldconfig
3. 截圖 & Exampes of xorg.conf
3.1.1 Dual Screen
雙視界
3.1.2 TV-Outs
LCD 與 TV-Out 只能取其一利
glxgears 1800 FPS ?!
看來 800x600 拿來打電動是不錯的選擇
3.2 以下為小弟的 xorg.conf
可以從 LCD, LCD+CRT dual-screen, 與 TV out 選擇
- 代碼: 選擇全部
Section "Files"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
FontPath "/usr/lib/X11/fonts/misc"
FontPath "/usr/lib/X11/fonts/Type1"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi"
EndSection
Section "Module"
Load "bitmap"
Load "dbe"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "record"
Load "type1"
Load "vbe"
EndSection
#Composite crash my flash plugin......
#Section "Extensions"
# Option "Composite" "enable"
#EndSection
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbModel" "pc104"
Option "XkbLayout" "us"
EndSection
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/psaux"
Option "Protocol" "ImPS/2"
Option "Emulate3Buttons" "true"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
Identifier "Generic Mouse"
Driver "mouse"
Option "SendCoreEvents" "true"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "Emulate3Buttons" "true"
Option "ZAxisMapping" "4 5"
EndSection
#============== Beginning of LCD Screen Settings ============
Section "Device"
Identifier "Generic Video Card"
Driver "radeon"
Option "AGPMode" "4"
Option "AGPFastWrite" "yes"
Option "EnablePageFlip" "false"
Option "RenderAccel" "true"
Option "AccelMethod" "exa"
EndSection
Section "Monitor"
Identifier "Generic Monitor"
Option "DPMS"
EndSection
Section "Screen"
Identifier "Default Screen"
Device "Generic Video Card"
Monitor "Generic Monitor"
DefaultDepth 16
SubSection "Display"
Depth 16
Modes "1024x768"
EndSubSection
EndSection
#============== End of LCD Screen Settings =================
#============== Beginning of TV Screen Settings =============
Section "Device"
Identifier "RADEON-TVOut"
Driver "radeon"
Option "AGPMode" "4"
Option "AGPFastWrite" "yes"
Option "TVOutput" "PAL"
Option "IgnoreEDID" "true"
Option "MonitorLayout" "CRT, NONE"
EndSection
Section "Monitor"
Identifier "TV Monitor"
HorizSync 30.0 - 40.0
VertRefresh 60
Modeline "800x600" 40.00 800 840 968 1056 600 601 605 628
EndSection
Section "Screen"
Identifier "TV Screen"
Device "RADEON-TVOut"
Monitor "TV Monitor"
DefaultDepth 16
SubSection "Display"
Depth 16
Modes "800x600"
EndSubSection
EndSection
#============== End of TV Screen Settings ==================
#============== Beginning of Dual Screen Settings ===========
Section "Device"
Identifier "RADEON-DUAL"
Driver "radeon"
Option "AGPMode" "4"
Option "AGPFastWrite" "true"
Option "MonitorLayout" "LVDS, CRT"
Option "MergedFB" "true"
Option "CRT2HSync" "31.0-80.0"
Option "CRT2VRefresh" "60.0-76.0"
Option "CRT2Position" "RightOf"
Option "MetaModes" "1024x768-1024x768"
Option "PanelOff" "false"
Option "DynamicClocks" "true"
## Change this to "false" if there are any problems:
Option "EnablePageFlip" "true"
EndSection
Section "Screen"
Identifier "Dual Screen"
Device "RADEON-DUAL"
DefaultDepth 16
SubSection "Display"
Depth 16
Modes "1024x768"
EndSubSection
EndSection
#============== End of Dual Screen Settings ================
Section "ServerLayout"
Identifier "Default Layout"
#從一選擇您要的
Screen "Default Screen"
# Screen "TV Screen"
# Screen "Dual Screen"
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
InputDevice "Generic Mouse"
EndSection
Section "DRI"
Mode 0666
EndSection
4. References
http://dri.freedesktop.org/wiki/Building
http://megahurts.dk/rune/tv_output.html
http://www.mindfully.org/Resource/Video ... -World.htm
5. 後記
應該都能適用於 Radeon 7xxx-8xxx 甚至較早的 9xxx 卡
也許有點麻煩, 但是當你發現已經不要 windows 的快感..
真是爽一個字才能形容的
Special thanks to Rune Petersen for his support in TVOut section