无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频

中國自動化學會專家咨詢工作委員會指定宣傳媒體
新聞詳情

幾種Linux下嵌入式開發環境的簡單介紹

http://www.moduwu.com 2007-08-30 12:00

   做Linux嵌入式系統的對常見的幾種嵌入式開發環境一定不會默生,由于主要接觸網絡相關產品的一些系統設計,因此,將可能用到的嵌入式開發環境簡要總結一下。主要涉及下面的幾個東東:
   emDebian - http://emdebian.sourceforge.net
   uClinux - http://www.uclinux.org
   buildroot - http://buildroot.uclibc.org
   scratchbox - http://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的一定了解也應該是嵌入式系統軟件設計者應該具備的能力。
   那么又如何控制可執行文件的大小呢?除了卻除軟件中不需要的部份外,我們還應該考慮軟件所引用的庫文件。GNU的Glibc是一個非常寵大而完整的庫,至少對于嵌入式系統來說,其體積顯得過于大了一些。uClibc的提出較好的解決了這樣一個問題。uClibc盡可能的兼容Glibc,大多數應用程序可以在很小或完全不修改的情況下就可能使用uClibc替代glibc。通過 uClibc來代替Glibc,可以在不改變應用程序功能的前提下,大大減少發布文件的大小,無論應用程序以靜態鏈接來編譯,還是以動態鏈接形式編譯。
   不過使用uClibc代替并不是簡單的設置一兩個參數就行了,通常需要使用一個不同的工具集(gcc/binutils等)來編譯代源碼。手工的構造這樣一個環境,對于大多數普通程序員來說,不一定是一件很簡單的事情,因此, uClibc的開發者創造出一個叫做buildroot的工具集。 buildroot將自動構造編譯基于uClibc代碼的工具集和uClibc庫,并提供一個可配置的框架和一些構建一個基本系統的配置文件。用戶只需要通過配置菜單選擇了相應的目標軟件,buildroot就可以從構建基本工具集開始,一直到最后構建出目標系統所需要的東西,如嵌入式系統常用的基于 ext2的initrd,jffs根文件系統,壓縮的根目錄樹等,這些代碼都是基于uClibc而不是系統的Glibc的。Buildroot對主機系統的要求較小,通常只需要主機系統提供足以構建工具鏈(toolchain)的工具,如gcc/binutils等,當工具鏈編譯完成后,對目標系統需要的源碼的編譯過程與主機系統的開發工具集基本上就沒有什么關系了。因此,不同的主機如果能夠通過第一步,編譯完成工具鏈,那么編譯出來的目標系統的執行代碼就可以幾乎不存在由于系統引起的差異。這樣,開發人員就可能在各自喜歡的Linux發行版上進行開發,而不必擔心出現什么兼容性問題。
uClinux
   uClinux與emDebian至少有兩個重要的區別,第一是構建方式,前面已經提到過了,uClinux屬于 from scratch 一類的。另一個不同的地方,uClinux是支持不在emDebian支持的11種CPU的,當然,這個說法不是很恰當,正確的說法是uClinux支持那些不具備MMU單元的CPU體系。uClinux的第一個目的是支持MC68328芯片,現在已經能構支持更多的CPU,如Intel i960,ARM等。不過,uClinux的主體開發團隊目前已經不再支持ARM了,還好 Samsung 的 Hyok S. Choi 接過了接勵棒,Linux 2.6版本的補丁可以在 uClinux/ARM2.6 找到。
   uClinux之前僅是核心的一些補丁,后來發展成為一個包括核心、庫、應用程序、工具和編譯相關的配置文件的一個集成開發環境。與 buildroot不同的是,uClinux不編譯目標系統的工具集,也就是說,相應的編譯工具應該提前安裝好。如,對于arm來說,需要先安裝ARM交叉編譯器。uClinux的編譯器也需要一些補丁,其中比較重要的兩個方面主要包括:
   用于生成FLT文件的補丁:由于MMU的關系,uClinux不支持ELF可執行文件,這個補丁主要包括bin2flt工具包和一個ld的wrapper腳本等,用于(透明于用戶)生成FLT文件;
用于支持XIP(Execute In Place)的補丁:這個補丁需要對gcc進行一些小的修改;支持XIP主要是為了解決小內存環境中運行的問題。
   XIP不一定適用于每種應用環境,對于內在要求特別嚴格的系統來說(空間第一位,如手機要求使用片內RAM),可以通過將核心和應用程序編譯為XIP支持,然后直接在Flash上運行,內存僅用于運行時數據;而對于性能要求為主的系統(如高速網絡處理器),則不能因為節省一點空間而使用XIP將程序直接在Flash上運行,這樣可能會降低指令的讀取速度而影響系統性能(但仍然可以使用 XIP,使程序的多個實例在內存中共享代碼空間,以后詳細說); + FLT可執行文件支持動態鏈接庫(目前僅m68k支持,參見 uCdot: Shared libraries under uClinux mini-HOWTO)的補丁;
   uClinux的編譯過程大致是,首先,通過可視配置界面(menuconfig/xconfig)選取Vendor和board(實際上是選擇了一些配置文件和產品相關的文件),然后根據選擇構造一個適用于target的開發環境,如生成頭文件和需要的庫文件(uClibc、glibc或uC-libc 以及其它一些庫),然后編譯核心、庫、應用程序,最后將所有的輸出安裝到romfs目錄中,根據需要生成目標平臺需要的映像文件(如: romfs.img、linux.bin、rootfs.gz等)
   由于一些過程細節被隱藏起來,uClinux現在的編譯過程方便到只需要配置一下(make menuconfig),然后 make 就可以直接獲得最終輸出。不過這反倒成為一些初學者學習的一個麻煩,本文完成后,根據對本文的反饋,將進一步對uClinux進行詳細介紹。
   總的來說,目前的uClinux是一套主要用于無MMU核(但不限于此)的嵌入式Linux集成環境,也是一個非常好的 Linux from scratch 的示例。拋開其MMU相關的補丁,uClinux也可以作為一套用于包含MMU系統的集成開發環境,Snapgear 就是一個很好的例子。實際上,我們可以從官方的uClinux源碼就可以直接編譯一個支運行于X86的uClinux。
Scratchbox
   Scratchbox 的故事要從buildroot講起(這不一定是scratchbox開發者的故事,只是依據我個人的認識)。buildroot可以從頭開始,先構造編譯器和基本開發環境,然后根據用戶配配置構造一個適用于目標平臺的根文件系統。這個文件系統可以有許多用法,例如,做為initrd或通過NFS輸出給目標系統使用。為了減少交叉編譯軟件帶來的麻煩,可以配置buidroot創建一套目標系統的編譯環境(Gcc、binutils、lib等),這樣用戶可以通過這個基本文系統在目標系統上直接本地編譯軟件。如果目標系統性能足夠的話,buildroot的任務到此就基本結束了。對于嵌入式系統的開發者來說,在目標系統上直接編譯代碼卻不一定都能夠實現,因為多數情況下,我們的目標平臺處理器性能并不會那么高,這樣,我們就不得不面對一個兩難的選擇: 繼續通過buildroot編譯其它的軟件,性能會高許多,但每個軟件都需要進行交叉編譯相關的改造;
   在目標平臺上編譯軟件,對于只有幾十或幾百兆的低性能核來說,編譯一個核心可能會讓你等上半天的時間;
   有沒有好的辦法解決性能和交叉編譯的問題呢?先分析一下通過buildroot交叉編譯不能解決的問題。Buildroot只在一定程度上對目標平臺進行了模擬,但仍有一些是無法實現的,例如,當目標平臺不同于主機平臺時,不能生成并運行目標平臺的中間代碼。這樣,許多通過autotools (autoconf/automake)配置的軟件就可能會出現問題。例如,configure 腳本有時會生成一些中間代碼,并試圖運行以確認開發環境中是否存在某個庫文件或頭文件,對于在X86上編譯基于uClibc X86目標平臺代碼可能不會出現問題,但如果目標平臺是X86以外的平臺,編譯就可能會中斷;又如,configure腳本確認編譯器是否工作,會試圖編譯一個包含空的主程序的代碼并運行,實際一個可運行于目標平臺的 a.out 確實生成了,也可以正常運行于目標平臺,但是這個測試會因為 a.out 被運行在主機系統上而錯誤的中斷。這些問題一些被 buildroot 通過補丁或復雜的 configure 參數解決了,某些中間執行文件,則通過HOSTCC(主機上的CC)來生成并運行以生成最終文件。目前buildroot包含的軟件或多或少都會有一些這樣的補丁,而且開發者一旦深入到對軟件的定制,就會不停的被這些問題所困擾。
   Scratchbox相比于buildroot有幾方面的改進:
   運行于 chroot 的環境,完全獨立于主機,編譯過程將基本與主機系統無關(并且scratchbox修改了一些庫,使得普通用戶可以chroot到編譯環境中,并且多個用戶可以同時使用一套Scratchbox開發套件和完全獨立的用戶資源);
   透過qemu模擬運行或sbrsh解決中間執行文件或類似configure測試文件運行的問題;
對(chroot后)的系統進行修定,達到足以欺騙大多數軟件的效果,這并不是指的讓軟件可以不進行改造就可以 交叉 編譯,而是使軟件 誤認為 這就是在目標平臺上編譯;
   不過 Scratchbox 目前還只能編譯 ARM 和 x86 的代碼,不能支持 buildroot 所支持的 ppc、mips等。
   本文不詳述每一種環境,因此各個軟件都只是點到為止(雖然可以講得更詳細一些,但這些內容還是獨立出來比較好一些),不過這里還是引入一個很簡單的示例,根據 scratchbox 網站上的文檔,安裝完成后,進行簡單配置就可以使用了(Debian用戶的安裝可以更簡單,因為該站提供Deb包,直接apt-get就行了)。通過 /scratchbox/login 登入開發環境,通過sb-menu配置一個基于 ARM 的環境(其中 Select CPU-transparency method 選qemu不要先sbrsh),然后寫一個 helloword.c,編譯并運行之。 通過ldd可以看到,在沒有任可改動的情況下,順利的生成了ARM ELF,但在 scratchbox 里卻可以在X86的主機上正常的運行!

[sbox-redice: ~] > gcc -o hello hello.c

[sbox-redice: ~] > file hellohello: 

ELF 32-bit LSB executable, ARM, version 1 (ARM),

 for GNU/Linux 2.0.0,dynamically linked (uses shared libs),

 not stripped[sbox-redice: ~] > 

./hellohelo world![sbox-redice: ~] >
版權所有 工控網 Copyright?2026 Gkong.com, All Rights Reserved
无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频
精品久久影院| 日韩精选在线| 日韩av一区二区三区四区| 伊人久久大香伊蕉在人线观看热v| 亚洲综合丁香| 精品伊人久久| 天堂中文av在线资源库| 久久国产欧美| 久久国产88| 欧美片网站免费| 欧美日韩国产探花| 国产精品欧美三级在线观看| 国产成人久久| 日韩视频一区| 三级在线看中文字幕完整版| 日韩不卡视频在线观看| 免费不卡在线视频| 久久这里只有| 美女精品在线观看| 亚洲高清影视| 日本不卡免费高清视频在线| 亚洲三级网站| 欧美 日韩 国产一区二区在线视频| 国产videos久久| 中文字幕日韩欧美精品高清在线| 欧美色图国产精品| 欧洲av一区二区| 日本一区二区免费高清| 欧美日韩夜夜| 欧美一级一区| 麻豆视频一区二区| 久久免费福利| 久久精品播放| 午夜国产精品视频免费体验区| 九九在线精品| 亚洲免费成人av在线| 日韩一区二区三区免费视频| 美女在线视频一区| 国产高潮在线| 亚洲欧美在线综合| 毛片在线网站| 久久午夜视频| 免费视频最近日韩| 99视频精品免费观看| 国产99在线| 伊人影院久久| 99精品视频精品精品视频| 五月国产精品| 麻豆久久久久久| 久久精品国产999大香线蕉| 日韩欧美国产精品综合嫩v| 欧美一级专区| 亚洲ww精品| 国产精品一线| 福利一区在线| 蜜臀久久99精品久久一区二区| 久久青草久久| 日韩欧美精品一区| 日韩一级网站| 亚洲欧美日韩国产一区| 免费久久精品视频| 国产精品一级在线观看| 成人在线丰满少妇av| 欧美不卡在线| 国产午夜精品一区在线观看| 日韩精品电影| 日本一区二区三区中文字幕| 久久精品国产福利| 久久精品国内一区二区三区水蜜桃| 激情婷婷欧美| 丝袜亚洲另类欧美| 国产精品伊人| 麻豆亚洲精品| 精品捆绑调教一区二区三区 | 国产精品va| 久久美女性网| 欧美性感美女一区二区| 婷婷视频一区二区三区| 五月婷婷亚洲| 成人羞羞在线观看网站| 国产欧美亚洲一区| 黄色欧美日韩| 亚洲成人国产| 国产一区二区三区成人欧美日韩在线观看| 国产精品av久久久久久麻豆网| 日本不卡在线视频| 99国产精品久久久久久久成人热| 国产精品www.| 国产精品国产三级在线观看| 日韩视频一区| 精品一区免费| 欧美专区一区二区三区| 青青青国产精品| 亚洲午夜精品久久久久久app| 国产日产精品一区二区三区四区的观看方式 | 蜜桃av一区二区在线观看| 国产理论在线| 午夜日韩av| 亚洲精品婷婷| 快she精品国产999| 国产精品一区二区三区www| 亚洲一本视频| 欧美激情五月| 日韩高清不卡| 国产aⅴ精品一区二区三区久久| 国产欧美日韩视频在线| 激情中国色综合| 黄毛片在线观看| 999国产精品| 国产伦乱精品| 久久一区国产| 视频一区欧美日韩| 丝袜av一区| 日产欧产美韩系列久久99| 爽好多水快深点欧美视频| 免费毛片在线不卡| 免费成人性网站| 蜜桃视频第一区免费观看| 不卡在线一区二区| 99精品小视频| 亚洲天堂黄色| 天堂成人国产精品一区| 亚洲性色视频| 国产欧美日韩一级| 亚洲影院天堂中文av色| 久久久精品久久久久久96| 日韩视频不卡| 亚洲一区国产一区| 日韩国产成人精品| 精品国产91| 99成人超碰| 亚洲久久在线| 丝袜av一区| 日韩激情中文字幕| 日韩高清不卡在线| 欧美va亚洲va日韩∨a综合色| 久久精品91| 天堂中文在线播放| 亚洲综合在线电影| 久久久久久久久久久9不雅视频| 日韩在线欧美| 国产99在线| 99精品视频在线| 日韩视频一区| 99久久九九| 99精品网站| 亚洲精品网址| 亚洲激情社区| 精品国产网站| 久久精品午夜| 国产一区视频在线观看免费| 午夜日本精品| 777久久精品| 色综合五月天| 日本 国产 欧美色综合| 亚洲成人三区| 伊人久久大香伊蕉在人线观看热v| 亚洲乱亚洲高清| 免费看久久久| 欧美日韩伊人| 色婷婷久久久| 久久激情网站| 日韩伦理一区| 热久久久久久久| 欧美片第1页| 亚洲啊v在线免费视频| 欧美aa在线观看| 亚洲福利国产| 国产精品蜜月aⅴ在线| 麻豆mv在线观看| 亚洲一区不卡| 国产91欧美| 视频一区视频二区中文| 国产精品欧美一区二区三区不卡| 国产一级一区二区| 精品网站aaa| 欧美色图一区| 亚洲伦乱视频| 日韩精品欧美| 97精品中文字幕| 欧美二三四区| 中文字幕高清在线播放| 日韩综合一区二区| 日本亚洲三级在线| 欧美日韩xxxx| 麻豆久久久久久久| 狠狠久久伊人中文字幕| 久久男人av| 麻豆一区二区99久久久久| 91亚洲精品在看在线观看高清| 99久久久久国产精品| 成人一区而且| 91精品在线观看国产| 日韩大片在线观看| 亚洲一级网站| 国产一区二区三区精品在线观看| 日韩高清欧美激情| 国产精品igao视频网网址不卡日韩| 久久国内精品| 国产精品久久久久蜜臀|