<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 幾種Linux下嵌入式開(kāi)發(fā)環(huán)境的簡(jiǎn)單介紹

          幾種Linux下嵌入式開(kāi)發(fā)環(huán)境的簡(jiǎn)單介紹

          作者: 時(shí)間:2009-11-13 來(lái)源:網(wǎng)絡(luò) 收藏

            buildroot

            emDebian實(shí)際上并不一定適合于資源非常緊缺的超小型系統(tǒng),比如只有2M Flash的小型控制系統(tǒng)。另外發(fā)行版的軟件通常會(huì)以通用代碼來(lái)編譯,例如,為了盡可能在各種X86平臺(tái)上都能夠安裝,大多數(shù)發(fā)行版通常會(huì)以i686甚至 i386代碼集來(lái)編譯軟件,可以使文件的通用性很強(qiáng),但CPU的性能卻不能發(fā)恢到最好(這就是為什么有時(shí)會(huì)看到一些廠(chǎng)商或愛(ài)好者發(fā)布PIII、PIV、 athlon等優(yōu)化系統(tǒng)的原因),這對(duì)于嵌入式系統(tǒng)來(lái)說(shuō)也不會(huì)是一件好事情。另外,沒(méi)有源碼的控制權(quán),一些需要定制的東西也會(huì)變得難以實(shí)現(xiàn),因此,從源碼開(kāi)始構(gòu)建仍然有必要。

            嵌入式開(kāi)發(fā)中使用的CPU速度往往向?qū)Σ粫?huì)太高,因此,盡可能提高代碼的性能就非常必要。通常開(kāi)發(fā)人員應(yīng)該對(duì)該CPU的具體型號(hào)有一定的了解,以便啟用編譯器中對(duì)該型號(hào)的優(yōu)化,以ARM為例,我們可以通過(guò) -march=armv5te 和 -mtune=arm9tdmi 來(lái)對(duì)代碼在ARM9上的運(yùn)行進(jìn)行優(yōu)化。有時(shí)這些優(yōu)化體現(xiàn)出來(lái)的性能改善是比較大的,我曾對(duì)比過(guò)一些復(fù)雜算法的代碼優(yōu)化前后的性能(執(zhí)行速度),都有一定的提升。另外在PIV上測(cè)試過(guò)以i686和pentium4對(duì)一個(gè)語(yǔ)音編碼算法進(jìn)行優(yōu)化,運(yùn)算速度居然提高了幾倍。

            這種幅度的提升可能只是一個(gè)特例,這個(gè)算法有大量的復(fù)雜浮點(diǎn)運(yùn)算,使用i386或 i686指令集和使用更先進(jìn)的PIV指令集編譯出來(lái)的機(jī)器代碼對(duì)于同一個(gè)運(yùn)算的解釋可能采用完全不同的指令來(lái)完成,因此性能提升較大就不足為奇了。同樣這種代碼,在ARM上通過(guò)ARM4和ARM5來(lái)優(yōu)化后在ARM9上運(yùn)行,卻沒(méi)有那么大的提升??磥?lái)對(duì)CPU的一定了解也應(yīng)該是嵌入式系統(tǒng)軟件設(shè)計(jì)者應(yīng)該具備的能力。

            那么又如何控制可執(zhí)行文件的大小呢?除了卻除軟件中不需要的部份外,我們還應(yīng)該考慮軟件所引用的庫(kù)文件。GNU的Glibc是一個(gè)非常寵大而完整的庫(kù),至少對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),其體積顯得過(guò)于大了一些。uClibc的提出較好的解決了這樣一個(gè)問(wèn)題。uClibc盡可能的兼容Glibc,大多數(shù)應(yīng)用程序可以在很小或完全不修改的情況下就可能使用uClibc替代glibc。通過(guò) uClibc來(lái)代替Glibc,可以在不改變應(yīng)用程序功能的前提下,大大減少發(fā)布文件的大小,無(wú)論應(yīng)用程序以靜態(tài)鏈接來(lái)編譯,還是以動(dòng)態(tài)鏈接形式編譯。

            不過(guò)使用uClibc代替并不是簡(jiǎn)單的設(shè)置一兩個(gè)參數(shù)就行了,通常需要使用一個(gè)不同的工具集(gcc/binutils等)來(lái)編譯代源碼。手工的構(gòu)造這樣一個(gè)環(huán)境,對(duì)于大多數(shù)普通程序員來(lái)說(shuō),不一定是一件很簡(jiǎn)單的事情,因此, uClibc的開(kāi)發(fā)者創(chuàng)造出一個(gè)叫做buildroot的工具集。 buildroot將自動(dòng)構(gòu)造編譯基于uClibc代碼的工具集和uClibc庫(kù),并提供一個(gè)可配置的框架和一些構(gòu)建一個(gè)基本系統(tǒng)的配置文件。用戶(hù)只需要通過(guò)配置菜單選擇了相應(yīng)的目標(biāo)軟件,buildroot就可以從構(gòu)建基本工具集開(kāi)始,一直到最后構(gòu)建出目標(biāo)系統(tǒng)所需要的東西,如嵌入式系統(tǒng)常用的基于 ext2的initrd,jffs根文件系統(tǒng),壓縮的根目錄樹(shù)等,這些代碼都是基于uClibc而不是系統(tǒng)的Glibc的。Buildroot對(duì)主機(jī)系統(tǒng)的要求較小,通常只需要主機(jī)系統(tǒng)提供足以構(gòu)建工具鏈(toolchain)的工具,如gcc/binutils等,當(dāng)工具鏈編譯完成后,對(duì)目標(biāo)系統(tǒng)需要的源碼的編譯過(guò)程與主機(jī)系統(tǒng)的開(kāi)發(fā)工具集基本上就沒(méi)有什么關(guān)系了。因此,不同的主機(jī)如果能夠通過(guò)第一步,編譯完成工具鏈,那么編譯出來(lái)的目標(biāo)系統(tǒng)的執(zhí)行代碼就可以幾乎不存在由于系統(tǒng)引起的差異。這樣,開(kāi)發(fā)人員就可能在各自喜歡的發(fā)行版上進(jìn)行開(kāi)發(fā),而不必?fù)?dān)心出現(xiàn)什么兼容性問(wèn)題。

          linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)


          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();