X11 構建指南
X11,從參考實現到 Xorg 6.9,使用自己的“imake”構建系統。客戶端、伺服器和庫都在一個構建樹中。(只構建樹的一部分非常困難;必須構建整個樹。)一些東西,比如 Mesa 和 Freetype,被修改為可選地成為樹的一部分。
Xorg 7.0 用一套基於 GNU autoconf 構建系統的模組替換了它。這建立了一個複雜的包和依賴關係系統。為同時實現 Xorg 6.9rc1 和 Xorg 7.0rc1 的兩個系統而產生的問題,延遲了第一個候選版本的釋出。
為了用 imake 構建 Xorg,您首先需要下載並解壓原始碼包。Xorg 6.9rc1 的包叫做xorg-x11-6.8.99.901.tar.bz2可以從 這裡 獲取。現在 Xorg 6.9 和 7.0 的最終版本已經發布,您可以使用映象列表 這裡 找到它們。
構建系統的粗略概述
- 建立一個“host.def”檔案(可選)。
- 執行“make World”來配置和構建樹。
- 執行“make install”和“make install.man”來安裝所有內容。
您可以使用“host.def”檔案來定製您的構建。如果您沒有建立它,那麼您將使用預設設定,這些設定應該已經針對您的作業系統進行了調整。
檔案xc/BUILD更詳細地描述了構建。
是的,您必須構建整個樹才能構建一個部分。例外情況是,有時您可以進行伺服器端或無伺服器端構建。請參閱我們關於 #構建靜態伺服器 的部分,以及xc/config/cf/xorgsite.def.
在以下示例中,root 已授予我們對/usr/local/src的寫訪問許可權。我們下載了 Xorg 6.9 的第一個候選版本(/usr/local/src/xorg-x11-6.8.99.901.tar.bz2).
)。我們已經安裝了 Xorg 6.8.2。我們在構建期間執行它,因此我們有多個 xterm 來輸入 shell 命令。
使用一個“xterm”,將原始碼解壓到/usr/local/src,建立/usr/local/src/xc:
$ cd /usr/local/src $ bzcat xorg-x11-6.8.99.901.tar.bz2 | pax -rv
如xc/BUILD所述,我們可以使用 lndir 建立一個指向原始碼的符號連結的影子樹。(這可以防止物件出現在原始碼樹中。)因為“lndir”是 X 的一部分,我們已經安裝了 Xorg 6.8.2,所以我們可以執行“lndir”
$ mkdir xcbuild $ cd xcbuild $ lndir ../xc
請注意,當前目錄是/usr/local/src/xcbuild。現在我們將跳過建立config/cf/host.def,並使用預設配置。現在該呼叫 Makefile 了。我們必須執行make World,因為沒有其他正確的方法來配置和啟動構建。如果我們執行 Bourne shell
$ make World > World.log 2>&1
如果我們執行 C shell,那麼上面的命令是make World >& World.log. |
執行“make”的“xterm”現在很忙。為了檢視日誌,我們在第二個 xterm 中執行“tail”
$ cd /usr/local/src/xcbuild $ tail -f World.log
最終,日誌會宣佈 Xorg 的構建已完成。
如果我們需要重新啟動構建(例如,在發生錯誤之後),那麼我們不想清理樹。一個make World配置樹、清理樹並啟動構建。我們可以用make Everything或make重新啟動構建;請參閱xc/BUILD瞭解更多資訊。 |
我們安裝(到預設的/usr/X11R6,從而覆蓋了 Xorg 6.8.2 的大部分內容)
$ sudo make install $ sudo make install.man
請注意
- 如果我們的系統上“sudo”不起作用,那麼我們將使用“su”。
- 可以在執行安裝之前退出 X11。另一種選擇是在 X11 執行時覆蓋它的大部分內容。這可以工作,但稍微不安全一些。
如果需要,退出 X 並執行xorgcfg來建立配置檔案。
可以修改樹以僅構建靜態 X 伺服器。如果您需要從樹的較新版本中獲得更好的硬體支援,這將很有用。此外,這將跳過構建庫、客戶端和單獨的伺服器模組。(X11 協議非常穩定,因此較新的伺服器可以與較舊的庫和客戶端一起使用。)
OpenBSD 提供了一個示例host.def。他們的示例host.def是下一個場景的基礎。如果您有靜態構建 X 伺服器的理由,您可以執行與下一個場景類似的操作。
場景:我們已經安裝了 Xorg 6.8.2。我們需要 Xorg 6.9rc0(第 0 個候選版本)中更好的“ati”驅動程式,但我們需要跳過 6.9rc0 樹的大部分內容以避免錯誤。
解決方案:我們將靜態構建 6.9rc0 伺服器。
如果您有一個用“lndir”建立的影子樹,請在影子樹中建立類似“host.def”和“X11Conf.h”的檔案,而不是原始碼樹中。 |
在樹中的config/cf/host.def建立此檔案。如果您有一個影子樹,請將其放在影子樹中。該檔案是
#define InstallEmptyHostDef #define BuildServersOnly YES /* * you may also restrict the drivers that are built by editing and * uncommenting the line below */ #define XF86CardDrivers wsfb ati #define UsbMouseSupport NO #define DoLoadableServer NO #define XnestServer NO #define XVirtualFramebufferServer NO #define XprtServer NO #define BuildGlxExt NO #define BuildGLXLibrary NO #define BuildGLULibrary NO #define BuildRenderLibrary NO #define BuildLBX NO #define BuildType1 NO #define BuildFreeType NO #define BuildXTrueType NO #define BuildSpeedo NO #define BuildFonts NO #define BuildXFree86ConfigTools NO
“XF86CardDrivers”行已更改為僅指定“wsfb”和“ati”。我們的驅動程式是“ati”。我們有一個第二個驅動程式,它避免了高階硬體功能,以防“ati”出現故障。OpenBSD 上的“wsfb”驅動程式使用核心幀緩衝區,而不是重新配置硬體。在 Linux 上,幀緩衝區驅動程式是“fbdev”。在 i386 硬體上,“vga”和“vesa”可能是不錯的選擇。使用以下行之一
#define XF86CardDrivers wsfb ati #define XF86CardDrivers fbdev ati #define XF86CardDrivers vga ati #define XF86CardDrivers vesa ati
現在開始構建
$ make World > World.log 2>&1
構建最終會因缺少某個“XlibConf.h”而停止;我們的 host.def 跳過了這一步。(這是一個錯誤;Xorg 6.8.2 不需要“XlibConf.h”檔案。)該檔案可能是在構建 libX11 時生成的,而我們跳過了這一步。對於伺服器而言,我們實際上並不需要它。在xc/lib/X11/XlibConf.h:
$ touch lib/X11/XlibConf.h
建立一個空檔案。
$ make Everything >> World.log 2>&1
現在繼續構建最終構建完成。伺服器出現在xc/programs/Xserver/Xorg。因為此檔案是靜態連結的,所以它是唯一需要安裝的檔案。我們將它安裝到/usr/X11R6/bin/Xorg69/usr/X11R6:
$ cp -p programs/Xserver/Xorg /usr/X11R6/bin/Xorg69
以補充我們位於
$ cd /usr/X11R6/bin $ chown root:wheel Xorg69 $ chmod a+xs Xorg69
的 Xorg 6.8.2 安裝。現在我們需要測試伺服器。首先,如果我們現在正在執行 X,請退出 X 到控制檯。然後將我們的新伺服器設定為 root,以便它可以使用影片硬體使用 Xorg69 -configure 生成新的配置檔案,然後使用 xinit -- /usr/X11R6/bin/Xorg69 測試它。如果它能工作,請透過更改
$ cd /usr/X11R6/bin $ rm X $ ln -s Xorg69 X
/usr/X11R6/bin/X