歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

安裝實時嵌入式系統的圖形界面支持系統

  1 Linux 下的軟件維護和建立工具  對開放源碼的自由軟件來說,程序員得到的通常是源代碼。在編譯源代碼並正確安裝和配置的過程中,往往會涉及到許多工具和函數庫,因此其過程經常顯得有些繁復。MiniGUI也不例外。為了說明 MiniGUI 的正確編譯和安裝過程,我們有必要首先了解 Linux 系統下用於軟件維護和建立的工具。    1.1 make 和 makefile     make 是 Linux 下最常用的二進制程序、函數庫的建立生成工具。make 運行時要根據當前目錄下的 makefile 文件(一般是 Makefile),確定要生成什麼樣的二進制文件,以及對應的命令。我們還可以在 makefile 文件中建立要生成的目標與源代碼之間的依賴關系,從而可以讓 make 工具根據時間自動判斷是否需要通過中間過程而生成最終目標。盡管通過 makefile 文件可以組織一個大的項目,但往往手工編寫一個 makefile 文件並不是一件輕松的事情,並且在需要維護一個源代碼的目錄樹時,makefile 文件的維護工作就會大大增加。為此,GNU 又開發了 Autoconfi/Automake 工具,可以用來自動生成 makefile 文件,並且能夠檢查系統的配置信息,從而幫助提供源代碼的可移植性。   1.2 Autoconf/Automake   GNU 的 Autoconf 及 Automake 這兩個軟件實際是由若干 Shell 腳本組成的,它可以幫助程序員輕松產生 makefile 文件。現在的各種自由軟件,如Apache、mysql 等都是利用Autoconf,Automake 實現自動配置和編譯的。MiniGUI 也采用了 Autoconf/Automake 接口。用戶只要使用"./configure"、"make"、"make install" 就可以把程序編譯並安裝到系統中。   為了更好地了解 Autoconf 和 Automake,我們需要對 makefile 作一簡單回顧。Makefile 基本上就是"目標"(target)、"依賴性"(dependencies)和"動作"三者所組成的一系列規則。而 make 就是根據 makefile 文件的規則決定如何編譯(compile)和連接 (link)程序或者其它動作。當然,make 可做的不只是編譯和連接程序,例如 FreeBSD 的 port collection 中,Makefile還可以做到自動下載遠程程序,解壓縮(extract),打補丁 (patch),然後編譯並安裝到系統中。   Makefile 基本結構雖然很簡單,但是妥善運用這些規則就可以變換出許多不同的花樣。卻也因為這樣,許多人剛開始學寫makefile 時會覺得沒有規范可以遵循,每個人寫出來的makefile都不大一樣,不知道從哪裡下手,而且常常會受到開發環境的限制,只要環境參數不同或者路徑更改,可能 makefile 就得跟著修改。雖然有GNU Makefile Conventions (GNU Makefile慣例)制訂出一些在進行 GNU 程序設計時編寫 makefile 的一些標准和規范,但是其內容很長而且很復雜,並且經常作一些調整,為了減輕程序開發人員維護makefile 的負擔,就出現了Automake。   利用Automake,編程者只需要寫一些預先定義好的宏(macro),提交給Automake處理,就會產生一個可以供 Autoconf 使用的 Makefile.in文件。再配合使用 Autoconf產生的自動配置文件 configure 即可產生一份符合 GNU Makefile 慣例的 Makeifle 了。   在開始使用 Automake 之前,首先確認你的系統安裝有如下軟件:   GNU Automake   GNU Autoconf   GNU m4   perl   GNU LiBTool (如果你需要產生共享庫)     最好也使用 GNU C/C++ 編譯器、GNU Make 以及其它 GNU 的工具程序來作為開發的環境,這些工具都是屬於 GPL 的自由軟件,不但免費而且功能強大。如果你是使用 Red Hat Linux,可以找到所有上述軟件的 rpm 文件。   利用 configure 所產生的 Makefile文件有幾個預先設定的目標可供使用,這裡只對其中幾個簡述如下。   make all 產生設定的目標。只敲入make 也可以,此時會開始編譯源代碼,然後連接並產生執行文件。   make clean 清除之前所編譯的可執行文件及目標文件(*.o)。   make distclean 除了清除可執行文件和目標文件以外,也把 configure 所產生的 Makefile 清除掉。 通常在發布軟件前執行該命令。   make install 將程序安裝到系統中,若源碼編譯成功,且執行結果正確,便可以把程序安裝到系統預先設定的執行文件存放路徑中,若用 bin_PROGRAMS 宏的話,程序會被安裝到 /usr/local/bin下。   make dist 將程序和相關的文檔包裝為一個壓縮文檔以供發布。執行完在目錄下會產生一個以PACKAGE-VERSION.tar.gz 為名稱的文件。PACKAGE 和 VERSION 這兩個參數是根據 configure.in 文中 AM_INIT_AUTOMAKE(PACKAGE, VERSION) 的定義。   make distcheck 和 make dist 類似,但是加入檢查包裝以後的壓縮文件是否正常,這個目標除了把程序和相關文檔包裝成 tar.gz 文件外,還會自動把這個壓縮文件解開,執行 configure,並執行 make all ,確認編譯無錯誤以後,方顯示這個 tar.gz 文件已經准備好並可以發布了。     要注意的是,利用 Autoconf 及 Automake 所產生出來的軟件套件是可以在沒有安裝 Autoconf 及 Automake 的環境使用的,因為 configure 是一個 shell script,它己被設計為可以在一般 Unix 的 sh 這個 shell 下執行。但是如果要修改 configure.in 及 Makefile.am 文件再產生新的 configure 及 Makefile.in 文件時就一定要有 Autoconf 及 Automake 了。   1.3 ldd 和 ldconfig   ldd 是用來檢查可執行文件所需要的共享庫。例如: $ ldd /bin/ls      libtermcap.so.2 => /lib/libtermcap.so.2 (0x4001c000)      libc.so.6 => /lib/libc.so.6 (0x40020000)      /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)    我們在 /bin/ls 程序上運行 ldd 命令,就可以檢查該程序所使用的共享庫。注意在 ldd 命令打印的結果中,“=>”左邊的表示該程序需要連接的共享庫之 so 名稱,右邊表示由 Linux 的共享庫系統找到的對應的共享庫在文件系統中的具體位置。默認情況下,/etc/ld.so.conf 文件中包含有默認的共享庫搜索路徑,例如: /usr/X11R6/lib  /usr/lib  /usr/i486-linux-libc5/lib  /usr/lib/qt-2.0.1/lib  /usr/lib/qt-1.44/lib  /usr/lib/qt-2.1.0/lib  /usr/kerberos/lib  /usr/lib/qt-1.45/lib    如果 ldd 沒有找到對應的共享庫文件的具體位置,可能是兩種情況引起的:   共享庫沒有安裝在該系統中;   共享庫保存在 /etc/ld.so.conf 文件列出的搜索路徑之外的位置。     通常情況下,許多開放源代碼的程序或函數庫都會默認將自己安裝到 /usr/local 目錄下的相應位置(/usr/local/bin 或 /usr/local/lib),以便與系統自身的程序或函數庫相區別。而許多 Linux 系統的 /etc/ld.so.conf 文件中默認又不包含 /usr/local/lib。因此,往往會出現已經安裝了共享庫,但是卻無法找到共享庫的情況。這時,就應該檢查 /etc/ld.so.conf 文件,如果其中缺少 /usr/local/lib 目錄,就應該添加進去。   在修改了 /etc/ld.so.conf 文件或者在系統中安裝了新的函數庫之後,還要運行一個命令,即 ldconfig。該命令用來刷新系統的共享庫緩存,即 /etc/ld.so.cache 文件。為了減少共享庫系統的庫搜索時間,共享庫系統維護了一個共享庫 so 名稱的緩存文件。因此,在安裝新的共享庫之後,一定要運行 ldconfig 刷新該緩存。   2 MiniGUI 的依賴庫  為了正確安裝 MiniGUI,需要了解 MiniGUI 的正常運行需要哪些函數庫,也即 MiniGUI 的依賴庫。在編譯 MiniGUI 之前,首先要確保正確安裝了所需的依賴庫。     2.1 LibGGI 或者 SVGALib   這兩個函數庫可以為 MiniGUI 提供底層圖形支持,我們稱之為“圖形引擎”。其中 SVGALib 是一個比較老的函數庫,只提供對 Linux 控制台的支持;LibGGI 是一個比較新的圖形函數庫,提供了對 Linux 控制台、X Window 等的支持,並且接口相對簡單。要正確使用 MiniGUI,需要安裝 LibGGI 或者 SVGALib 的修訂版。筆者建議安裝 LibGGI,因為它提供了對 Linux 控制台和 X 的支持。在 Linux 下,建立在 LibGGI 之上的程序既可以運行在 Linux 控制台上,也可以運行在 X Window 上,從而可以提高程序的可移植性。並且對 MiniGUI 來說,如果能夠運行在 X Window 上,就可以大大方便程序的調試。LibGGI 的另外一個好處就是在 Linux 控制台上,它可以運行在 Linux 2.2 內核所提供的 FrameBuffer 驅動程序之上,而不需要對顯示芯片進行直接的硬件編程,因而也不需要超級用戶權限去運行程序。這點和 SVGALib 不同,SVGALib 不支持 FrameBuffer,同時需要超級用戶權限。   如果讀者使用的是 Linux 內核 2.0.xx,就必須使用 SVGALib。這個函數庫實際是兩個庫組成的,即 vga 和 vgagl。MiniGUI 使用的是 vgagl,該函數庫在 vga 之上運行,提供了較好的圖形函數。但是,我們不能使用標准的 SVGALib 函數庫,因為該函數庫和 Linux 上的 Pthread 函數庫相沖突――它們均使用了 SIGUSR1 和 SIGUSR2 這兩個由操作系統保留給應用程序的信號,從而會導致不可預料的結果。為此,我們對 SVGALib 進行了修改。讀者應該使用經過我們修改的 SVGALib 函數庫,該函數庫同時提供了用於處理 GB2312 字體顯示的函數。還要注意的是,標准 SVGALib 的 vgagl 庫不提供對標准 VGA 16 色模式的支持,因此,如果要在 VGA 16 色模式下運行 MiniGUI,需要下載 vgagl4 函數庫。   以上提到的函數庫可以從如下 URL 處下載: FTP://ftp.minigui.org/pub/dep-libs/libggi-2.1beta2.0-20000316.tgz  ftp://ftp.minigui.org/pub/dep-libs/ svgalib-1.4.0-hz.tar.gz  ftp://ftp.minigui.org/pub/dep-libs/ vgagl4-0.1.0.tar.gz    也可以訪問上述兩個自由軟件項目的站點: http://www.ggi-project.org  http:




Copyright © Linux教程網 All Rights Reserved