[分享-第二版] Mobile Radeon 7500, TV-Out, 3D, Dual screen @ Xorg

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[分享-第二版] Mobile Radeon 7500, TV-Out, 3D, Dual screen @ Xorg

文章wsun013 » 週六 12月 31, 2005 1:04 pm

半年前分享了
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
後, /opt/xorg-cvs 下就是您最新編的 xorg 了!
前往 /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
設定到您的 env setting 裡
才能確保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
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GE d->++ s: a-- C+++>++++ UL>++++ P>++++ L++>++++ E---- W+ N@ o K- w++(+)
O- M- V? PS+++(+) PE++(+) Y-- PGP- t>--- 5? X+++ R- tv-(--) b+ DI? D+ G e++>++++
h+(!) r++(%) y*>++++
-------END GEEK CODE BLOCK-------
頭像
wsun013
快樂的大學生
快樂的大學生
 
文章: 784
註冊時間: 週二 9月 14, 2004 12:12 pm
來自: 紐西蘭

文章granziliao » 週六 12月 31, 2005 1:15 pm

太感謝了!
我的laptop也是radeon7500的
TV-out本來要放棄的
現在重拾希望了
凡發生之事必合理
頭像
granziliao
可愛的小學生
可愛的小學生
 
文章: 99
註冊時間: 週三 6月 18, 2003 9:23 am
來自: 板橋後埔

文章granziliao » 週三 1月 04, 2006 4:40 pm

請問一下,如果要porting到xorg 7.0的話,要修改那些部份呢?
凡發生之事必合理
頭像
granziliao
可愛的小學生
可愛的小學生
 
文章: 99
註冊時間: 週三 6月 18, 2003 9:23 am
來自: 板橋後埔

文章wsun013 » 週三 1月 04, 2006 6:51 pm

我想應該只是在 patch 時的 dir 不一樣吧
eg. xorg/xserver/drivers 那下面看看

硬碟空間現在很少, 所以還編不了 orz
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GE d->++ s: a-- C+++>++++ UL>++++ P>++++ L++>++++ E---- W+ N@ o K- w++(+)
O- M- V? PS+++(+) PE++(+) Y-- PGP- t>--- 5? X+++ R- tv-(--) b+ DI? D+ G e++>++++
h+(!) r++(%) y*>++++
-------END GEEK CODE BLOCK-------
頭像
wsun013
快樂的大學生
快樂的大學生
 
文章: 784
註冊時間: 週二 9月 14, 2004 12:12 pm
來自: 紐西蘭

文章granziliao » 週三 2月 15, 2006 8:15 pm

剛在gatos上看到你遇到和我一樣的麻煩,我之前的作法和你完全一樣,看來只能試著modulize tv-out patched 6.9 tree 成 7.0了,可是,恐怕會在modulizing 6.9 tree 的時候遇到更多的 modulizing patch hunk 問題
噗...........................
凡發生之事必合理
頭像
granziliao
可愛的小學生
可愛的小學生
 
文章: 99
註冊時間: 週三 6月 18, 2003 9:23 am
來自: 板橋後埔

文章granziliao » 週三 2月 15, 2006 8:21 pm

在gatos上留的log檔中,只有theater_out那個模組是標示成"compiled for XFree86 4.3.99.902" 會不會跟這個有關係?
凡發生之事必合理
頭像
granziliao
可愛的小學生
可愛的小學生
 
文章: 99
註冊時間: 週三 6月 18, 2003 9:23 am
來自: 板橋後埔

文章wsun013 » 週日 2月 19, 2006 11:56 am

小弟把原本的patch修改後, 現在已經可以在 xorg7 的 cvs 上使用了
http://shell.world-net.co.nz/~knightw/x ... t.patch.gz

以下是小弟將修改的patch 在gatos 的mailing list 裡:
Hi all,

I have patched the tvout patch for xorg 6.9 for the xorg 7.0 cvs onward.
Here is the link:

http://shell.world-net.co.nz/~knightw/x ... t.patch.gz

The majority changes over the 6.9 patches are:
1. Makefile.am for new modular system
2. XORG_VERSION instead of XF86_VERSION in theater_out_module.c
3. pass the info->VIP to xf86_detectTheaterOut as an extra arugment in radeon_driver.c, which
resolves the unsolved problem.

originally this patch is used on the ``xf86-video-ati'' package from the modular xorg 7.0cvs, and
it is only tested for Mobile Radeon 7500 on my ASUS notebook, but I do believe this should work fine
for others as well.

Things havent done:
Imakefile -> Makefile for tvo_set.c
however, you can compile it with a single command line:
gcc tvo_set.c -I/where_your_xorg_is_installed/include/ -L/where_your_xorg_is_installed/lib/ -lXv -o tvo_set

Best Reagards,

Wei-Tsun Sun

祝使用順利
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GE d->++ s: a-- C+++>++++ UL>++++ P>++++ L++>++++ E---- W+ N@ o K- w++(+)
O- M- V? PS+++(+) PE++(+) Y-- PGP- t>--- 5? X+++ R- tv-(--) b+ DI? D+ G e++>++++
h+(!) r++(%) y*>++++
-------END GEEK CODE BLOCK-------
頭像
wsun013
快樂的大學生
快樂的大學生
 
文章: 784
註冊時間: 週二 9月 14, 2004 12:12 pm
來自: 紐西蘭


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客