天天看點

《嵌入式Linux基礎教程(第2版)》——2.4 嵌入式Linux發行版

本節書摘來自異步社群《嵌入式linux基礎教程(第2版)》一書中的第2章,第2.4節,作者:【美】christopher hallinan(克裡斯托弗 哈利南)著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

到底什麼是linux發行版? linux核心完成系統引導後,它會找到并挂載一個根檔案系統。一旦合适的根檔案系統被成功挂載,啟動腳本會啟動很多系統需要的程式和實用工具。這些程式一般會調用其他程式來完成具體的任務,例如生成一個登入shell、初始化網絡裝置接口和運作使用者的應用程式。每一個程式都有一些必須由系統中其他成員來滿足的具體需求(一般稱為依賴關系)。大多數的linux應用程式都依賴一個或多個系統程式庫。還有一些程式需要配置檔案和日志檔案,諸如此類。總的來說,即使一個小型的嵌入式linux系統也需要很多檔案,這些檔案分布在根檔案系統的合适的目錄中。

完整的桌面linux系統的根檔案系統中包含數千個檔案。這些檔案來自軟體包(package),而軟體包通常按照功能來組合檔案。軟體包由一個包管理器負責安裝和管理。紅帽公司(red hat)的rpm就是一個流行的包管理器,它廣泛用于linux系統中安裝、删除和更新軟體包。如果你的工作站采用了紅帽公司的linux作業系統,包括fedora系列,你可以使用指令rpm –qa來列出系統中已安裝的所有軟體包。如果你使用的是基于debian的發行版,例如ubuntu,使用指令dpkg –l即可獲得同樣的效果。

一個軟體包可以包含很多檔案,事實上,有的軟體包中包含了數百個檔案。一個完整的linux發行版會包含幾百個甚至幾千個軟體包。下面列出一些嵌入式linux發行版中可能存在的軟體包,并說明它們的功能。

initscripts包含了基本的系統啟動和關閉腳本。

apache實作了流行的apache web伺服器。

telnet-server包含了實作遠端登入伺服器(telnet server)功能的必要檔案,允許你遠端登入到嵌入式目标上。

glibc實作了标準c程式庫。

busybox包含了很多指令行工具的精簡版本,這些工具都是unix/linux系統中的常用工具。

這就是linux發行版的作用。一個典型的linux發行版包含好幾張CD光牒的内容,其中裝滿了有用的應用程式、程式庫、實用工具和文檔等。當linux發行版安裝好之後,使用者就可以使用功能完備的系統了,這個系統基于一組預設的配置合理的選項,這些選項也可以根據具體需要進行調整。你可能熟悉某個流行的桌面linux發行版,比如red hat或ubuntu。

針對嵌入式目标的linux發行版與一般的桌面發行版之間有很多不同之處。首先,嵌入式發行版中的二進制可執行程式是不能在pc上運作的,它們是針對嵌入式系統所使用的硬體架構和處理器而開發的。(當然,如果你的嵌入式系統使用和pc一樣的x86架構,情況可能會有所不同。)桌面linux發行版通常包含很多面向普通桌面使用者的圖形使用者界面(gui)工具,例如花哨的圖形時鐘、電腦、個人時間管理工具和電子郵件用戶端等。嵌入式linux發行版往往會省略這類應用程式,而是更多地提供面向開發者的專用工具,如記憶體分析工具和遠端調試工具等。

另外,嵌入式發行版中一般會包含交叉開發工具,而不是本地開發工具。例如gcc工具鍊,它運作于采用x86架構的桌面pc,但是會生成可以運作于目标系統的二進制代碼,而這個目标系統的架構一般不是x86。這個工具鍊中的很多其他工具也都是按照類似的方式進行配置的:它們運作于開發主機(通常是一台x86架構的pc),但生成針對其他架構(例如arm或power)的目标檔案。

2.4.1 商業linux發行版

有好幾個廠商提供商業嵌入式linux發行版。嵌入式linux的上司廠商已經在此行業經營多年了。獲得關于這些廠商的資訊還是相對容易些的。在網際網路上快速搜尋 “嵌入式linux發行版”(embedded linux distributions),就會獲得不少這方面的資訊。

2.4.2 打造自己的linux發行版

你可以自己組裝嵌入式項目所需的所有元件。但要知道這樣做的風險,以及是否值得為此付出。如果你純粹出于興趣而專注于嵌入式linux,比如參與一個興趣小組或大學裡的項目,自己做是個不錯的選擇。然而,如果是做項目你就需要斟酌了,将項目所需的所有工具和實用程式組裝在一起,并保證它們之間能夠相容是需要花費大量時間的。

新手需要一個工具鍊。gcc和binutils都可以從www.fsf.org及遍布世界的鏡像網站獲得。在一個項目中,這兩個工具都是編譯核心和使用者空間應用程式所必需的。這些工具主要是以源碼的方式釋出的,是以你必須自行編譯,以适合特定的交叉開發環境。在獲得這些實用程式的最新 “穩定版”源碼後,你通常還需要對這些源碼打更新檔,特别是當這些程式用于非x86/ia32架構的系統時。這些更新檔程式一般都和基本的軟體包存放在同一位置。你所面對的挑戰就是找到那些合适的更新檔程式,以滿足特定問題或架構的需要。

準備好工具鍊以後,你還需要下載下傳和編譯很多應用程式軟體包,以及它們所依賴的軟體包。這是一個不小的挑戰,因為很多軟體包即使發展到今天也不便于交叉編譯。很多軟體包都是在x86環境下開發的,如果轉換到其他環境下,仍然會出現編譯等類似問題。

挑戰并未到此結束,你也許想搭建一個全能的開發環境,包含很多工具,比如圖形化調試器、記憶體分析工具、系統跟蹤和性能分析工具等。從這裡的讨論你可以看到,搭建你自己的嵌入式linux發行版是一項相當艱巨的任務。