命令:
rpm -i 需要安裝的包文件名
舉例如下:
rpm -i example.rpm 安裝 example.rpm 包;
rpm -iv example.rpm 安裝 example.rpm 包并在安裝過(guò)程中顯示正在安裝的文件信息;
rpm -ivh example.rpm 安裝 example.rpm 包并在安裝過(guò)程中顯示正在安裝的文件信息及安裝進(jìn)度;
RPM 查詢操作
命令:
rpm -q …
附加查詢命令:
a 查詢所有已經(jīng)安裝的包以下兩個(gè)附加命令用于查詢安裝包的信息;
i 顯示安裝包的信息;
l 顯示安裝包中的所有文件被安裝到哪些目錄下;
s 顯示安裝版中的所有文件狀態(tài)及被安裝到哪些目錄下;以下兩個(gè)附加命令用于指定需要查詢的是安裝包還是已安裝后的文件;
p 查詢的是安裝包的信息;
f 查詢的是已安裝的某文件信息;
舉例如下:
rpm -qa | grep tomcat4 查看 tomcat4 是否被安裝;
rpm -qip example.rpm 查看 example.rpm 安裝包的信息;
rpm -qif /bin/df 查看/bin/df 文件所在安裝包的信息;
rpm -qlf /bin/df 查看/bin/df 文件所在安裝包中的各個(gè)文件分別被安裝到哪個(gè)目錄下;
RPM 卸載操作
命令:
rpm -e 需要卸載的安裝包
在卸載之前,通常需要使用rpm -q …命令查出需要卸載的安裝包名稱。
舉例如下:
rpm -e tomcat4 卸載 tomcat4 軟件包
RPM 升級(jí)操作
命令:
rpm -U 需要升級(jí)的包
舉例如下:
rpm -Uvh example.rpm 升級(jí) example.rpm 軟件包
RPM 驗(yàn)證操作
命令:
rpm -V 需要驗(yàn)證的包
舉例如下:
rpm -Vf /etc/tomcat4/tomcat4.conf
輸出信息類似如下:
S.5....T c /etc/tomcat4/tomcat4.conf
其中,S 表示文件大小修改過(guò),T 表示文件日期修改過(guò)。限于篇幅,更多的驗(yàn)證信息請(qǐng)您參考rpm 幫助文件:man rpm
RPM 的其他附加命令
--force 強(qiáng)制操作 如強(qiáng)制安裝刪除等;
--requires 顯示該包的依賴關(guān)系;
--nodeps 忽略依賴關(guān)系并繼續(xù)操作
]]>有很多人都說(shuō)Ubuntu和Fedora有很多相似之處,但就發(fā)布日期來(lái)說(shuō)就非常接近。這兩個(gè)版本的發(fā)布周期大致相同,六個(gè)月發(fā)布一次,都在春季和秋季發(fā)布主要版本。這不10月10日Ubuntu 10.10的發(fā)布似乎還近在眼前呢,我們又迎來(lái)了Fedora 14的閃亮登場(chǎng)。
代號(hào)“Laughlin”的Fedora 14在11月2日如期發(fā)布。Fedora 14使用Linux 2.6.35版核心與KDE 4.5.2、GNOME 2.32桌面環(huán)境,把RedHat的虛擬桌面架構(gòu)(VDI,virtual desktop infrastructure) Spice完整加入,該功能讓Fedora可以主控虛擬桌面,讓遠(yuǎn)端用戶自網(wǎng)路登入使用。 Spice具有2D加速、處理音訊播放與錄制、加密連線等特性。
這次的正式版添加了之前的測(cè)試版沒有的新功能,那就是系統(tǒng)工具鏈升級(jí)及D語(yǔ)言支持。不過(guò),F(xiàn)edora 14的桌面設(shè)置還是搶先吸引了用戶的眼球。Fedora 14的桌面是GNOME的最新發(fā)布版本GNOME2.32。相比較Ubuntu最近才開始使用GNOME,F(xiàn)edora 14則一直堅(jiān)持使用GNOME。這個(gè)完整的發(fā)行版還包括最新版本的桌面KDE4.5.2。
從最新的試用體驗(yàn)來(lái)看,F(xiàn)edora 14以藍(lán)色為主題的GNOME桌面使用起來(lái)很有樂(lè)趣。在它上面你可以找到平時(shí)使用的Linux桌面程序。這些程序包括網(wǎng)頁(yè)瀏覽Firefox;即時(shí)通訊的Empathy;電子郵件和群組軟件Evolution;以及辦公軟件Openoffice。展望未來(lái),F(xiàn)edora的團(tuán)隊(duì)還沒有承諾轉(zhuǎn)換到 OpenOffice fork,LibreOffice,看來(lái)或許會(huì)和Ubuntu的下一個(gè)版本步調(diào)一致吧!
Fedora 14的另一個(gè)亮點(diǎn)則是納入了使用環(huán)境MeeGO 1.0,趕上熱門的平板電腦話題。這個(gè)由Intel及Nokia合作推廣的技術(shù)搭配Sugar CRM展示版、開發(fā)工具使用,展現(xiàn)平板電腦在商務(wù)上的應(yīng)用,與一般平板電腦所強(qiáng)調(diào)的多媒體休閑走向大異其趣。
另一方面,在Fedora中有一些非常靈巧的新功能,使之能很好的工作。我不得不說(shuō)相比于那些使用Fedora系統(tǒng)開發(fā)者和管理者,這些新功能更加適合于Fedora家庭用戶。
但最重要的是獨(dú)立計(jì)算機(jī)環(huán)境的簡(jiǎn)單協(xié)議(SPICE)的到來(lái)。這是一個(gè)桌面介紹的服務(wù)協(xié)議,如微軟的RDP(遠(yuǎn)程桌面協(xié)議)和Citrix的ICA(獨(dú)立計(jì)算架構(gòu)),你用來(lái)運(yùn)行精簡(jiǎn)電腦的桌面。
還有一個(gè)很有意思的特點(diǎn)是你不需要在你自己的桌面或服務(wù)器上自己運(yùn)行Fedora。你現(xiàn)在就可以在亞馬遜靈活計(jì)算機(jī)云(EC2)的服務(wù)器上運(yùn)行Fedora。
該測(cè)試版原來(lái)還有個(gè)隱藏性功能Systemmd,可以快速啟動(dòng)整個(gè)系統(tǒng),并自動(dòng)裝、卸各項(xiàng)服務(wù),亦可制作系統(tǒng)狀態(tài)快照或追蹤系統(tǒng)、服務(wù)及附加套件等各種程序。但是在版本開發(fā)的最后階段被推遲了,計(jì)劃將在Fedora 15中和大家見面。那么到底是什么原因?qū)е耂ystemmd功能最終被擱置呢?本次專輯我們將帶給大家官方的相關(guān)解答,有興趣的朋友可別錯(cuò)過(guò)了。
開篇我們就提到,有很多人都說(shuō)Ubuntu和Fedora有很多相似之處,但是Ubuntu10.10和Fedora 14注重的側(cè)重點(diǎn)還是大不相同的。Ubuntu主要關(guān)注于10.04版本的完善,而Fedora 14則重點(diǎn)關(guān)注于系統(tǒng)基礎(chǔ)設(shè)施的完善。那么這兩個(gè)版本究竟都更新了哪些部分呢?又有什么不同呢?有心要比較的朋友,不妨通過(guò)本次專輯先來(lái)品評(píng)一翻吧!
既然Ubuntu和Fedora非常相似,那么作為用戶來(lái)說(shuō)卻面臨了選擇的難題。在Red Hat的支持下,F(xiàn)edora一直領(lǐng)跑社區(qū)版linux系統(tǒng)。但隨著Canonical公司支持一些開源軟件開發(fā)者,2004年,在Debian的基礎(chǔ)上推出了Ubuntu,情況就有所改變,時(shí)至今日,可以說(shuō)Ubuntu是穩(wěn)穩(wěn)地占據(jù)著Linux排行榜的寶座。
這兩款操作系統(tǒng)毫無(wú)疑問(wèn)都給人留下深刻印象,所以,很多初嘗linux操作系統(tǒng)的人,也時(shí)常糾結(jié)一個(gè)問(wèn)題:選擇誰(shuí)作為你第一個(gè)學(xué)習(xí)的linux操作系統(tǒng)?這里編者通過(guò)整理資料呈現(xiàn)兩者的微妙差別,試圖為你選擇一款適合自己學(xué)習(xí)的linux系統(tǒng)作為依據(jù)。Linux的新人們不妨通過(guò)本次專輯來(lái)做一下自己的選擇吧!
Ubuntu 10.10已經(jīng)于十月登場(chǎng)了,如今Fedora 14帶著最新的開源技術(shù)全面來(lái)襲,那么哪個(gè)更合用戶的胃口呢?大家還是先去試試Fedora 14,再下定論吧!
]]>1:
mipsel-linux-gcc xxxx.o -L/xxxx/lib -lixml -lthreadutil -lpthread -lupnp -o ushare -static
/xxxx/upnpapi.c:216: undefined reference to `pthread_rwlock_init'
應(yīng)該使用下面的命令
mipsel-linux-gcc -o ushare -static -Wall -Wl,--start-group xxxxxx.o -L/xxxx/lib -lixml -lthreadutil -lpthread -lupnp -Wl,--end-group
原因未知
2:
echo -ne "string \n" -ne參數(shù)解釋轉(zhuǎn)義字符
-n do not output the trailing newline
-e enable interpretation of the backslash-escaped characters listed
below
3:
sed /^$/d 刪除文件中的空行
全速運(yùn)行、待機(jī)和睡眠等宏觀行為利用CPU的固有能力通過(guò)降低工作電壓或時(shí)鐘頻率來(lái)節(jié)省功耗。除了全面地改變系統(tǒng)狀態(tài)外,大多數(shù)設(shè)備用戶察覺不到的是,實(shí)際的電源管理也能夠逐漸地改變系統(tǒng)狀態(tài),這種情況在一秒之內(nèi)可以發(fā)生數(shù)百次。
任何動(dòng)態(tài)電源管理策略的基礎(chǔ)都是調(diào)整便攜式設(shè)備中一個(gè)或多個(gè)處理器內(nèi)核的工作電壓和頻率,此外,在高集成度的PowerPC、ARM和基于x86的系統(tǒng)中經(jīng)常包含一個(gè)DSP或智能基帶處理器。的確,諸如英特爾的StrongARM和XScale處理器、TI的OMAP處理器系列以及IBM最近發(fā)布的PowerPC 405LP和Transmeta Crusoe等CPU都提供內(nèi)核電壓和頻率的動(dòng)態(tài)調(diào)節(jié)功能。不過(guò),現(xiàn)代的嵌入式處理器具有非常高的電源效率,以至于CPU并不總是最主要的耗能器件,其它高耗能的器件包括高性能存儲(chǔ)器、彩色顯示器和射頻接口等。因此,如果動(dòng)態(tài)電源管理系統(tǒng)只能調(diào)節(jié)處理器內(nèi)核的電壓和頻率,那么它的用途將有限。
一個(gè)真正有用的動(dòng)態(tài)電源管理方案應(yīng)該可以采用與CPU內(nèi)核運(yùn)行相協(xié)調(diào)或相獨(dú)立的方式,???持對(duì)一系列電壓和時(shí)鐘的快速調(diào)節(jié)。
DPM架構(gòu)
兩個(gè)現(xiàn)有的電源管理方案分別來(lái)自于PC和筆記本電腦領(lǐng)域:一個(gè)是傳統(tǒng)的高級(jí)電源管理(APM)方案,它目前仍然使用在許多基于Linux的便攜設(shè)備中,但在基于微軟操作系統(tǒng)的筆記本電腦和手持設(shè)備中已經(jīng)被逐步淘汰;另一個(gè)是高級(jí)配置和電源接口(ACPI)方案,它是英特爾、東芝和其他一些公司???持的現(xiàn)行標(biāo)準(zhǔn)。在PC、筆記本電腦、服務(wù)器、甚至刀片式通信設(shè)備等商業(yè)硬件中,類似ACPI的系統(tǒng)是人們的首選,但它強(qiáng)烈依賴于流行的x86/IA-32 BIOS 架構(gòu)。
嵌入式系統(tǒng)通常沒有類似于PC中的BIOS,而且通常不具備那么高的機(jī)器抽象水平,能夠把操作系統(tǒng)與低層次的設(shè)備和電源管理活動(dòng)隔離開來(lái)。與其它瞄準(zhǔn)電池供電應(yīng)用的操作系統(tǒng)類似,在嵌入式Linux中,電源管理活動(dòng)需要對(duì)操作系統(tǒng)內(nèi)核和設(shè)備驅(qū)動(dòng)程序進(jìn)行特殊的干預(yù)。不過(guò),需要重點(diǎn)強(qiáng)調(diào)的是,雖然低層次的動(dòng)態(tài)電源管理是駐留在操作系統(tǒng)內(nèi)核中,但電源管理策略和機(jī)制是來(lái)源于中間件和用戶應(yīng)用代碼。
接口和API
理想的電源管理系統(tǒng)應(yīng)盡可能對(duì)更多軟件堆棧層達(dá)到幾乎完全透明的程度。事實(shí)上,這是Transmeta公司在其Crusoe架構(gòu)中所遵循的路線,而且已經(jīng)成為基于BIOS的現(xiàn)有電源管理方案追求的目標(biāo)。然而,具備手持設(shè)備設(shè)計(jì)經(jīng)驗(yàn)的開發(fā)人員證實(shí),系統(tǒng)內(nèi)部各部分之間需要某種程度的直接合作,具體描述如下:
內(nèi)核接口
在面向Linux的DPM架構(gòu)中,內(nèi)核中的DPM子系統(tǒng)負(fù)責(zé)維持整個(gè)系統(tǒng)的電源狀態(tài),并把DPM系統(tǒng)的不同電源管理模塊聯(lián)系在一起。如果內(nèi)核的任何其它部分需要與DPM直接對(duì)話(盡管這種情況相對(duì)較少),那么最好把DPM看成是為驅(qū)動(dòng)程序、中間件和應(yīng)用程序提供服務(wù)的元素。
驅(qū)動(dòng)程序接口
???持DPM功能的設(shè)備驅(qū)動(dòng)程序比默認(rèn)的驅(qū)動(dòng)程序更了解系統(tǒng)狀態(tài):它們?cè)谕獠渴录尿?qū)使下通過(guò)設(shè)定不同的狀態(tài)來(lái)反映或遵循那些操作機(jī)制,或者通過(guò)來(lái)自內(nèi)核DPM子系統(tǒng)的調(diào)用來(lái)反映或遵循那些操作機(jī)制。為了實(shí)現(xiàn)更精確的機(jī)制決策,驅(qū)動(dòng)程序API也允許驅(qū)動(dòng)程序注冊(cè)與它們接口或由它們管理的那些設(shè)備的基礎(chǔ)操作特征。
應(yīng)用程序API
應(yīng)用程序可以分為三類:
*電源管理知會(huì)型(PM-aware)應(yīng)用程序
*在電源管理知會(huì)“包裹器”中的傳統(tǒng)應(yīng)用程序
*不帶有電源管理的傳統(tǒng)應(yīng)用程序
電源管理知會(huì)型應(yīng)用程序能夠利用機(jī)制管理器提供的API,建立其基本的約束條件,并強(qiáng)迫電源管理機(jī)制發(fā)生與其執(zhí)行需求相匹配的變化。不直接帶有電源管理能力的傳統(tǒng)應(yīng)用程序能夠被“包裹”在代碼或補(bǔ)丁中,以達(dá)到較高的效率,但它們也能夠根據(jù)更大范圍的默認(rèn)機(jī)制管理,按默認(rèn)的行為運(yùn)行。
在嵌入式Linux DPM下的實(shí)際機(jī)制包括以下API,如dpm_set_os()(內(nèi)核)、assert_constraint()、remove_constraint()和set_operating_state()(內(nèi)核和驅(qū)動(dòng)程序)、set_policy()和set_task_state()(經(jīng)系統(tǒng)的用戶級(jí)調(diào)用)以及/proc接口。
對(duì)實(shí)時(shí)性能的影響
迄今為止,調(diào)整CPU電壓和頻率對(duì)系統(tǒng)的實(shí)時(shí)性能而言依然是一個(gè)重大挑戰(zhàn)。任何參數(shù)的改變都將導(dǎo)致系統(tǒng)不穩(wěn)定,重新鎖定鎖相環(huán)和其它動(dòng)態(tài)時(shí)鐘機(jī)制也需要相應(yīng)的時(shí)間,這兩個(gè)因素將使系統(tǒng)的響應(yīng)出現(xiàn)長(zhǎng)延時(shí)(有時(shí)達(dá)到數(shù)十毫秒),在此期間,CPU既不能執(zhí)行計(jì)算操作,也不能對(duì)外部事件(中斷)做出響應(yīng)。
TI的OMAP、英特爾的Xscale和IBM的PowerLP等嵌入式處理器能夠在十幾毫秒的延時(shí)內(nèi)調(diào)整頻率,在數(shù)十毫秒的延時(shí)內(nèi)改變電壓,而且所有這些動(dòng)作都不會(huì)中斷系統(tǒng)的操作,從而允許實(shí)現(xiàn)更大膽和更精確的節(jié)電機(jī)制。例如,在處理MPEG視頻幀或IP語(yǔ)音包的過(guò)程中可以降低電壓和頻率。
實(shí)時(shí)性能面臨的一個(gè)更普遍的挑戰(zhàn)是,如何在睡眠模式期間對(duì)中斷做出響應(yīng)。雖然通過(guò)編程,大多數(shù)片上外圍元件在收到中斷之后都可以喚醒系統(tǒng),但開發(fā)者必須謹(jǐn)慎地定義用于喚醒設(shè)備的機(jī)制,并把整個(gè)系統(tǒng)的延時(shí)和存儲(chǔ)器類別考慮在內(nèi),以確保處理中斷的執(zhí)行時(shí)間和用戶空間對(duì)事件的響應(yīng)(優(yōu)先延時(shí))。
向嵌入式Linux發(fā)展的趨勢(shì)
理想情況下,用戶既無(wú)需知道也無(wú)需關(guān)心???撐其手持設(shè)備的底層操作系統(tǒng)。現(xiàn)在,設(shè)備制造商對(duì)操作系統(tǒng)有了更多的選擇余地。雖然微軟一直非常重視品牌,但Windows系列操作系統(tǒng)進(jìn)入手持設(shè)備市場(chǎng)(如蜂窩電話)的規(guī)模卻落后于Symbian和Brew,也落后于嵌入式Linux。設(shè)備制造商轉(zhuǎn)向Linux的原因之一是可以利用標(biāo)準(zhǔn)的電源管理技術(shù)替代專有技術(shù),這樣既能達(dá)到更快的上市時(shí)間,同時(shí)又能滿足終端用戶和運(yùn)營(yíng)商的技術(shù)需求。
]]>以下內(nèi)容含腳本,或可能導(dǎo)致頁(yè)面不正常的代碼 |
---|
說(shuō)明:上面顯示的是代碼內(nèi)容。您可以先檢查過(guò)代碼沒問(wèn)題,或修改之后再運(yùn)行. |
Linux是自由的操作系統(tǒng),它的開放源碼使用戶獲得了最大的自由度。Linux上的軟件
資源十分豐富,每一種通用程序在Linux上都可以找到。
2.功能強(qiáng)大的內(nèi)核,性能高效、穩(wěn)定,多任務(wù)
Linux的內(nèi)核非常穩(wěn)定,它的高效和穩(wěn)定性已經(jīng)在各個(gè)領(lǐng)域,尤其在網(wǎng)絡(luò)服務(wù)器領(lǐng)域,得到了事實(shí)的驗(yàn)證。Linux內(nèi)核小巧靈活,易于裁減,這使得它很適合嵌入式系統(tǒng)的應(yīng)用。
3.支持多種體系結(jié)構(gòu),如X86、ARM、MIPS、ALPHA、SPARC等
目前,Linux已經(jīng)被移植到數(shù)十種硬件平臺(tái)上,幾乎支持所有流行的CPU。
4.完善的網(wǎng)絡(luò)通訊、圖形、文件管理機(jī)制
Linux自產(chǎn)生之日起就與網(wǎng)絡(luò)密不可分,網(wǎng)絡(luò)是Linux的強(qiáng)項(xiàng)。另外,Linux還支持多種文件和圖形系統(tǒng)。
5.支持大量的周邊硬件設(shè)備
Linux上的驅(qū)動(dòng)已經(jīng)非常豐富了,它們支持各種主流硬件設(shè)備和最新硬件技術(shù)。
6.大小、功能都可定制
Linux秉承Unix的優(yōu)秀設(shè)計(jì)思想,非常靈活,各部分的可定制性都很強(qiáng)。
7.良好的開發(fā)環(huán)境,不斷發(fā)展的開發(fā)工具集
Linux有著非常優(yōu)秀的完整開發(fā)工具鏈,有十幾種集成開發(fā)環(huán)境,其中很多是免費(fèi)的,大大降低了開發(fā)費(fèi)用。
8.軟件開發(fā)者的廣泛支持
Linux的自由精神吸引了成千上萬(wàn)的程序員投入到Linux的開發(fā)和測(cè)試中來(lái),這使得Linux在短時(shí)間內(nèi)就成為一個(gè)功能強(qiáng)大的操作系統(tǒng)。
9.價(jià)格低廉
有效降低產(chǎn)品成本,對(duì)成本敏感的嵌入式系統(tǒng)來(lái)說(shuō)至關(guān)重要,Linux恰好具有這一特性。
由此,我們有理由相信,在國(guó)內(nèi)外眾多Linux廠商的推動(dòng)下,嵌入式Linux一定會(huì)成為Internet時(shí)代嵌入式操作系統(tǒng)
]]>Linux具有豐富的網(wǎng)絡(luò)功能,完善的內(nèi)置網(wǎng)絡(luò)是Linux的一大特點(diǎn)。嵌入式Linux專用于微控制器,同樣具有優(yōu)秀的網(wǎng)絡(luò)功能。Linux是一種可移植的操作系統(tǒng),能夠在從微型計(jì)算機(jī)到大型計(jì)算機(jī)的任何環(huán)境中和任何平臺(tái)上運(yùn)行。可移植性為運(yùn)行Linux的不同計(jì)算機(jī)平臺(tái)與其他任何機(jī)器進(jìn)行準(zhǔn)確而有效的通訊提供了手段,不需要另外增加特殊的,昂貴的通訊接口。
該文在構(gòu)建基于嵌入式Linux和MPC852T無(wú)線網(wǎng)關(guān)平臺(tái)的基礎(chǔ)上,編程實(shí)現(xiàn)了無(wú)線網(wǎng)關(guān)平臺(tái)與無(wú)線終端之間的無(wú)線通信,并給出了無(wú)線網(wǎng)關(guān)平臺(tái)與無(wú)線終端之間通信的測(cè)試結(jié)果。
2 Linux下的socket編程
2.1 Socket編程
socket有3種類型:流式套接字、數(shù)據(jù)報(bào)套接字及原始套接字。流式套接字定義了一種可靠的面向連接的服務(wù),實(shí)現(xiàn)了無(wú)差錯(cuò)的數(shù)據(jù)傳輸。數(shù)據(jù)報(bào)套接字定義了一種無(wú)連接的服務(wù),數(shù)據(jù)通過(guò)相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無(wú)序的,并且不保證可靠。原始套接字允許對(duì)低層協(xié)議如IP或ICMP直接訪問(wèn),主要用于新的網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)的測(cè)試等。
無(wú)連接服務(wù)器一般都是面向事務(wù)處理的,一個(gè)請(qǐng)求和一個(gè)應(yīng)答就完成客戶程序與服務(wù)程序之間的相互作用。
面向連接服務(wù)器處理的請(qǐng)求比較復(fù)雜,往往是并發(fā)服務(wù)器。工作過(guò)程如下:服務(wù)進(jìn)程首先調(diào)用socket( )創(chuàng)建一個(gè)字節(jié)流套接字,并調(diào)用bind( )將服務(wù)器地址捆扎在該套接字上,接著調(diào)用listen( )監(jiān)聽連接請(qǐng)求,隨后調(diào)用accept( )做好與客戶進(jìn)程建立連接的準(zhǔn)備,無(wú)連接請(qǐng)求時(shí),服務(wù)進(jìn)程被阻塞。當(dāng)連接請(qǐng)求到來(lái)后,服務(wù)器進(jìn)程被喚醒,建立一個(gè)新的Socket,并用新套接字同客戶進(jìn)程的套接字建立連接,而服務(wù)進(jìn)程最早生成的套接字則繼續(xù)用于監(jiān)聽網(wǎng)絡(luò)上的服務(wù)請(qǐng)求。客戶進(jìn)程調(diào)用socket( )創(chuàng)建字節(jié)流套接字,然后調(diào)用connect( )向服務(wù)進(jìn)程發(fā)出連接請(qǐng)求。服務(wù)進(jìn)程和客戶進(jìn)程通過(guò)調(diào)用read( )/recv( )和Write( )/send( )交換數(shù)據(jù)。
2.2 Linux下的socket函數(shù)庫(kù)
socket是面向用戶的,針對(duì)客戶和服務(wù)器程序提供不同的socket系統(tǒng)調(diào)用。客戶隨機(jī)申請(qǐng)一個(gè)socket,系統(tǒng)為之分配一個(gè)socket號(hào),服務(wù)器擁有全局公認(rèn)的socket,任何客戶都可以向它發(fā)出一個(gè)連接請(qǐng)求和信息請(qǐng)求。無(wú)論socket的內(nèi)部機(jī)制如何,它提供給程序員的最終是一組系統(tǒng)調(diào)用,即socket的庫(kù)函數(shù)。Linux這些庫(kù)函數(shù)同樣適用于嵌入式linux。下面是編制程序常用的庫(kù)函數(shù):
1) socket( ):建立Socket,此函數(shù)用來(lái)建立Socket描述字,并為此Socket建立資源(為一個(gè)Socket數(shù)據(jù)結(jié)構(gòu)分配存儲(chǔ)空間)。應(yīng)用程序在使用socket之前,首先必須擁有一個(gè)socket。socket( )向應(yīng)用程序提供創(chuàng)建socket的手段。socket( )函數(shù)原形為int socket(int domain,int type,int protoco1);函數(shù)中的domain是參數(shù)指定通信中使用的協(xié)議簇,也就是網(wǎng)絡(luò)的類型,通常為PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協(xié)議;protocol是參數(shù)指定通信中使用的協(xié)議。
函數(shù)在正常時(shí)返回socket描述符;否則返回l,錯(cuò)誤狀態(tài)在全局變量error里。
2) bind( ):綁定本地地址,即將一個(gè)本地地址與一個(gè)SOCKET描述字連接在一起。此函數(shù)在服務(wù)程序上使用,是調(diào)用監(jiān)聽函數(shù)listen()必須要調(diào)用的函數(shù)。
Bind函數(shù)原型為:
int bind(int sockfd, struct sockaddr *my_addr, int addrlen)。bind()函數(shù)給已經(jīng)打開的socket指定本地地址。函數(shù)中的sockfd是調(diào)用socket函數(shù)返回的socket描述符;addrlen是my-addr結(jié)構(gòu)的長(zhǎng)度,常被設(shè)置為sizeof(struct sockaddr);my-addr是用于偵聽連接請(qǐng)求的本地地址。
函數(shù)在正常時(shí)返回0,否則返回l,同時(shí)error是系統(tǒng)錯(cuò)誤碼。
3) listen( ):準(zhǔn)備接收連接請(qǐng)求。在用bind()給一個(gè)socket設(shè)定本地地址之后,就可以將這個(gè)socket用于接受連接請(qǐng)求,即listen()。函數(shù)原形為int listen(int s,int backlog);函數(shù)中的s是socket描述符;backlong是連接請(qǐng)求暫存隊(duì)列長(zhǎng)度。
函數(shù)正常時(shí)返回0,否則返回1,同時(shí)error是系統(tǒng)錯(cuò)誤碼。
4) accept( ):服務(wù)端應(yīng)用程序調(diào)用此函數(shù)來(lái)接受客戶端socket連接請(qǐng)求。在系統(tǒng)調(diào)用listen( )之后,系統(tǒng)就在socket的連接請(qǐng)求暫存隊(duì)列里存放每一個(gè)向該socket建立的連接請(qǐng)求,accept()的作用是從該暫存隊(duì)列中取出一個(gè)連接請(qǐng)求,用該socket的數(shù)據(jù),創(chuàng)建一個(gè)新的socket用來(lái)在服務(wù)端和客戶端之間傳遞接收信息,而原來(lái)socket仍然可以接收其他客戶端的連接要求。
函數(shù)正常創(chuàng)建了一個(gè)新的連接,那么返回非負(fù)的整數(shù),即新連接的socket描述符,否則返回l,error是系統(tǒng)錯(cuò)誤碼。
5) connect( ):建立連接。bind( ),listen( )和accept( )都是用于被動(dòng)地等待對(duì)方建立連接時(shí)需要使用的,connect( )函數(shù)是在主動(dòng)地向?qū)Ψ浇⑦B接時(shí)使用的。函數(shù)原形為int connect(int sockfd,struct sockaddr*srvaddr,int addrlen);函數(shù)中的sockfd是socket描述符;srvaddr是通信目的方地址;addrlen是目的地址長(zhǎng)度。
函數(shù)在正常建立連接時(shí)返回0,否則返回l,系統(tǒng)錯(cuò)誤碼在error中。
6) close( ):此函數(shù)是用來(lái)關(guān)閉某一socket。socket和文件描述符的關(guān)閉操作都使用這個(gè)函數(shù)。函數(shù)原形為int close(int fd);參數(shù)fd是socket描述符。函數(shù)在正常時(shí)返回0,返回1表示出錯(cuò)。
7) send( )/recv( ):用于socket的發(fā)送和接收數(shù)據(jù)。在連接建立完成后,通信雙方就可以使用以上這些函數(shù)來(lái)進(jìn)行數(shù)據(jù)的發(fā)送和接收操作。
3 無(wú)線網(wǎng)關(guān)平臺(tái)的構(gòu)建
為了將無(wú)線終端設(shè)備接入控制網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程監(jiān)控,根據(jù)條件構(gòu)建了基于MPC852T和嵌入式Linux的無(wú)線網(wǎng)關(guān)平臺(tái)。MPC852T是Motorola推出的面向低端的一款通信處理器,具有通信和網(wǎng)絡(luò)處理能力強(qiáng)、可靠性高、功耗低、功能集成度高等優(yōu)點(diǎn),并且有眾多的操作系統(tǒng)支持,這使得它在各種嵌入式系統(tǒng),尤其是在網(wǎng)絡(luò)通信以及數(shù)據(jù)采集和傳輸?shù)认到y(tǒng)中的應(yīng)用較為廣泛。
無(wú)線網(wǎng)關(guān)的硬件設(shè)計(jì)方案采用中心控制方案,中央處理器選用MPC852T,在MPC852T外圍配置一個(gè)RS-232串口、一個(gè)10M以太網(wǎng)口、一個(gè)100M以太網(wǎng)接口、SDRAM同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器等構(gòu)成無(wú)線網(wǎng)關(guān)的硬件平臺(tái),無(wú)線網(wǎng)關(guān)的硬件系統(tǒng)結(jié)構(gòu)圖如圖1所示。
4 無(wú)線網(wǎng)關(guān)與無(wú)線終端通信的實(shí)現(xiàn)
嵌入式Linux具有完善的TCP/IP協(xié)議棧,為滿足工業(yè)控制過(guò)程中傳輸數(shù)據(jù)量小、可靠性高、速度快等要求,這里使用socket編程來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)通信。無(wú)線終端通過(guò)無(wú)線網(wǎng)卡與無(wú)線網(wǎng)關(guān)自動(dòng)建立鏈接,無(wú)線終端完成數(shù)據(jù)的采集,并將采集的數(shù)據(jù)以無(wú)線的方式發(fā)送給網(wǎng)關(guān),無(wú)線網(wǎng)關(guān)把收到的數(shù)據(jù)上傳給上位機(jī)進(jìn)行分析、處理,最后計(jì)算出數(shù)據(jù)發(fā)送的速率。
將編寫好的服務(wù)器端和終端程序進(jìn)行交叉編譯,將編譯得到的二進(jìn)制可執(zhí)行文件添加到RAMDISK中,壓縮新生成的ramdisk.image文件系統(tǒng)映像文件,重新編譯Linux內(nèi)核,生成Linux內(nèi)核映像文件,然后將內(nèi)核映像文件燒寫到無(wú)線網(wǎng)關(guān)平臺(tái)的FLASH中。無(wú)線網(wǎng)關(guān)平臺(tái)(服務(wù)器端)的主程序代碼如下:
#define PORT 3000 /*設(shè)定服務(wù)器監(jiān)聽端口*/
………………
int main(int argc,char* argv[ ])
{
int second;
int sockfd,new_fd; /* sockfd為監(jiān)聽用描述符*/
struct sockaddr_in srvaddr; /*定義服務(wù)器sock地址*/
struct sockaddr_in cliaddr; /*定義客戶的sock地址*/
………………
if(bind(sockfd,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr))==-1) /*綁定*/
………………
if(listen(sockfd, QUEUE_SIZE) == -1) /*監(jiān)聽端口是否有請(qǐng)求*/
………………
for(;;){ /*開始服務(wù)器循環(huán)*/
/*等待連接*/
sin_size=sizeof(struct sockaddr_in);
new_fd=accept(sockfd,(struct sockaddr*) &cliaddr,&sin_size); /*接收連接請(qǐng)求*/
printf("Server:Got connection from %s \n",
inet_ntoa(cliaddr.sin_addr));
if(read(new_fd,&second,4)==-1) /*接收連接請(qǐng)求*/
………………
close(new_fd); /*父進(jìn)程不再需要該socket*/
………………;
close(sockfd);
return 0;
}
}
5 測(cè)試結(jié)果
在上位機(jī)開啟通信終端,設(shè)置好串口參數(shù),進(jìn)入超級(jí)終端。無(wú)線網(wǎng)關(guān)平臺(tái)上運(yùn)行服務(wù)器端程序,同時(shí)在終端上運(yùn)行客戶端程序,即可進(jìn)行測(cè)試,測(cè)試結(jié)果如圖2所示。
圖2 無(wú)線網(wǎng)關(guān)與無(wú)線終端測(cè)試結(jié)果圖
6 結(jié) 語(yǔ)
目前基于TCP/IP協(xié)議的工業(yè)以太網(wǎng)的在組網(wǎng)時(shí)仍需要布線,但在工業(yè)現(xiàn)場(chǎng),布線時(shí)常會(huì)受到限制,電纜的連接也限制了現(xiàn)場(chǎng)設(shè)備的移動(dòng)和網(wǎng)絡(luò)結(jié)構(gòu)的重組,還有一些高速旋轉(zhuǎn)設(shè)備根本無(wú)法通過(guò)電纜來(lái)傳輸數(shù)據(jù)。將802.11b無(wú)線通信技術(shù)應(yīng)用于工業(yè)控制網(wǎng)絡(luò),工控網(wǎng)絡(luò)就兼有了無(wú)線通信的優(yōu)點(diǎn):現(xiàn)場(chǎng)設(shè)備無(wú)需電纜即可與控制網(wǎng)絡(luò)連接,實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)的無(wú)線采集和傳輸,對(duì)于在一些不可預(yù)知的環(huán)境,尤其是不適于布線的強(qiáng)腐蝕惡劣環(huán)境。本文作者創(chuàng)新點(diǎn):通過(guò)Linux下的socket編程實(shí)現(xiàn)了無(wú)線網(wǎng)關(guān)與無(wú)線終端的通信,可以使用無(wú)線通信來(lái)完成對(duì)現(xiàn)場(chǎng)設(shè)備的控制。
]]>在華清遠(yuǎn)見的嵌入式培訓(xùn)課程中,Qt是嵌入式學(xué)院<嵌入式工程師職業(yè)培訓(xùn)班>二期課程中嵌入式linux應(yīng)用開發(fā)方面的重要內(nèi)容。不少學(xué)員對(duì)QT方面的內(nèi)容比較關(guān)注,所以在這里我們先對(duì)QT做一下簡(jiǎn)單介紹。
QT
Qt是一個(gè)多平臺(tái)的C++圖形用戶界面應(yīng)用程序框架,由挪威 TrollTech 公司出品。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所用功能。Qt是完全面向?qū)ο蟮暮苋菀讛U(kuò)展,并且允許真正地組件編程。
自1996年Qt進(jìn)入商業(yè)領(lǐng)域開始,它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ)。Qt也是流行的Linux桌面環(huán)境KDE 的基礎(chǔ),KDE是所有主要的Linux發(fā)行版的一個(gè)標(biāo)準(zhǔn)組件。
基本上,Qt 同 X Window (X Window是一種用于UNIX系統(tǒng)的標(biāo)準(zhǔn)圖形化用戶界面)上的 Motif、Openwin、GTK 等圖形界面庫(kù)和 Windows 平臺(tái)上的 MFC、OWL、VCL、ATL是同類型的東西,但是Qt 具有下列優(yōu)點(diǎn):
● 優(yōu)良的跨平臺(tái)特性
Qt支持Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等操作系統(tǒng), Qt的跨平臺(tái)特性,是選擇Qt的一個(gè)非常重要的原因。對(duì)于相同功能的軟件,我們無(wú)須針對(duì)不同的操作系統(tǒng)編寫不同程序,只需將相同的代碼針對(duì)不同的環(huán)境編譯即可;
● 面向?qū)ο?
Qt 的良好封裝機(jī)制使得 Qt 的模塊化程度非常高,可重用性較好,對(duì)于用戶開發(fā)來(lái)說(shuō)是非常方便的。Qt 提供了一種稱為 signals/slots(信號(hào)/槽) 的安全類型來(lái)替代 callback(回調(diào)函數(shù)),這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn)單;
● 豐富的API
● Qt 包括多達(dá)400個(gè)以上的 C++ 類,同時(shí)不斷擴(kuò)展。
● 支持 2D/3D 圖形渲染,支持 OpenGL;
● XML 支持;
● 開放源碼
開放源優(yōu)勢(shì)包括一個(gè)活動(dòng)的開放源開發(fā)員社團(tuán)。由于Qt的不間斷開發(fā),以及完整的代碼透明性,以允許Qt開發(fā)員進(jìn)行徹底深入地查看,進(jìn)行自定義并擴(kuò)展Qt來(lái)滿足其獨(dú)特的需求。
Qt/Embedded
Qt/Embedded是Qt的嵌入式版本,它在原始Qt的基礎(chǔ)上,做了許多出色的調(diào)整以適合嵌入式環(huán)境。同Qt/X11相比,Qt/Embedded很節(jié)省內(nèi)存,因?yàn)樗恍枰猉 server或是Xlib庫(kù),它在底層摒棄了Xlib,采用framebuffer作為底層圖形接口。Qt/Embedded的應(yīng)用程序可以直接寫內(nèi)核幀緩沖,因此它在嵌入式linux系統(tǒng)上的應(yīng)用非常廣泛。
最后再了解下Qtopia
在Qt/Embedded版本4之前,Qt/Embedded和Qtopia是兩套不同的程序,Qt/Embedded是基礎(chǔ)類庫(kù),Qtopia是構(gòu)建于Qt/Embedded之上的一系列應(yīng)用程序。但從版本4開始,Trolltech將Qt/Embedded并入了Qtopia,并推出了新的Qtopia4。在該版中,原來(lái)的Qt/Embedded被稱為Qtopia Core,作為嵌入式版本的核心,既可以與Qtopia配合,也可以獨(dú)立使用。原來(lái)的Qtopia則被分成幾層,核心的應(yīng)用框架和插件系統(tǒng)被稱為 Qtopia Platform,上層的應(yīng)用程序則按照不同的目標(biāo)用戶分為不同的包,如Qtopai PDA,Qtopia Phone等。
于Qt方面的內(nèi)容,除了Qt、基于 Framebuffer(幀緩沖) 的 Qt /Embedded外,還有快速開發(fā)工具 Qt Designer以及國(guó)際化工具 Qt Linguist 等
(1) 指令系統(tǒng)
RISC設(shè)計(jì)者把主要精力放在那些經(jīng)常使用的指令上,盡量使它們具有簡(jiǎn)單高效的特色。對(duì)不常用的功能,則通過(guò)組合指令來(lái)完成。因此,在RISC機(jī)器上實(shí)現(xiàn)特殊功能時(shí),效率可能較低。但可以利用流水技術(shù)和超標(biāo)量技術(shù)加以改進(jìn)和彌補(bǔ)。而CISC計(jì)算機(jī)的指令系統(tǒng)比較豐富,有專用指令來(lái)完成特定的功能。因此,處理特殊任務(wù)時(shí)的效率較高。
(2) 存儲(chǔ)器操作
RISC對(duì)存儲(chǔ)器操作有限制,使控制簡(jiǎn)單化;而CISC機(jī)器的存儲(chǔ)器操作指令多,操作 直接。
(3) 程序
RISC匯編語(yǔ)言程序一般需要較大的內(nèi)存空間,實(shí)現(xiàn)特殊功能的程序復(fù)雜,不易設(shè)計(jì);而CISC匯編語(yǔ)言程序編程相對(duì)簡(jiǎn)單,科學(xué)計(jì)算及復(fù)雜操作的程序設(shè)計(jì)相對(duì)容易,效率較高。
(4) 中斷
RISC機(jī)器在一條指令執(zhí)行的適當(dāng)?shù)胤娇梢皂憫?yīng)中斷;而CISC機(jī)器是在一條指令執(zhí)行結(jié)束后才響應(yīng)中斷。
(5) CPU
RISC CPU包含較少的單元電路,因而面積小、功耗低;而CISC CPU包含豐富的電路單元,因而功能強(qiáng)、面積大、功耗大。
(6) 設(shè)計(jì)周期
RISC微處理器結(jié)構(gòu)簡(jiǎn)單,布局緊湊,設(shè)計(jì)周期短,且易于采用最新技術(shù);CISC微處理器結(jié)構(gòu)復(fù)雜,設(shè)計(jì)周期長(zhǎng)。
(7) 用戶使用
RISC微處理器結(jié)構(gòu)簡(jiǎn)單,指令規(guī)整,性能容易把握,易學(xué)易用;CISC微處理器結(jié)構(gòu)復(fù)雜,功能強(qiáng)大,容易實(shí)現(xiàn)特殊功能。
(8) 應(yīng)用范圍
由于RISC指令系統(tǒng)的確定與特定的應(yīng)用領(lǐng)域有關(guān),故RISC機(jī)器更適合于專用機(jī);而CISC機(jī)器則更適合于通用機(jī)。
2. 嵌入式微控制器
嵌入式微控制器(Microcontroller Unit,MCU)又稱單片機(jī),顧名思義,就是將整個(gè)計(jì)算機(jī)系統(tǒng)集成到一塊芯片中。嵌入式微控制器一般以某一種微處理器內(nèi)核為核心,芯片內(nèi)部集成ROM/EPROM、RAM、Flash、總線、總線邏輯、定時(shí)/計(jì)數(shù)器、WatchDog、I/O、串行口、脈寬調(diào)制輸出、A/D、D/A等各種必要的功能模塊。為適應(yīng)不同的應(yīng)用需求,一般一個(gè)系列的單片機(jī)具有多種衍生產(chǎn)品,每種衍生產(chǎn)品的處理器內(nèi)核都是一樣的,不同之處在于存儲(chǔ)器和外設(shè)的配置及封裝。這樣可以使單片機(jī)最大限度地同應(yīng)用需求相匹配,從而減少功耗和成本。
與嵌入式微處理器相比,微控制器的最大特點(diǎn)是單片化,體積大大減小,從而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系統(tǒng)工業(yè)的主流。微控制器的片上資源一般比較豐富,適合于控制,因此稱為微控制器。
嵌入式微控制器目前的品種和數(shù)量最多,比較有代表性的通用系列包括8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16和68300等。另外還有許多半通用系列,如支持USB接口的MCU 8XC930/931、C540和C541。目前MCU占嵌入式系統(tǒng)約70%的市場(chǎng)份額。
特別值得注意的是,近年來(lái)提供x86微處理器的著名廠商AMD公司將AM186CC /CH/CU等嵌入式處理器稱之為Microcontroller,Motorola公司把以Power PC為基礎(chǔ)的PPC505和PPC555亦列入單片機(jī)行列。TI公司亦將其TMS320C2XXX系列DSP做為MCU進(jìn)行 推廣。
3. 嵌入式DSP處理器
DSP處理器對(duì)系統(tǒng)結(jié)構(gòu)和指令進(jìn)行了特殊設(shè)計(jì),使其適合于執(zhí)行DSP算法,編譯效率較高,指令執(zhí)行速度也較高。在數(shù)字濾波、FFT和譜分析等方面,DSP算法正在大量進(jìn)入嵌入式領(lǐng)域,DSP應(yīng)用正從在通用單片機(jī)中以普通指令實(shí)現(xiàn)DSP功能過(guò)渡到采用嵌入式DSP處理器。嵌入式DSP處理器有兩個(gè)發(fā)展來(lái)源,一是DSP處理器經(jīng)過(guò)單片化、EMC改造和增加片上外設(shè)成為嵌入式DSP處理器,TI的TMS320C2000/C5000等屬于此范疇;二是在通用單片機(jī)或片上系統(tǒng)(SOC)中增加DSP協(xié)處理器,例如Intel的MCS-296。
推動(dòng)嵌入式DSP處理器(Embedded Digital Signal Processor,EDSP)發(fā)展的一個(gè)重要因素是嵌入式系統(tǒng)的智能化,例如各種帶有智能邏輯的消費(fèi)類產(chǎn)品,生物信息識(shí)別終端,帶有加解密算法的鍵盤,ADSL接入,實(shí)時(shí)語(yǔ)音壓解系統(tǒng),虛擬現(xiàn)實(shí)顯示等。這類智能化算法一般都是運(yùn)算量較大,特別是向量運(yùn)算、指針線性尋址等較多,而這些正是DSP處理器的長(zhǎng)處 所在。
嵌入式DSP處理器比較有代表性的產(chǎn)品是Texas Instruments的TMS320系列和Motorola的DSP56000系列。TMS320系列處理器包括用于控制的C2000系列,移動(dòng)通信的C5000系列,以及性能更高的C6000和C8000系列。DSP56000目前已經(jīng)發(fā)展成為DSP56000、DSP56100、DSP56200和DSP56300等幾個(gè)不同系列的處理器。
DSP的設(shè)計(jì)者們把重點(diǎn)放在了處理連續(xù)的數(shù)據(jù)流上。在嵌入式應(yīng)用中,如果強(qiáng)調(diào)對(duì)連續(xù)的數(shù)據(jù)流的處理及高精度復(fù)雜運(yùn)算,則應(yīng)該選用DSP器件。
4. 嵌入式片上系統(tǒng)
隨著VLSI設(shè)計(jì)的普及化及半導(dǎo)體工藝的迅速發(fā)展,可以在一塊硅片上實(shí)現(xiàn)一個(gè)更為復(fù)雜的系統(tǒng),這就是System On Chip(SOC)。各種通用處理器內(nèi)核將作為SOC設(shè)計(jì)公司的標(biāo)準(zhǔn)庫(kù),和許多其他嵌入式系統(tǒng)外設(shè)一樣,成為VLSI設(shè)計(jì)中一種標(biāo)準(zhǔn)的器件,用標(biāo)準(zhǔn)的VHDL等語(yǔ)言描述,存儲(chǔ)在器件庫(kù)中。用戶只需定義出整個(gè)應(yīng)用系統(tǒng),仿真通過(guò)后就可以將設(shè)計(jì)圖交給半導(dǎo)體工廠制作樣品。這樣除個(gè)別無(wú)法集成的器件以外,整個(gè)嵌入式系統(tǒng)大部分均可集成到一塊或幾塊芯片中去,應(yīng)用系統(tǒng)電路板將變得很簡(jiǎn)潔,對(duì)于減小體積和功耗、提高可靠性非常有利。
SOC可以分為通用和專用兩類。通用系列包括Motorola的M-Core,某些ARM系列器件,Echelon和Motorola聯(lián)合研制的Neuron芯片等。專用SOC一般專用于某個(gè)或某類系統(tǒng)中,不為一般用戶所知。一個(gè)有代表性的產(chǎn)品是Philips的SmartXA,它將XA單片機(jī)內(nèi)核和支持超過(guò)2048位復(fù)雜RSA算法的CCU單元制作在一塊硅片上,形成一個(gè)可加載Java或C語(yǔ)言的專用的SOC,可用于公眾互聯(lián)網(wǎng)(如Internet安全)方面。
1.1.2 嵌入式處理器的選擇
針對(duì)各種嵌入式設(shè)備的需求,各個(gè)半導(dǎo)體芯片廠商都投入了很大的精力研發(fā)和生產(chǎn)適用于這些設(shè)備的CPU及協(xié)處理器芯片。用于嵌入式設(shè)備的處理器必須高度緊湊、低功耗和低成本。針對(duì)每一類應(yīng)用來(lái)說(shuō),開發(fā)者對(duì)處理器的選擇都是多種多樣的,掌上電腦就是一例,如表1.1所示。與全球PC市場(chǎng)不同的是,沒有一種微處理器和微處理器公司可以主導(dǎo)嵌入式系統(tǒng),僅以32位的CPU而言,就有100種以上的嵌入式微處理器。由于嵌入式系統(tǒng)設(shè)計(jì)的差異性極大,因此選擇是多樣化的。設(shè)計(jì)者在選擇處理器時(shí)要考慮的主要因素有如下幾個(gè) 方面。
表1.1 部分掌上電腦處理器一覽
廠家/型號(hào) |
處理器 |
速 度 |
卡西歐Cassiopeia E-100系列 |
MIPS-based NEC VR4121 |
131MHz |
康柏Aero 2100系列 |
MIPS-based NEC VR4111 |
70MHz |
菲利浦Nino 500系列 |
MIPS-based Toshiba PR31700 |
75MHz |
惠普J(rèn)ornada 400系列 |
Hitachi SH-3 7709a |
100MHz/133MHz |
3Com PalmPilotTM系列 |
Motorola DragonBall 68VZ328 |
33MHz |
蘋果MessagePad 2000/2100 Intel |
Intel StrongARM SA-110 |
160MHz |
康柏iPAQ H3650Intel |
Intel StrongARM SA-1110 |
206MHz |
(1) 調(diào)查市場(chǎng)上已有的CPU供應(yīng)商
有些公司(如Motorola、Intel、AMD)很有名氣,而有一些小的公司(如QED)雖然名氣很小,但也能生產(chǎn)很優(yōu)秀的微處理器。另外,有一些公司,如ARM、MIPS等,只設(shè)計(jì)但并不生產(chǎn)CPU,他們把生產(chǎn)權(quán)授予世界各地的半導(dǎo)體制造商。ARM是另外一種近年來(lái)在嵌入式系統(tǒng)中有影響力的微處理器制造商,ARM的設(shè)計(jì)非常適合于小的電源供電系統(tǒng)。Apple在Newton手持計(jì)算機(jī)中使用ARM,另外有幾款數(shù)字無(wú)線電話也在使用ARM。
(2) 處理器的處理速度
一個(gè)處理器的性能取決于多個(gè)方面的因素:時(shí)鐘頻率,內(nèi)部寄存器的大小,指令是否對(duì)等處理所有的寄存器等。對(duì)于許多需用處理器的嵌入式系統(tǒng)設(shè)計(jì)來(lái)說(shuō),目標(biāo)不是在于挑選速度最快的處理器,而是在于選取能夠完成作業(yè)的處理器和I/O子系統(tǒng)。如果你的設(shè)計(jì)是面向高性能的應(yīng)用,那么建議你考慮某些新的處理器,其價(jià)格極為低廉,如IBM和Motorola的Power PC。以前Intel的i960是銷售極好的RISC高性能芯片,但是最近幾年卻遇到強(qiáng)勁的對(duì)手,讓位于MIPS、SH以及后起之秀ARM。
(3) 技術(shù)指標(biāo)
當(dāng)前,許多嵌入式處理器都集成了外圍設(shè)備的功能,從而減少了芯片的數(shù)量,進(jìn)而降低了整個(gè)系統(tǒng)的開發(fā)費(fèi)用。開發(fā)人員首先考慮的是,系統(tǒng)所要求的一些硬件能否無(wú)需過(guò)多的膠合邏輯(Glue Logic)就可以連接到處理器上。其次是考慮該處理器的一些支持芯片,如DMA控制器、內(nèi)存管理器、中斷控制器、串行設(shè)備、時(shí)鐘等的配套。
(4) 處理器的低功耗
嵌入式微處理器最大并且增長(zhǎng)最快的市場(chǎng)是手持設(shè)備、電子記事本、PDA、手機(jī)、GPS導(dǎo)航器、智能家電等消費(fèi)類電子產(chǎn)品,這些產(chǎn)品中選購(gòu)的微處理器典型的特點(diǎn)是要求高性能、低功耗。許多CPU生產(chǎn)廠家已經(jīng)進(jìn)入了這個(gè)領(lǐng)域。
(5) 處理器的軟件支持
若僅有一個(gè)處理器,沒有較好的軟件開發(fā)工具的支持,也是不行的,因此選擇合適的軟件開發(fā)工具對(duì)系統(tǒng)的實(shí)現(xiàn)會(huì)起到很好的作用。
成數(shù)據(jù)的訪問(wèn)和刷新,即以同一個(gè)周期、相同的速度同步地工作,因而可以與系統(tǒng)總線以同頻率工作,可大大提高數(shù)據(jù)傳
]]>什么是開放源代碼?
開放源代碼軟件是現(xiàn)代計(jì)算環(huán)境的寶貴資源。本質(zhì)上,開放源代碼軟件使得源代碼對(duì)使用軟件的任何人可用,即不對(duì)最終用戶隱藏任何內(nèi)容。開放源代碼軟件不一定是免費(fèi)的,雖然大多數(shù)都是免費(fèi)的。許可證協(xié)議決定了軟件的使用方式;最流行的許可證是 GNU 公共許可證(GNU Public License,GPL)。
開放源代碼軟件是由許多不同的發(fā)起者所開發(fā)的,包括選擇與其他人共享其工作成果的技術(shù)愛好者所開發(fā)的項(xiàng)目。商業(yè)性的公司,比如 IBM,也在為開放源代碼出力,以便在社區(qū)中提供優(yōu)秀的技術(shù),同時(shí)確保他們的專有硬件和軟件得到開放工具的支持。能夠編程、編寫文檔或執(zhí)行其他一些軟件開發(fā)相關(guān)任務(wù)的任何人,都能夠幫助創(chuàng)建開放源代碼軟件 —— 并且他們正是這樣做的!
![]() ![]() |
![]()
|
為什么要使用開放源代碼工具?
許多人選擇開放源代碼工具是因?yàn)樗鼈儽阋耍ㄩ_放源代碼軟件經(jīng)常是免費(fèi)的,這當(dāng)然非常便宜)。開放源代碼軟件還傾向于非常可靠。由于有技術(shù)興趣的任何人都能夠查看源代碼,因而可能會(huì)有數(shù)千個(gè)質(zhì)量控制機(jī)構(gòu)在評(píng)估代碼。程序員能夠無(wú)隔閡地直接接觸用戶,因此問(wèn)題和 bug 通常是大家都知道的,從而迅速得到糾正。此外,由于沒有對(duì)用戶隱藏任何東西,這樣有利于更好的技術(shù)脫穎而出。
對(duì)于擔(dān)心安全問(wèn)題的用戶,開放源代碼軟件能夠給他們帶來(lái)心靈的平靜。如果懷疑應(yīng)用程序隱藏有“后門(back door)”,您可以獲得源代碼,自己檢查它,或讓您信任的人檢查它。然后您可以自己編譯該代碼,確保它和您預(yù)期的完全一樣。當(dāng)發(fā)現(xiàn)與安全相關(guān)的缺陷時(shí),社區(qū)會(huì)立即采取行動(dòng),并且通常會(huì)在幾小時(shí)內(nèi)提供建議使用的補(bǔ)丁。正式的項(xiàng)目解決辦法可能要花稍長(zhǎng)一點(diǎn)的時(shí)間,但是通常不會(huì)超出幾小時(shí)或幾天。開放源代碼軟件使您能夠在必要時(shí)對(duì)您的資源采取動(dòng)作。
開放源代碼軟件還有助于確保技術(shù)不會(huì)被忽略。由于開發(fā)過(guò)程對(duì)感興趣的任何人都是開放的,您通常會(huì)找到人們?yōu)椴怀R姷挠布_發(fā)的驅(qū)動(dòng)程序。此外,您還能找到由那些利用不常見協(xié)議的小社區(qū)為此類協(xié)議提供的支持。Linux 之所以在廣泛的 IBM 硬件上可用,正是由于采用了這種開放方法。這有助于保持您的硬件的生命力,同時(shí)幫助保護(hù)您避免失去對(duì)某種關(guān)鍵技術(shù)的軟件支持。如果某個(gè)項(xiàng)目不再提供官方支持了,您總是能夠選擇自己提供該支持!
![]() ![]() |
![]()
|
獲得開放源代碼工具
獲得開放源代碼軟件是很容易的;Linux 內(nèi)核本身就是開關(guān)放源代碼的。當(dāng)您安裝 Linux 時(shí),就開始使用開放源代碼了。除了內(nèi)核外,Linux 發(fā)行套件中還包含其他許多開放源代碼包,其中包括開發(fā)工具、庫(kù)和應(yīng)用程序。對(duì)于所有這些包,它們的源代碼都是可用的,您可以編譯任何包以優(yōu)化或?yàn)樘囟ㄓ猛径远x它。
除了發(fā)行套件中包含的包外,Internet 上還有其他開放源代碼軟件可供使用。有些是專用的項(xiàng)目或正處于首次開發(fā)中的新技術(shù),而其他則是與 Linux 發(fā)行套件中包含的包相競(jìng)爭(zhēng)的方法。這是一個(gè)思想的自由市場(chǎng)。成功的開放源代碼軟件通常最終會(huì)作為輔助包或公共包被接納到發(fā)行套件中。有些項(xiàng)目甚至被接納為 Linux 內(nèi)核的一部分,此時(shí)這個(gè)單獨(dú)的項(xiàng)目將解散,而它的開發(fā)將作為標(biāo)準(zhǔn)內(nèi)核維護(hù)的一部分繼續(xù)進(jìn)行。
SourceForge
SourceForge.net(請(qǐng)參閱 參考資料)是一個(gè)很受歡迎的針對(duì)開放源代碼項(xiàng)目的知識(shí)庫(kù)。它通過(guò)易于使用的 Web 界面來(lái)組織項(xiàng)目,該界面具有搜索功能以幫助您查找項(xiàng)目。每個(gè) SourceForge 項(xiàng)目都有版本歷史記錄、bug 列表、討論組、文檔,當(dāng)然還包括源代碼。如果擁有自己的開放源代碼項(xiàng)目,您也可以利用 SourceForge。
RPM 與源代碼
無(wú)論何時(shí)只要可能,預(yù)編譯的二進(jìn)制 RPM 都是在 Linux POWER 環(huán)境中使用開放源代碼軟件的最簡(jiǎn)單方式。軟件的所有部分都以二進(jìn)制的形式準(zhǔn)備好了,只需直接安裝即可。安裝通常只需幾秒鐘就能完成,軟件馬上就可供使用了。
由于 RPM 的工作方式,系統(tǒng)將自動(dòng)接受依賴關(guān)系和兼容性檢查,在軟件開始安裝之前,您會(huì)接到關(guān)于缺少某個(gè)組件的通知。此外,升級(jí)、管理和刪除 RPM 包也很簡(jiǎn)單。無(wú)論何時(shí)只要可能,采用 RPM 都是可取的。
針對(duì) RPM 的一個(gè)優(yōu)秀知識(shí)庫(kù)是 Rpmfind.net(請(qǐng)參閱 參考資料)。它具有一個(gè)來(lái)自許多發(fā)行套件的可搜索索引,以及大多數(shù)主要發(fā)行套件和升級(jí)的鏡像。為 PPC 列出的任何包都應(yīng)該與 POWER 系統(tǒng)兼容。您既可以搜索包的名稱,也可以搜索某個(gè)包中包含的單獨(dú)文件。得到的搜索結(jié)果將跨越廣泛的 Linux 發(fā)行套件,包括非常罕見的發(fā)行套件。所列出的每個(gè)包通常還指向?qū)?yīng)項(xiàng)目的主頁(yè),因此如果在查找某個(gè)項(xiàng)目資源時(shí)遇到問(wèn)題, rpmfind
可能會(huì)提供幫助。對(duì)于 POWER 體系結(jié)構(gòu),作為 PPC 包列出的所有 RPM 或許都能工作。在安裝新的包時(shí)務(wù)必細(xì)心一點(diǎn)。RPM 將會(huì)幫助保護(hù)您避免意外地完全摧毀系統(tǒng),不過(guò)強(qiáng)烈建議您使用常規(guī)的預(yù)防措施,比如制作備份以及在非生產(chǎn)系統(tǒng)上執(zhí)行測(cè)試。
![]() ![]() |
![]()
|
使用源代碼
由于 POWER 體系結(jié)構(gòu)上的 Linux 還比較新,并非所有開放源代碼項(xiàng)目擁有者都曾想到過(guò)它。因此可能還沒有對(duì)那些包可用的 RPM 包。在這種情況下,您必須自己編譯源代碼。這對(duì)于諸如 Samba 這樣成熟的項(xiàng)目來(lái)說(shuō)通常不是一件難事,但是對(duì)于不太常見的項(xiàng)目來(lái)說(shuō),可能需要做更多的工作。應(yīng)該對(duì)在生產(chǎn)系統(tǒng)上編譯源代碼保持謹(jǐn)慎,因?yàn)檫@樣可能導(dǎo)致問(wèn)題,或者失去對(duì)正在該系統(tǒng)上運(yùn)行的商業(yè)軟件的支持。
Linux 本質(zhì)上在不同的體系結(jié)構(gòu)上都是相同的;因此,許多項(xiàng)目的源代碼無(wú)需多少經(jīng)驗(yàn)就能成功地編譯。源代碼通常作為壓縮的 tar 文件來(lái)提供。Gzip 是最常用的壓縮方式,不過(guò) bzip2 正在變得流行起來(lái),因?yàn)樗鼊?chuàng)建的壓縮文件更小一些。
首先,您必須展開壓縮包。讓我們使用 Gimp 作為一個(gè)例子。Gimp 是一個(gè)照片編輯包,它處理各種各樣的圖像格式,并且包括昂貴的商業(yè)產(chǎn)品中具有的功能。
圖 1. Gimp 實(shí)際應(yīng)用
要下載 Gimp 源代碼,請(qǐng)參閱本文后面 參考資料中指向 Gimp Web 站點(diǎn)的鏈接。要展開源代碼,請(qǐng)使用 tar -xvjf gimp-1.2.4.tar.bz2
命令。
文件將解壓縮到當(dāng)前目錄。標(biāo)準(zhǔn)的方法是將源代碼包含在一個(gè)與產(chǎn)品名稱相同的目錄中。在此例中,文件包含在一個(gè)名為 gimp-1.2.4 的目錄中。
切換到該目錄就會(huì)看到源代碼、一些文檔、配置腳本,以及 README 文件。大多數(shù)源代碼包都有一個(gè)名為 INSTALL 和一個(gè)名為 README 的文件。在編譯軟件之前應(yīng)該閱讀這些文件。通過(guò)閱讀這些文件,您可以在產(chǎn)生問(wèn)題之前識(shí)別它們,并且獲得正確的編譯和安裝步驟,從而省去一些麻煩。我在編譯源代碼時(shí)遇到的大多數(shù)問(wèn)題,都只是因?yàn)槲覜]有遵循那些文件中的指示。
最常見的下一個(gè)步驟是運(yùn)行 configure
腳本。 Configure
是 autoconf 包的一部分,這個(gè)包包含在 Linux 發(fā)行套件的開發(fā)工具中。下面引用 Autoconf 的包描述:
“GNU 的 Autoconf 是一個(gè)用于配置源代碼和 Makefile 的工具。使用 Autoconf,程序員能夠創(chuàng)建可移植和可配置的包,因?yàn)樯砂娜四軌蛑付ǜ鞣N配置選項(xiàng)。”
這個(gè)配置腳本在系統(tǒng)上運(yùn)行一系列測(cè)試,以確定針對(duì)您的發(fā)行套件和體系結(jié)構(gòu)編譯包的最佳方式。然后它為您的系統(tǒng)創(chuàng)建一個(gè)自定義的 Makefile。如果在系統(tǒng)上執(zhí)行編譯時(shí)遇到問(wèn)題, configure
將會(huì)告訴您。 Configure
通常允許您定制要包括到編譯包中的特性,或者允許您提供關(guān)于庫(kù)或其他必需文件的位置參數(shù),以便該包能夠成功編譯。要不帶參數(shù)執(zhí)行 configure
腳本,請(qǐng)使用如下命令:
./configure
它將在系統(tǒng)用上執(zhí)行多個(gè)測(cè)試并成功地結(jié)束。要生成程序,請(qǐng)使用如下命令:
make
如果編譯出錯(cuò),您需要確定問(wèn)題并修復(fù)它們。這些問(wèn)題也許比較棘手,可能需要關(guān)于您的環(huán)境和總體編程的大量知識(shí)。如果一切順利,下一步通常是使用如下命令來(lái)安裝軟件:
make install
這個(gè)命令將把文件復(fù)制到系統(tǒng)中的適當(dāng)位置,更新文件權(quán)限,復(fù)制配置文件,并把文檔添加到手冊(cè)頁(yè)。
這種方案存在許多可能的變化形式。這其中包括對(duì) configure
腳本使用開關(guān)來(lái)調(diào)整將要編譯到程序中的特性,使用 Makefile 中的不同命令來(lái)調(diào)整編譯方式,等等。
如果程序在安裝后無(wú)法工作,大多數(shù) Makefile 都包含一個(gè) uninstall 參數(shù)來(lái)刪除該程序。
make uninstall
務(wù)必記住,使用原始源代碼不會(huì)向 RPM 數(shù)據(jù)庫(kù)輸入任何內(nèi)容。以這種方式安裝的軟件是非托管的(unmanaged),因此應(yīng)該小心進(jìn)行。
![]() ![]() |
![]()
|
創(chuàng)建自定義 RPM
如果打算使用大量純?cè)创a,您應(yīng)該了解更多關(guān)于創(chuàng)建自己的 RPM 的信息。創(chuàng)建 RPM 并不是特別困難,雖然這個(gè)主題超出了本文的討論范圍。從您自己的代碼創(chuàng)建 RPM 要比從陌生人編寫的代碼創(chuàng)建 RPM 容易得多。要?jiǎng)?chuàng)建良好的 RPM 包,您需要足夠了解某個(gè)軟件部分中的所有組件。本質(zhì)上,這個(gè)過(guò)程就是創(chuàng)建一個(gè)名為 SPEC 的配置文件,它識(shí)別 RPM 數(shù)據(jù)庫(kù)所必需的所有信息。關(guān)于依賴關(guān)系的信息、生成該文件的步驟,以及安裝后的操作連同該包中所有文件的列表,都包括在這個(gè) SPEC 文件中。RPM 使用這個(gè) SPEC 文件來(lái)編譯代碼和創(chuàng)建二進(jìn)制包。請(qǐng)查看您的源包,以確定是否已經(jīng)創(chuàng)建了一個(gè)示例 SPEC 文件。包括 SPEC 文件已經(jīng)成了一個(gè)普遍習(xí)慣,這樣還可能允許您只需做很少工作或不需要做工作就能創(chuàng)建一個(gè)自定義的 RPM。
源 RPM
在創(chuàng)建 RPM 時(shí),存在一個(gè)叫做源 RPM(Source RPM,SRPM)的工件(artifact)。這是一個(gè)與源代碼組合后的 SPEC 文件,設(shè)計(jì)用于構(gòu)建一個(gè)或多個(gè)體系結(jié)構(gòu)。這對(duì)兩個(gè)世界來(lái)說(shuō)都是最好的!使用源 RPM,您能夠在系統(tǒng)上自定義編譯軟件,但是完成后的產(chǎn)品將是可安裝的 RPM 而不只是原始的二進(jìn)制。作為預(yù)編譯 RPM 可用的大多數(shù)包也作為 SRPM 可用。這可能是在 Linux 中跨平臺(tái)移動(dòng)軟件的一種簡(jiǎn)單方式。當(dāng)您在一個(gè)不同的平臺(tái)上成功地重新編譯時(shí),可考慮與社區(qū)共享完成后的 RPM。
]]>
圖1
開發(fā)者必須精確地考慮到這些工具的松散集合能提供什么樣的功能,以及需要付出多大的努力才能形成完整的解決方案。"
在Linux應(yīng)用程序和庫(kù)的除錯(cuò)方面,GNU Debugger (GDB)作為一種標(biāo)準(zhǔn)已有幾年的歷史。它是一種命令行程序,由多個(gè)不同的圖形用戶接口前端予以支持,每個(gè)前端都能以多種方式提供除錯(cuò)控制功能。盡管GDB不是一個(gè)完美的方案,但它足夠應(yīng)對(duì)各種除錯(cuò)任務(wù),而且已經(jīng)得到開放原始程序代碼團(tuán)體的廣泛支持。
Linux核心或設(shè)備驅(qū)動(dòng)程序的除錯(cuò)要比應(yīng)用程序的除錯(cuò)繁瑣得多。
在做調(diào)查時(shí),以下方面應(yīng)特別注意:
什么除錯(cuò)方法支持要開發(fā)產(chǎn)品的硬件?
需要什么核心支持程序?
還需要其它什么支持程序?
除錯(cuò)接口怎么樣,如何使用?
該工具需要除錯(cuò)核心模塊及處理虛擬地址轉(zhuǎn)換嗎?
還需要其它什么工具才能提供完整的方案?
經(jīng)過(guò)進(jìn)一步的調(diào)查,開發(fā)者往往發(fā)現(xiàn)工具A和工具B并沒有提供完全一致的功能,因?yàn)樗鼈兪窃诒舜霜?dú)立的情況下開發(fā)的。結(jié)果,開發(fā)者必須精確地考慮到這些工具的松散集合能提供什么樣的功能,還需要付出多大的努力才能形成完整的解決方案。
如果不同處理器類型間的整合、可用性、互通作業(yè)性和移植性很關(guān)鍵的話,開發(fā)者應(yīng)考慮購(gòu)買商用開發(fā)工具。這主要是因?yàn)閷㈤_發(fā)一個(gè)'免費(fèi)'方案所付出的努力考慮進(jìn)去,商用開發(fā)工具并不算貴。
Linux BSP
Linux系統(tǒng)有兩大主要部份:帶設(shè)備驅(qū)動(dòng)程序的Linux核心;以及根文件系統(tǒng),包括系統(tǒng)所需的全部支持應(yīng)用程序、服務(wù)和庫(kù)。
除了駐留在目標(biāo)板上的OS組件外,還需要制作一個(gè)由GNU Compiler Collection構(gòu)成的交叉編譯環(huán)境,為庫(kù)和二進(jìn)制程式(binutils)提供支持。
雖然幾乎每一個(gè)組件都可在網(wǎng)上找到,但在硬件或設(shè)備驅(qū)動(dòng)程序支持、整合測(cè)試信息、交叉編譯指南或軟件兼容性方面卻很難收集到太多信息。盡管開發(fā)者可從網(wǎng)上免費(fèi)下載各種組件以配置嵌入式Linux操作系統(tǒng),但每個(gè)組件在版本、支持、穩(wěn)定性和測(cè)試等方面的狀態(tài)則需要開發(fā)者自己決定。然后,開發(fā)者還要完成最后的OS整合和測(cè)試,以及為所開發(fā)產(chǎn)品提供終身Linux OS維護(hù)。
另一方面,嵌入式Linux供貨商所提供的商用Linux板支持工具套件一般都是經(jīng)過(guò)預(yù)先安裝和測(cè)試的,而且提供支持和維護(hù)。其它須考慮的因素包括Linux桌面主機(jī)將會(huì)添加不同的庫(kù)和核心功能,以及由于組織內(nèi)的開發(fā)者變動(dòng)而引起的長(zhǎng)期維護(hù)問(wèn)題。
品質(zhì)保證部門一般會(huì)執(zhí)行一系列嚴(yán)格的驗(yàn)證和性能測(cè)試,其中包括內(nèi)存泄漏檢測(cè)/糾正、程序代碼最佳化和任務(wù)追蹤等。那些想利用開放原始程序代碼工具開發(fā)針對(duì)非X86平臺(tái)的嵌入式Linux產(chǎn)品開發(fā)者將會(huì)發(fā)現(xiàn)這一任務(wù)甚至要比選擇開放原始程序代碼除錯(cuò)方案難得多。Linux Trace Toolkit、Valgrind工具及其它內(nèi)存分析程序可完成部份測(cè)試和驗(yàn)證任務(wù)。但總的來(lái)說(shuō),它們?nèi)狈﹃P(guān)鍵特性、整合功能及廣泛的硬件支持。這些開放原始程序代碼分析工具的評(píng)估過(guò)程與評(píng)估除錯(cuò)方案的過(guò)程基本相同。
最后的分析就是,一個(gè)設(shè)計(jì)得恰到好處的開發(fā)環(huán)境應(yīng)能夠供貨商用和開放原始程序代碼兩個(gè)世界所具有的最好特性:
·完整的開發(fā)能力;
·易于使用和整合;
·大型工程組織的協(xié)調(diào)控制;
·品質(zhì)和支持保證;
·持續(xù)性;
·按照自己的判斷力使用開放原始程序代碼的能力。 本信息來(lái)源:CAD教育網(wǎng) www.cadedu.com