Linux下裝置的配置過程是指在檢測到裝置類型、裝置當前工作參數等資訊之後,使用這些資訊來配置裝置的驅動程式,工作方式等,裝置的檢測過程參見 《如何在Linux下實現硬體的自動檢測》)。要完成這樣的任務,需要做兩方面的工作:
其一是需要一個詳盡的裝置資訊檔,這個檔案描述了裝置標識、與裝置標識對應的裝置驅動程式、裝置配置參數裝置選項)、裝置設定的詳細描述、裝置配置方法描述、裝置對應的別名、裝置的主裝置號等資訊。
其二是需要根據裝置的類型,以及安裝的linux系統版本不同的Linux發行版對於同一裝置的配置指令檔存在差異),設定裝置對應的配置指令檔。
視窗系統XFree86)的配置過程
1. 顯示卡的描述檔案介紹CardDB)
CardDB是X配置程式使用的顯示卡資料檔案。在對XFree86進行配置時,配置程式一般都需要讀取其上的內容完成顯示卡的配置。它的內容與使用的XFree86的版本密切相關。一般而言,它儲存的位置是在/usr/X11R6/lib/X11/目錄下。現在我們就對XFree86 4.1.0的CardDB檔案進行簡單的介紹:
NAME
顯示卡的描述名稱
CHIPSET
描述顯示卡使用的晶片集
SERVER
為了和3.x版本的XFree86向下相容,由此欄位指定此顯示卡在XFree86 3.x下的X伺服器,例如VGA16,SVGA等。
DRIVER
描述在4.x版本的XFree86下顯示卡的驅動程式模組。
LINE
設定顯示卡特定的選項資訊,這樣的選項資訊出現在XF86Config的Device節,對應裝置的Option參數。
SEE
是指此顯示卡的配置資訊與SEE欄位所制定的顯示卡完全相同,例如
NAME Number Nine GXE64 with S3 Trio64
SEE S3 Trio64 (generic)
表示Number Nine GXE64的顯示卡配置與S3 Trio64 (generic)的配置完全相同。
RAMDAC
RAM直接存取控制的控制晶片型號
DACSPEED
直接存取控制的速度
CLOCKCHIP
此顯示卡的時鐘晶片的
NOCLOCKCHIP
此顯示卡無時鐘晶片
UNSUPPORTED
此類型的顯卡,此版本的XFree86不能提供支援
COMMENT
注釋
例如,對於RIVA TNT顯卡,XFree86 4.1.0中的資訊如下:
NAME RIVA TNT
CHIPSET RIVATNT
SERVER SVGA
DRIVER nv
NOCLOCKPROBE
2. 顯示器資訊檢測
顯示器的資訊在XFree86系統中時非常重要的,它對應XFree86設定檔的Monitor節。在這一節中包含監視器的水平掃描頻率範圍,垂直掃描頻率範圍,顯示器支援的顯示模式等資訊。同樣的,顯示器的自動檢測也就是通過程式自動讀出顯示器的上述資訊。它的正確設定對於XFree86能否正常顯示起到很重要的作用。
對於顯示器的資訊檢測,要求它必須支援vbeVESA的BIOS級擴充)。在顯示器支援此擴充時,通過系統實模式下的BIOS調用INT 10H,可以取得顯示器的詳細資料。
可能需要的BIOS子功能調用為:
AH = 0x4F00
獲得關於監視器的VESA的BIOS級擴充資訊
AH = 0x4F01
獲得監視器支援的特定顯示模式
AH = 0x4F02
設定當前的視頻模式
AH = 0x4F03
獲得當前的視頻模式
AH = 0x4F04
儲存/還原svga顯示方式
AH = 0x4F15
獲得監視器的EDID擴充資訊
一般的顯示器使用上述中斷的方式是:先檢查顯示器是否支援VESA的BIOS級擴充,如果顯示器支援BIOS級擴充,就查看顯示器支援的顯示模式,然後獲得顯示器的EDID擴充資訊。在讀出的EDID擴充資訊中,可以查出顯示器的垂直回掃頻率範圍和水平回掃頻率範圍,也可以計算出顯示器的大小,對於一部分顯示器還可以從此資訊中讀出監視器的製造商資訊。
由顯示器讀出的資訊可以設定XF86Config的Monitor節,對於設定了正確的垂直回掃頻率範圍和水平回掃頻率範圍的顯示器,X自動化佈建為當前顯示解析度下支援的最高掃描頻率的顯示模式此顯示模式要求有對應的Modeline)。
但是如果您的顯示器不支援EDID擴充資訊,那麼您就只有根據經驗來設定顯示器的垂直回掃頻率範圍和水平回掃頻率範圍。如果設定的範圍高於監視器的實際支援範圍,那麼顯示器會出現黑屏的現象。
對於編程實現,如果您要調用上述bios中斷,那麼必須使用lrmi這個實模式介面,並設定正確的寄存器資訊,完成系統調用。具體的檢測顯示器資訊的例子,您可以參考Xconfigurator下ddcprobe的來源程式,也可以參考Mandrake系統下的ddcxinfos命令的來源程式。
3. 視窗系統的配置過程
要正確的在linux下配置視窗系統,實際上就是產生正確的XFree86設定檔,這個檔案一般儲存在/etc/X11/下,在X版本是3.x時,它的檔案名稱為XF86Config,在X版本是4.x時,它的檔案名稱一般為XF86Config-4。在現在的發行版本中,處於硬體相容性的考慮,他們一般都讓這兩個版本的XFree86包共存。因此,您也可以在/etc/X11目錄下,發現這兩個檔案同時存在,這時使用那個檔案就要看系統的X伺服器的版本了。
無論是那個版本的XF86Config檔案都是由許多節Section)構成的,但是這些節描述的內容主要包括:鍵盤、滑鼠、顯示器、顯示卡、字型顏色)等。
在X版本是3.x時,鍵盤和滑鼠的描述分別對應Keyboard和Pointer節。而在X版本是4.x時,鍵盤和滑鼠的描述都對應InputDevice節,只是對應不同的驅動模組,鍵盤的驅動模組是keyboard,滑鼠的驅動模組是mouse。配置這兩節所需要的資訊可以從/etc/sysconfig/keyboard和/etc/sysconfig/mouse中獲得,它們的詳細內容,本文的前面章節已作了介紹。
配置顯示器實際上是產生XF86Config檔案的Monitor節,需要配置的資訊一般包括:水平掃描頻率範圍、垂直掃描頻率範圍、監視器支援的顯示模式、製造商資訊。對於支援vbe和edid擴充的顯示器,可以根據從顯示器上讀出的資訊設定對應欄位的值。但是如果顯示器不支援上述擴充,則顯示卡的設定必須由使用者手動完成。如果您在配置XFree86時不指定這一節,那麼XFree86會設定顯示模式為640x480,垂直掃描頻率為60hz的方式。不同顯示模式的掃描頻率:
顯示解析度 垂直掃描頻率Hz) 水平掃描頻率kHz)
640x480 60 31.50
640x480 72 36.50
640x480 75 37.50
640x480 85 43.27
800x600 60 37.80
800x600 72 48.00
800x600 85 55.84
800x600 100 64.02
1024x768 60 48.40
1024x768 70 56.50
1024x768 76 62.50
1024x768 85 70.24
1024x768 100 80.21
1280x1024 61 64.20
1280x1024 70 74.59
1280x1024 74 78.85
1280x1024 76 81.13
1280x1024 85 91.15
1280x1024 100 107.16
1600x1200 60 75.00
1600x1200 70 87.50
1600x1200 75 93.75
1600x1200 85 105.77
表 6-1
從上表可以看出,您要設定顯示器達到某一解析度,那麼與此相對應,它的掃描頻率範圍也要包含上表中此解析度的最低掃描頻率。如果您的顯示器達不到這個範圍,那麼XWindow將無法正常工作。如果您設定的掃描頻率高於顯示器實際的掃描頻率範圍,由於XFree86會尋找對應解析度下最高掃描頻率進行顯示,所以此時XWindow將極有可能黑屏。
在組建組態指令碼時,掃描頻率的範圍也不是越低越好。設定較低的掃描頻率範圍對於部分LCD顯示器就不合適。比如,一部分LCD顯示器在800x600解析度時,最低支援的垂直掃描頻率為70Hz,那麼您這時指定的水平回掃範圍一定要包含48kHz。
在配置完顯示器之後,您就需要產生與顯示卡對應的描述了。這樣的描述資訊對應XF86Config檔案的Device節。這一節主要描述的顯示卡資訊包括:顯示卡對應的X伺服器X版本在3.x),對應的X裝置模組X版本為4.x),顯示卡的裝置資訊供應商、型號、支援顯存存取方式和顯存大小等),以及此顯示卡支援的裝置選項,比如顯示卡是否支援硬體加速、是否支援軟游標等。產生視窗系統的配置過程一般是先由pci的裝置標識檢測過程見)獲得顯示卡的類型,由此在XFree86的設定檔CardDB這個檔案可在/usr/X11R6/lib/X11/目錄下找到)中查得它對應的顯示卡描述,由此資訊可以設定此節的描述。
字型和調色盤資訊描述的是字型和調色盤所存放的路徑,您如果新加入字型時,需要在此加入正確的字型路徑。設定字型路徑時,如果指定它為unix:-1,那麼就是說您在啟動X伺服器之前,必須首先啟動字型伺服器xfs,然後由字型伺服器完成字型的訪問請求。
在您正確的設定了上述資訊之後,您必須將這些資訊存放在Screen節中。這一節描述的是完成顯示對應的顯示卡,顯示器,解析度和預設深度等資訊。
最後,您還必鬚生成ServerLayout節,由它描述整個系統所使用的顯示卡配置節、監視器配置節、滑鼠配置節、鍵盤配置節等資訊。
在產生了/etc/X11/XF86ConfigXF86Config-4)檔案後,您就可以測試一下此設定檔是否正確了。例如,對於XFree86 4.x,產生的設定檔為/etc/X11/XF86Config.test,測試使用如下命令:
XFree86 -xf86config /etc/X11/XF86Config.test :9
-xf86config /etc/X11/XF86Config.test表示使用指定的設定檔啟動X伺服器
:9 表示在終端9上運行X伺服器
一般而言,如果是編程實現X的配置過程的話,則要以子進程的方式系統調用fork)運行上述命令,在成功啟動X伺服器之後,運行一個小的圖形化程式,讓使用者選擇配置是否成功。
當然,如果您不能得到顯卡的詳細的裝置參數的話,您也可以使用probeonly選項獲得顯示卡的詳細資料。例如,對於XFree86 4.x測試使用如下命令:
XFree86 -probeonly :9
對於正常的啟動XFree86之後,系統輸出的資訊,您可以通過讀取/var/log/XFree86.x.log獲得。x是指XFree86啟動的終端,一般設定此x為0。
在XF86Config檔案配置之後,您可以使用startx啟動XFree86。這個檔案會運行您的登入目錄下的.xinitrc檔案來修改X Window系統的初始顯示狀態。這個檔案是一個指令檔。如果這個檔案不存在,系統就會預設使用/usr/X11R6/lib/X11/xinit/xinitrc。同時,startx還要尋找/etc/X11/X,這個檔案是一個連結檔案,它指向真正的X服務程式,現在這個程式一般都指向Xwrappers,它?嵌訶服務程式的封裝。當然,這個檔案也可以直接指向X服務程式XFree86。