教你輕松控制uClinux 嵌入式開發(fā)過(guò)程
通常,如果應(yīng)用程序不是在fork()之后立即調(diào)用exec(),就有必要在fork()被替換成vfork()之前做仔細(xì)的檢查。
2.應(yīng)用程序
盡管uClinux的Flat可執(zhí)行格式并不會(huì)直接影響應(yīng)用程序和它們的執(zhí)行,但是它允許許多普通Linux下的ELF可執(zhí)行格式所不允許的選項(xiàng)。比如,F(xiàn)lat可執(zhí)行格式帶來(lái)兩個(gè)衍生系統(tǒng)—完全重定位和位置無(wú)關(guān)代碼(Position-Independent Code,簡(jiǎn)稱PIC)的變體。完全重定位系統(tǒng)將對(duì)應(yīng)用程序的代碼和數(shù)據(jù)進(jìn)行重定位,而PIC系統(tǒng)通常只需要對(duì)數(shù)據(jù)進(jìn)行部分重定位。
對(duì)嵌入式開發(fā)者最有用的特性就是運(yùn)行時(shí)空間大小不變(Execute-In-Place,簡(jiǎn)稱XIP)。這樣應(yīng)用程序可以直接從閃存(Flash)或ROM 中運(yùn)行,因?yàn)橹恍枰獞?yīng)用程序所需占用的內(nèi)存即可。不是所有的uClinux平臺(tái)都實(shí)現(xiàn)了XIP,因?yàn)樗枰幾g器的支持以及Flat可執(zhí)行格式的PIC形式。
uClinux下的Romfs是惟一支持XIP的文件系統(tǒng)。要實(shí)現(xiàn)XIP,應(yīng)用程序就必須被連續(xù)地裝載到文件系統(tǒng)。 Flat格式還在它的頭部定義了應(yīng)用程序的棧大小。要增加分配給應(yīng)用程序的棧,只需要簡(jiǎn)單地修改該部分,可以使用flthdr命令實(shí)現(xiàn),格式如下:
flthdr -s flat-executable
Flat格式還允許整個(gè)可執(zhí)行文件被壓縮,以盡量縮小占用ROM的空間。它還有一個(gè)次要的作用就是使應(yīng)用程序完全地裝載到一個(gè)連續(xù)的RAM塊中。既想節(jié)省ROM空間,又想使用XIP的時(shí)候,還可以選擇Data-Segment-Only壓縮形式。
生成一個(gè)完全壓縮的可執(zhí)行文件:
flthdr -z flat-executable
只是生成壓縮數(shù)據(jù)段:
flthdr -d flat-executable
特別小心共享庫(kù)
uClinux下的共享庫(kù)各有不同。目前可用的解決方法需要修改編譯器,并需要開發(fā)者特別小心。其實(shí),當(dāng)前的uClinux發(fā)行版本中提供了uC-libc和uClibc庫(kù),最好的方法是以這兩個(gè)庫(kù)為例子來(lái)創(chuàng)建自己的共享庫(kù)。
另外,uClinux下的共享庫(kù)必須是Flat格式的可執(zhí)行文件,并且要真正實(shí)現(xiàn)共享,必須實(shí)現(xiàn)XIP。如果不實(shí)現(xiàn)XIP,共享庫(kù)就會(huì)為每個(gè)使用它的應(yīng)用程序創(chuàng)建一份拷貝,這還不如使用靜態(tài)鏈接應(yīng)用程序。
小結(jié)
uClinux趨向于更深入的嵌入式系統(tǒng),它需要更少的內(nèi)存,并可直接在ROM上運(yùn)行。如果初次在uClinux下開發(fā)的人遇到?jīng)]有硬件驅(qū)動(dòng)、有嚴(yán)格的資源限制,以及沒有內(nèi)存保護(hù)等一系列的情況,最好的入手方法就是使用uClinux仿真器(見圖2)。
圖2 uClinux仿真器Xcopilot
強(qiáng)調(diào)以上這些問(wèn)題有助于開發(fā)者提前做好準(zhǔn)備,避免在uClinux下工作時(shí)常遇到陷阱和誤解。
評(píng)論