做Linux嵌入式系統的對常見的幾種嵌入式開發環境一定不會默生,由於主要接觸網絡相關產品的一些系統設計,因此,將可能用到的嵌入式開發環境簡要總結一下。主要涉及下面的幾個東東:
emDebian - emdebian.sourceforge.net
uClinux - www.uclinux.org
buildroot - buildroot.uclibc.org
scratchbox - www.scratchbox.org
openEmbedded - http://oe.handhelds.org
emDebian
emDebian基於將Debian用於嵌入式系統的目的而開發。Debian是一個發展很快的項目,在我第一次用Debian時,就再也不願意換用其它的發布版了,目前我用的Debian已經安裝了有兩年的時間了,但現在系統仍然是“最新”版本,良好的在線軟件升級系統是Debian成功的原因之一。目前Debian已經支持11個體系的系統,包括X86、PPC、MIPS、ARM、SH等(據最近的一則消息,ARM有可能不再支持),並包含了大量的軟件。這些要歸功於Debian的開發團隊,正因為有許多人使用和支持,因此,不是比較偏門的軟件,基本上不需要從源碼來安裝,這也是我喜歡用 Debian的原因之一。
這樣好的一個系統,當然有人願意將其用到嵌入式系統中去。emDebian基於一個很簡易的嵌入式系統開發的想法來構造嵌入式系統,即從一個成熟的系統中去除不需要的部份(如文檔和不需要的工具),精簡出一個小的系統,這與下面要介紹的幾個工具的想法剛好相反(下面幾個都是基於 from scratch 即從無到有,從頭構建的方式)。emDebian提供一些工具來協助完成從現有的系統或安裝包(deb文件,類似Redhat的rpm)中提取需要的東東,並協助完成完整系統的構建,當然也支持交叉構建了,比如你可以在X86 的PC上構建一個基於ARM的嵌入式系統,而整個過程不需要編譯任何一行源代碼。
順理成章的,emDebian的重要優勢就展現出來了,現在你用的CPU超出11個Debian支持范圍了嗎?沒有,那麼你可以簡單的通過 emDebian構建目標系統;你所需要的主體軟件在Debian支持的官方和非官方近2萬個軟件以外嗎?沒有,那麼恭喜你,明天就可以給老板交工了。當然,對於特定的軟件,可能還是需要從源碼來構建,不過同樣的,我們可以將其生成Deb包,然後將配置加到emDebian工具集中,同其它所有軟件一樣的選取和配置。
emDebian的發展似乎不是想像的那麼好,現在主頁上的新聞更新還是去2004年的。
buildroot
emDebian實際上並不一定適合於資源非常緊缺的超小型系統,比如只有2M Flash的小型控制系統。另外發行版的軟件通常會以通用代碼來編譯,例如,為了盡可能在各種X86平台上都能夠安裝,大多數發行版通常會以i686甚至 i386代碼集來編譯軟件,可以使文件的通用性很強,但CPU的性能卻不能發恢到最好(這就是為什麼有時會看到一些廠商或愛好者發布PIII、PIV、 athlon等優化系統的原因),這對於嵌入式系統來說也不會是一件好事情。另外,沒有源碼的控制權,一些需要定制的東西也會變得難以實現,因此,從源碼開始構建仍然有必要。
嵌入式Linux開發中使用的CPU速度往往向對不會太高,因此,盡可能提高代碼的性能就非常必要。通常開發人員應該對該CPU的具體型號有一定的了解,以便啟用編譯器中對該型號的優化,以ARM為例,我們可以通過 -march=armv5te 和 -mtune=arm9tdmi 來對代碼在ARM9上的運行進行優化。有時這些優化體現出來的性能改善是比較大的,我曾對比過一些復雜算法的代碼優化前後的性能(執行速度),都有一定的提升。另外在PIV上測試過以i686和pentium4對一個語音編碼算法進行優化,運算速度居然提高了幾倍。
這種幅度的提升可能只是一個特例,這個算法有大量的復雜浮點運算,使用i386或i686指令集和使用更先進的PIV指令集編譯出來的機器代碼對於同一個運算的解釋可能采用完全不同的指令來完成,因此性能提升較大就不足為奇了。同樣這種代碼,在ARM上通過ARM4和ARM5來優化後在ARM9上運行,卻沒有那麼大的提升。看來對CPU的一定了解也應該是嵌入式系統軟件設計者應該具備的能力。