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