幾種Linux下嵌入式開發(fā)環(huán)境的簡單介紹
uCLinux
uCLinux與emDebian至少有兩個重要的區(qū)別,第一是構(gòu)建方式,前面已經(jīng)提到過了,uCLinux屬于 from scratch 一類的。另一個不同的地方,uCLinux是支持不在emDebian支持的11種CPU的,當然,這個說法不是很恰當,正確的說法是uCLinux支持那些不具備MMU單元的CPU體系。uCLinux的第一個目的是支持MC68328芯片,現(xiàn)在已經(jīng)能構(gòu)支持更多的CPU,如Intel i960,ARM等。不過,uCLinux的主體開發(fā)團隊目前已經(jīng)不再支持ARM了,還好 Samsung 的 Hyok S. Choi 接過了接勵棒,Linux 2.6版本的補丁可以在 uCLinux/ARM2.6 找到。
uCLinux之前僅是核心的一些補丁,后來發(fā)展成為一個包括核心、庫、應(yīng)用程序、工具和編譯相關(guān)的配置文件的一個集成開發(fā)環(huán)境。與 buildroot不同的是,uCLinux不編譯目標系統(tǒng)的工具集,也就是說,相應(yīng)的編譯工具應(yīng)該提前安裝好。如,對于arm來說,需要先安裝ARM交叉編譯器。uCLinux的編譯器也需要一些補丁,其中比較重要的兩個方面主要包括:
用于生成FLT文件的補?。河捎贛MU的關(guān)系,uCLinux不支持ELF可執(zhí)行文件,這個補丁主要包括bin2flt工具包和一個ld的wrapper腳本等,用于(透明于用戶)生成FLT文件;
用于支持XIP(Execute In Place)的補丁:這個補丁需要對gcc進行一些小的修改;支持XIP主要是為了解決小內(nèi)存環(huán)境中運行的問題。
XIP不一定適用于每種應(yīng)用環(huán)境,對于內(nèi)在要求特別嚴格的系統(tǒng)來說(空間第一位,如手機要求使用片內(nèi)RAM),可以通過將核心和應(yīng)用程序編譯為XIP支持,然后直接在Flash上運行,內(nèi)存僅用于運行時數(shù)據(jù);而對于性能要求為主的系統(tǒng)(如高速網(wǎng)絡(luò)處理器),則不能因為節(jié)省一點空間而使用XIP將程序直接在Flash上運行,這樣可能會降低指令的讀取速度而影響系統(tǒng)性能(但仍然可以使用 XIP,使程序的多個實例在內(nèi)存中共享代碼空間,以后詳細說); + FLT可執(zhí)行文件支持動態(tài)鏈接庫(目前僅m68k支持,參見 uCdot: Shared libraries under uCLinux mini-HOWTO)的補丁;
uCLinux的編譯過程大致是,首先,通過可視配置界面(menuconfig/xconfig)選取Vendor和board(實際上是選擇了一些配置文件和產(chǎn)品相關(guān)的文件),然后根據(jù)選擇構(gòu)造一個適用于target的開發(fā)環(huán)境,如生成頭文件和需要的庫文件(uClibc、glibc或uC-libc 以及其它一些庫),然后編譯核心、庫、應(yīng)用程序,最后將所有的輸出安裝到romfs目錄中,根據(jù)需要生成目標平臺需要的映像文件(如: romfs.img、Linux.bin、rootfs.gz等)
由于一些過程細節(jié)被隱藏起來,uCLinux現(xiàn)在的編譯過程方便到只需要配置一下(make menuconfig),然后 make 就可以直接獲得最終輸出。不過這反倒成為一些初學者學習的一個麻煩,本文完成后,根據(jù)對本文的反饋,將進一步對uCLinux進行詳細介紹。
總的來說,目前的uCLinux是一套主要用于無MMU核(但不限于此)的嵌入式Linux集成環(huán)境,也是一個非常好的 Linux from scratch 的示例。拋開其MMU相關(guān)的補丁,uCLinux也可以作為一套用于包含MMU系統(tǒng)的集成開發(fā)環(huán)境,Snapgear 就是一個很好的例子。實際上,我們可以從官方的uCLinux源碼就可以直接編譯一個支運行于X86的uCLinux。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論